我做了一些搜索但是在这上面空了。我希望将一个网页存储到一个数据库字段,以便以后可以查看源代码(我不想保存到文件,因为我在Heroku上)。
我试过了:
Model.create(:text => open(url)
和
Model.create(:text => Nokogiri::HTML(open(url)))
然而,这些似乎都没有保存页面源代码。我认为我在这里错过了一步,但是有人可以引导我朝着正确的方向前进吗?
编辑#1
当我在我的Nokogiri :: HTML文档上尝试使用__s时,我得到一个空字符串。这是我的代码。长用户代理的原因是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 我发现在Windows 7上我的ruby安装肯定有问题。我尝试了一个ubuntu安装我在Windows机器上作为访客运行,它按预期工作。从现在开始编写ubuntu安装代码。
答案 0 :(得分:1)
您想要在Nokogiri中调用#to_s
课程的Document
方法。你可以这样做:
text = Nokogiri::HTML(open("http://google.com")).to_s
MyModel.create(:text => text)
确保模型中的text
列属于text
类型。
编辑:由于您不需要Nokogiri,您可以使用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)