繁体   English   中英

错误:arguments 的编号错误(给定 0,预期为 2)

[英]Error: wrong number of arguments (given 0, expected 2)

我试图用 Rails 制作一个基本的 web 刮刀。 每次我点击抓取按钮时,它都会将我发送到正确的位置,但每次都会给我这个错误。

这是我的restaurants_controller.rb文件

  def scrape
    url = 'https://www.tripadvisor.com/Restaurants-g31892-Rogers_Arkansas.html'
    response = RestaurantsScraper.process(url)
    if response[:status] == :completed && response[:error].nil?
      flash.now[:notice] = "Successfully scraped url"
    else
      flash.now[:alert] = response[:error]
    end
  rescue StandardError => e
    flash.now[:alert] = "Error: #{e}"
  end

这是我的restaurantscrapper.rb文件

class RestaurantsScraper < Kimurai::Base
    @name = 'restaurants_scraper'
    @engine = :mechanize


    def self.process(url)
        @start_url = [url]
        self.crawl!
    end


    def parse(response, url, data:{})
        response.xpath("//div[@class=_1llCuDZj]").each do |t|
            item = {}
            
            item[:title] = t.css('a._15_ydu6b')&.text&.squish&.gsub('[^0-9].', '')
            item[:type] = t.css('span._1p0FLy4t')&.text&.squish
            item[:reviews] = t.css('span.w726Ki5B').text&.squish
            item[:top_reviews] = t.css('a._2uEVo25r _3mPt7dFq').text&.squish

            Restaurant.where(item).first_or_create
        end
    end

end

这是我得到的错误的图片错误

这是控制台中的错误

Processing by RestaurantsController#scrape as HTML
  Parameters: {"authenticity_token"=>"3qXvtTOsU6VVtxaPvNXyCjpdnHLOgCvFgQYzB1JnhoHDz8ySF6gK/n5x+/XW5HC0HwfzQ1bFCu/KCfF3nA1SIQ=="}
I, [2021-01-26 02:35:35 -0600#218] [C: 14760]  INFO -- restaurants_scraper: Spider: started: restaurants_scraper
F, [2021-01-26 02:35:35 -0600#218] [C: 14760] FATAL -- restaurants_scraper: Spider: stopped: {:spider_name=>"restaurants_scraper", :status=>:failed, :error=>"#<ArgumentError: wrong number of arguments (given 0, expected 2)>", :environment=>"development", :start_time=>2021-01-26 02:35:35.6330106 -0600, :stop_time=>2021-01-26 02:35:35.6336933 -0600, :running_time=>"0s", :visits=>{:requests=>0, :responses=>0}, :items=>{:sent=>0, :processed=>0}, :events=>{:requests_errors=>{}, :drop_items_errors=>{}, :custom=>{}}}
  Rendering restaurants/scrape.html.erb within layouts/application
  Rendered restaurants/scrape.html.erb within layouts/application (Duration: 0.1ms | Allocations: 41)
[Webpacker] Everything's up-to-date. Nothing to do
Completed 200 OK in 45ms (Views: 41.9ms | ActiveRecord: 0.0ms | Allocations: 4104)

你有一个错字。 它应该是@start_urls = [url] - 复数。 该错误是由crawl 方法中的第 131 行引起的。 见片段:

  spider = self.new

  if start_urls
    ...
  else
    spider.parse
  end

由于start_urls未定义,它会转到else分支并调用您定义的parse方法,这需要两个 arguments 但正如错误所说,它用 0 调用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM