Сохранить веб-страницу или документ nokogiri в поле базы данных - PullRequest
1 голос
/ 21 декабря 2011

Я немного искал, но ничего не понял. Я хочу сохранить веб-страницу в поле базы данных, чтобы впоследствии можно было просмотреть исходный код (я не хочу сохранять файл, потому что я на Heroku).

Я пробовал: Model.create(:text => open(url) и
Model.create(:text => Nokogiri::HTML(open(url)))

Однако ни один из них, похоже, не сохраняет исходный код страницы. Я предполагаю, что я здесь пропускаю шаг, но может ли кто-нибудь направить меня в правильном направлении?

Редактировать # 1 Когда я попробовал to_s в своем документе Nokogiri :: HTML, я получил пустую строку. Это мой код ниже. Причина длинного пользовательского агента в том, что Google показывает разные результаты в зависимости от пользовательского агента, и я пытаюсь имитировать настольный пользовательский агент.
Nokogiri::HTML(open("http://www.google.com/search?aq=f&gcx=c&sourceid=chrome&ie=UTF-8&q=apple", 'User-Agent' => 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2'), nil, 'utf-8').to_s

Редактировать # 2 Очень странно. Этот код также возвращает пустую строку. Я проверил с некоторыми другими людьми, и они не получали пустых строк.
text = open("http://www.google.com/search?aq=f&gcx=c&sourceid=chrome&ie=UTF-8&q=apple", 'User-Agent' => 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2').read

Редактировать # 3 Я обнаружил, что с моей установкой ruby ​​в Windows 7 что-то не так. Я попытался установить ubuntu на моем компьютере под управлением Windows в качестве гостя, и это сработало, как и ожидалось. Собираюсь код на установку Ubuntu отныне.

1 Ответ

1 голос
/ 21 декабря 2011

Вы хотите вызвать метод #to_s класса Document в Нокогири. Вы можете сделать это так:

text = Nokogiri::HTML(open("http://google.com")).to_s
MyModel.create(:text => text)

Убедитесь, что столбец text в вашей модели имеет тип text.

Редактировать: Так как вам не нужны нокогири, вы можете просто использовать open-uri:

require 'open-uri'
text = open("http://www.google.com/search?aq=f&gcx=c&sourceid=chrome&ie=UTF-8&q=apple", 'User-Agent' => 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2').read
MyModel.create(:text => text)
...