Rails 请问如何把一个 Nokogiri 解析出来的 link 保存到数据库

Jacob · 2013年09月03日 · 最后由 luojie2017 回复于 2016年12月22日 · 3145 次阅读

有些 link 因为网络原因可能暂时不能访问,想保存下来放到下次再进行抓取

link = Nokogiri::HTML.parse(open(url)).css('a').first
link['href'] = "xxx/xxx"

TRY<一>

class MissingLink

serialize :link

end

MissingLink.create(:link => link)

missing_link = MissingLink.last

missing_link.link.class => Nokogiri::XML::Element

missing_link.link['href'] 
=> TypeError: wrong argument type Nokogiri::XML::Element (expected Data)

TRY<二> 使用 Marshal.dump

MissingLink.create(:link => Marshal.dump(link))
no _dump_data is defined for class Nokogiri::XML::Element

请问该怎么保存?谢谢

open(url) 处可以尝试实现 cache,可以看看 open-uri-cached

谢谢,我试试

用 to_html 保存成字符串,下次直接把字符串传进去就行了,或xx.html = str (有这样的方法可能名字记错)

因为还涉及到一系列处理,比如 link.parent.parent, 所以不能单独保存 link['href']. 似乎只有先把 str = open(url) 保存下来,再通过 Nokogiri::HTML.parse(str).css('a').map{|link| link.href == missing_link.href}得到该对象

#4 楼 @Jacob #3 楼 @jjym 你们想那个方案用 open-uri-cached 能完美解决的,而且能和你目前的代码无缝结合,只需要 require 一下就行了,可以看看 open-uri-cached 的内部实现。

#4 楼 @Jacob 请问:如何抓取当前页面的页面信息?

需要 登录 后方可回复, 如果你还没有账号请 注册新账号