【问题标题】:Nokogiri gem vs. opening by handNokogiri gem vs.手动打开
【发布时间】: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 时,最好使用 wgetcurl 检索页面并在编辑器中查看。然后您就可以准确地知道他们发送的内容,并且可以快速找到动态修改/加载的部分。

标签: ruby-on-rails ruby amazon-web-services web-scraping nokogiri


【解决方案1】:

可能显示的颜色以某种方式基于您的会话或分配给存储在浏览器中的 cookie 的动态属性。找到一种方法来提供一个 URL,该 URL 将准确地返回您正在寻找的内容。也可以使用 http 客户端代码提供 cookie,但这似乎是 B 计划。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-06
    • 2011-02-22
    • 1970-01-01
    • 1970-01-01
    • 2015-02-14
    • 2016-02-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多