【问题标题】:Hpricot: how to do conditional search using Hpricot in Ruby on RailsHpricot:如何在 Ruby on Rails 中使用 Hpricot 进行条件搜索
【发布时间】:2011-06-01 10:33:51
【问题描述】:

我正在解析两个具有相似 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

但这不起作用。谁能帮忙。

【问题讨论】:

    标签: ruby-on-rails ruby hpricot


    【解决方案1】:

    我用下面的代码成功了

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

    谢谢大家

    【讨论】:

      【解决方案2】:

      为什么不同时搜索两者?

      编辑:我又错了——我意识到为什么我切换到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
      

      【讨论】:

      • 我使用了您的答案,但它显示的参数数量错误(2 比 1)。请帮忙。
      • 谢谢老兄。当我更改它时,我得到页面的完整 html 内容,当我放置 a.inner_html 时,当我使用 a.attributes ['href'] 时,我得到一个“属性”错误。如果使用'|' '或'得到想要的结果是'|'和“或”相同。
      • 谢谢老兄。您的解决方案确实帮助我摆脱了这种废话。非常感谢:)
      猜你喜欢
      • 1970-01-01
      • 2011-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-11
      • 1970-01-01
      • 1970-01-01
      • 2010-11-27
      相关资源
      最近更新 更多