0

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

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

我需要获取作为结果列出的链接(我需要为上述网站上的任何可能的 url 执行此操作,因此 RSS 或这样的东西是无益的,因为我需要程序在给定任何 url 的情况下即时读取它们我喂养。)

我已经尝试了一切来获得我需要的特定 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 中查看源代码时,我确实看到了它们,所以我很困惑。有没有人知道如何解决这个问题?多年来我一直在努力寻找自己的方式,但我无法独自找到解决方案!任何帮助将不胜感激

4

1 回答 1

2

看起来该站点正在使用 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')

希望这可以帮助!

于 2009-11-10T00:54:51.137 回答