【发布时间】:2015-05-16 20:35:04
【问题描述】:
当我转到一个页面并“查看源代码”时,我无法让 Nokogiri 返回相同的内容。而且我这辈子都不知道为什么。
这是我正在查看的页面: http://www.amazon.com/gp/product/B009NWFP5Q
如您所见,它返回了一只橙色的鞋子。如果我查看源代码并通过搜索“hiRes”两次找到我正在寻找的链接,我得到: http://ecx.images-amazon.com/images/I/71b75uTtzDL.UL1500.jpg
但是,如果我使用 Nokogiri 运行此代码:
require 'nokogiri'
require 'open-uri'
require 'uri'
url = "http://www.amazon.com/gp/product/B009NWFP5Q"
doc = Nokogiri::HTML(open(url))
pic = doc.css('div#imageBlock_feature_div script')[0]
puts pic
并在我得到这张图片的相同位置寻找链接: http://ecx.images-amazon.com/images/I/81R97WG9nyL.UL1500.jpg
这是一只蓝色的鞋子!!!啊。。
知道为什么吗??
【问题讨论】:
-
如今,DHTML 页面非常普遍,其中 JavaScript 或 CSS 会修改页面的内容或显示。浏览器解释并执行 JavaScript,当您执行“显示源代码”时,您将看到完成的结果。像 Nokogiri 和扩展的 Mechanize 这样的工具不解释 JavaScript。相反,如果您在浏览器中关闭 JavaScript 并加载页面并查看源代码,他们会看到您所看到的确切内容。每当您在 Nokogiri 中看不到浏览器看到的相同 HTML 时,我都会怀疑这个问题。你应该考虑使用 Watir 项目中的一些东西。
-
另外,不要使用
doc.css('div#imageBlock_feature_div script')[0]。请改用doc.at('div#imageBlock_feature_div script')或doc.at_css('div#imageBlock_feature_div script')。 -
好的,太好了.. 我会检查一下.. 是的,因为我什至在搜索该项目,然后输入该 URL,它仍然在该页面上拾取默认图像,这不是我要找的..
-
使用 HTML 时,最好使用
wget或curl检索页面并在编辑器中查看。然后您就可以准确地知道他们发送的内容,并且可以快速找到动态修改/加载的部分。
标签: ruby-on-rails ruby amazon-web-services web-scraping nokogiri