【发布时间】:2011-12-19 01:01:24
【问题描述】:
我正在使用以下代码使用 scrAPI gem 抓取 eBay 列表:
我通过执行安装了这个:
gem install scrapi
我还通过声明覆盖了它的默认文本解析器:
Scraper::Base.parser :html_parser
问题是我在auctions 数组大小上不断收到以下错误。不知道我做错了什么? size 和 length 都不起作用。
Scraper.rb:31:in `<class:ScraperDemo>': undefined method `size' for nil:NilClass (No
MethodError)Scraper.rb:10:in `<main>'
我只是通过命令行运行:
ruby Scraper.rb
代码:
#!/usr/bin/env ruby
require 'open-uri'
require 'httparty'
require 'json'
require 'scrapi'
Scraper::Base.parser :html_parser
class ScraperDemo
ebay_auction = Scraper.define do
process "h3.ens>a", :description=>:text, :url=>"@href"
process "td.ebcPr>span", :price=>:text
process "div.ebPicture >a>img", :image=>"@src"
result :description, :url, :price, :image
end
ebay = Scraper.define do
array :auctions
process "table.ebItemlist tr.single", :auctions=>ebay_auction
result :auctions
end
auctions = ebay.scrape(URI.parse('http://search.ebay.com/ipod-nano_W0QQcatrefZC6QQfromZR3QQfsooZ1QQfsopZ1QQkeywordZonQQsacatZQ2d1QQstrkwZipod'))
# No. of channels found
puts auctions.size # error occurs on this line number
# First auction:
auction = auctions[0]
puts auction.description
puts auction.url
end
【问题讨论】:
-
错误信息告诉你
auctions是nil,并不是一个数组。问题不在于size。第 28 行有问题。顺便说一下,由于您的错误消息给出了行号,因此更友好和礼貌地给出带有行的代码,或者至少告诉错误消息指的是哪一行。您是在要求这里的人计算代码中的行数吗? -
auctions.count 会返回任何东西吗? auctions.type 或auctions.class 返回什么?
-
@ScottJShea 未定义方法“计数”,未定义方法“类型”,auctions.class= NilClass
-
Scrapi 不再是抓取的流行选择。您应该考虑改用 nokogiri。
-
@pguardiario ...或 Mechanize,它为您提供类似浏览器的导航,并无缝公开 Nokogiri 以供抓取。
标签: ruby-on-rails ruby arrays screen-scraping