Hpricot:如何在Ruby on Rails中使用Hpricot进行条件搜索

时间:2011-06-01 10:33:52

标签: ruby-on-rails ruby hpricot

我正在解析具有类似HTML标记的两个不同网站。我需要使用一个通用的解析器。我的问题是一个网站有一个HTML格式div / ol / li / span / a和其他有div / ol / li / h3 / a

我当前的解析器代码是

 doc = Hpricot(open("http://test.com").read)
 doc.search("div/ol/li/span/a").each do |a|
   question = a.inner_html
   ans_url =  a.attributes['href']
   puts question
   puts answer_url
 end

这适用于第一个网站。如何使用相同的代码来解析我的第二个站点(div / ol / li / h3 / a)。我该如何指定条件。我试过的内容如下所示

 doc = Hpricot(open("http://test.com").read)
 doc.search("div/ol/li/span or h3/a").each do |a|
   question = a.inner_html
   ans_url =  a.attributes['href']
   puts question
   puts answer_url
 end

但这不起作用。任何人都可以帮忙。

2 个答案:

答案 0 :(得分:1)

为什么不直接搜索?

编辑:我又错了 - 我意识到为什么我切换到Nokogiri。它更容易使用:

require 'open-uri'
doc = Nokogiri::HTML(open('http://example.com/'))


doc.search("div > ol > li > span > a", "div > ol > li > h3 > a").each do |a|
  question = a.content
  answer_url =  a.attr('href').value
  puts question
  puts answer_url
end

答案 1 :(得分:1)

它使用了以下代码

 doc.search("div/ol/li/span/a | div/ol/li/h3/a").each do |a|
  #..
 end

全部谢谢