帮助Hpricot解析html

时间:2011-09-12 05:30:57

标签: ruby-on-rails ruby ruby-on-rails-3

我正在尝试使用Hpricot解析amazon 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标签。谁能告诉我这里发生了什么?

2 个答案:

答案 0 :(得分:0)

亚马逊移动网站服务器可以使用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) }

与浏览器相同,以便服务器返回与浏览器相同的源。

答案 1 :(得分:0)

您可能获得了不同的页面,因为您没有传递User-Agent HTTP标头以及您的请求。尝试传递一个,看看是否会改变你得到的东西。 (提示:“窃取”Chrome)。

接下来,我不会再使用Hpricot,因为它不受维护并被Nokogiri取代。使用Nokogiri,您可以使用doc.css("span.dpOurPrice")找到此元素。