【发布时间】:2015-01-13 23:55:36
【问题描述】:
我想从 HMs 网站获取一些数据,使用这个爬虫:
require 'nokogiri'
require 'open-uri'
require 'rmagick'
require 'mechanize'
product = "http://www2.hm.com/es_es/productpage.0250933004.html"
web = Nokogiri::HTML(open(product))
puts web.at_css('.product-item-headline').text
Nokogiri 为每个选择器返回 NIL 并引发 undefined method for nilClass。我不知道这个特定的网站是否有可以避免抓取的东西。
在 URL DOM 中,我可以看到有一个 .product-item-headline 类,我可以在 JavaScript 控制台中获取信息,但不能使用 Nokogiri。
我尝试定位整个正文,这是我唯一打印出来的内容。
var callcoremetrix = function(){cmSetClientID(getCoremetricsClientId(), true, "msp.hm.com", "hm.com");};
也许一些 JavaScript 正在破坏我的抓取?
【问题讨论】:
-
打开一个 IRB 会话并逐步进行。甚至可能将 HTML 写入文件。仅仅因为 DOM 有一些东西并不意味着它就在你正在喂 Nokogiri 的源中。
-
问题是如果我尝试在 IRB 中使用 Nokogiri 打开一个 URL,它会认为它是一个文件:Errno::ENOENT: No such file or directory - www2.hm.com/es_es/productpage.0250933004.html
-
您需要先
require 'open-uri'等。 -
我在 IRB 上仍然遇到同样的错误... irb(main):005:0> puts web.at_css('.product-item-headline').text NoMethodError: undefined method `text ' for nil:NilClass