我正在尝试使用Hpricot解析亚马逊mobile.website,但我发现我从浏览器(IE、FF、Chrome和opera)获得的源代码与Hpricot解析的源代码不同
例如:http://www.amazon.com/gp/aw/d/0534243126
我正在试着提取折扣后的价格。通过查看任何浏览器的源代码,这是一项非常简单的工作: doc.at("span@class='dpOurPrice'").inner_text
然而,结果是open-uri/hpricot得到了一个完全不同的源代码,价格上也没有html标签。有人能告诉我这是怎么回事吗?
发布于 2011-09-12 13:36:46
亚马逊移动网站服务器可能会使用user agent字符串来确定要返回的内容类型,而ruby的用户代理并不是服务器所期望的。使用以下命令设置:
open("http://xxx.com", '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) }
与浏览器相同,以便服务器向浏览器返回与其相同的源。
发布于 2011-09-12 13:38:30
您可能会得到一个不同的页面,因为您没有随同请求一起传递User-Agent HTTP头。试着传递一个,看看这是否会改变你得到的东西。(提示:“窃取”Chrome的)
接下来,我将不再使用Hpricot,因为它不需要维护,并且已被Nokogiri取代。例如,在Nokogiri中,你可以使用doc.css("span.dpOurPrice")找到这个元素。
https://stackoverflow.com/questions/7383653
复制相似问题