【问题标题】:Ruby/Rails - Cannot get size of arrayRuby/Rails - 无法获取数组的大小
【发布时间】:2011-12-19 01:01:24
【问题描述】:

我正在使用以下代码使用 scrAPI gem 抓取 eBay 列表:

我通过执行安装了这个:

gem install scrapi

我还通过声明覆盖了它的默认文本解析器:

Scraper::Base.parser :html_parser

问题是我在auctions 数组大小上不断收到以下错误。不知道我做错了什么? sizelength 都不起作用。

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

【问题讨论】:

  • 错误信息告诉你auctionsnil,并不是一个数组。问题不在于size。第 28 行有问题。顺便说一下,由于您的错误消息给出了行号,因此更友好和礼貌地给出带有行的代码,或者至少告诉错误消息指的是哪一行。您是在要求这里的人计算代码中的行数吗?
  • auctions.count 会返回任何东西吗? auctions.type 或auctions.class 返回什么?
  • @ScottJShea 未定义方法“计数”,未定义方法“类型”,auctions.class= NilClass
  • Scrapi 不再是抓取的流行选择。您应该考虑改用 nokogiri。
  • @pguardiario ...或 Mechanize,它为您提供类似浏览器的导航,并无缝公开 Nokogiri 以供抓取。

标签: ruby-on-rails ruby arrays screen-scraping


【解决方案1】:

我最终选择了 Nokogiri 作为我的抓取工具。

【讨论】:

    猜你喜欢
    • 2017-10-28
    • 1970-01-01
    • 2017-03-12
    • 1970-01-01
    • 2020-07-24
    • 2014-05-10
    • 1970-01-01
    • 1970-01-01
    • 2016-05-03
    相关资源
    最近更新 更多