将网页或nokogiri doc保存到数据库字段

时间:2011-12-20 21:45:10

标签: ruby-on-rails ruby-on-rails-3 windows-7 ubuntu

我做了一些搜索但是在这上面空了。我希望将一个网页存储到一个数据库字段,以便以后可以查看源代码(我不想保存到文件,因为我在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安装代码。

1 个答案:

答案 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)