【问题标题】:HTML Scraping with Hpricot (Using Ruby on Rails)使用 Hpricot 进行 HTML 抓取(使用 Ruby on Rails)
【发布时间】:2009-11-09 22:26:26
【问题描述】:

我已经阅读了大量的教程来帮助解决问题,在 Hpricot 下,我发现它的问题是没有刮掉所有的 Html 可以这么说。我会详细说明:

我试图刮掉 html 的网站是 http://yellowpages.com.mt/Malta-Search/Radio-In-Malta-Gozo.aspx

我需要获取作为结果列出的链接(我需要为上述网站上的任何可能的 url 执行此操作,因此 RSS 或此类无益,因为我需要程序即时读取它们给定我提供的任何网址。)

我已经尝试了所有方法来获取我需要的特定 ID(提供直接 XPATH 等等),但我意识到当我这样做时

doc = Hpricot(open("http://yellowpages.com.mt/Malta-Search/Radio-In-Malta-Gozo.aspx", 'User-Agent'=>'ruby')) str = doc puts str

提供的结果不包括与我需要的链接相关的所有 html!因此,无论我使用哪种方法来抓取,它都找不到所需的元素,因为根据 hpricot,它们不存在。

当我在 Firefox 中查看源代码时,我确实看到了它们,所以我很困惑。有没有人知道如何解决这个问题?多年来我一直在努力寻找自己的方式,但我无法独自找到解决方案! 任何帮助将不胜感激

【问题讨论】:

  • 我想要的元素存在于:html/body/form/table//tr/td/div/table[2]//tr[2]/td[2]/div/table/ table//tr/td/div/div/table/tbody/tr/td/h6(其中 // 表示 tbody)但 Hpricot 不会读取 html/body/form/table//tr/td/div/table[2 ]//tr[2]/td[2]/div 有什么想法吗?

标签: html ruby-on-rails screen-scraping hpricot


【解决方案1】:

看起来该站点正在使用 User-Agent 执行某些操作。如果我更改该属性以匹配我的 Firefox 版本发送的内容,我会得到完整的响应正文。当我将属性保留为“红宝石”时,响应不完整。不知道根本原因是什么,但这似乎可以缓解症状。

require 'rubygems'
require 'hpricot'
require 'open-uri'

doc = open("http://yellowpages.com.mt/Malta-Search/Radio-In-Malta-Gozo.aspx", 'User-Agent'=>'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2') { |f| Hpricot(f) }
puts doc.search('h6')

希望这会有所帮助!

【讨论】:

  • 工作就像一个魅力!非常感谢!!你是一个救生员
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-27
  • 2015-01-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多