2011-12-20 30 views
1

我做了一些搜索,但在此上空。我正在寻找将网页存储到数据库字段,以便稍后可以查看源代码(由于我在Heroku上,我不想保存到文件中)。保存网页或nokogiri文档到数据库字段

我已经试过: Model.create(:text => open(url)
Model.create(:text => Nokogiri::HTML(open(url)))

然而,无论这些似乎保存网页的源代码。我假设我在这里错过了一步,但是有人可能会把我引向正确的方向吗?

编辑#1 当我在我的Nokogiri :: HTML文档上尝试to_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上安装红宝石我试图在我跑我的Windows机器上的一个客人的Ubuntu的安装和它的工作作为预期。将从现在开始在ubuntu安装上编写代码。

回答

1

想要在Nokogiri中致电Document类的#to_s方法。你可以这样说:

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) 
+0

感谢。似乎仍然有一些麻烦,我想可能是因为我的文档如何格式化。请参阅我上面的编辑。 – asahi 2011-12-20 23:46:01

+0

我似乎遇到了Nokogiri的麻烦。有没有办法在不使用Nokogiri的情况下保存网页源代码? – asahi 2011-12-21 00:01:16

+0

运行代码上面,我得到什么似乎是一个肯定的答复:https://raw.github.com/gist/1503946/0c0bd7df76c893b1f0e7c343eba159f86eda7794/foo – 2011-12-21 00:27:52

相关问题