Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 错误:参数数目错误(给定0,应为2)_Ruby On Rails_Ruby_Web Scraping_Routes - Fatal编程技术网

Ruby on rails 错误:参数数目错误(给定0,应为2)

Ruby on rails 错误:参数数目错误(给定0,应为2),ruby-on-rails,ruby,web-scraping,routes,Ruby On Rails,Ruby,Web Scraping,Routes,我正在尝试用Rails制作一个基本的web刮板。每次我按下“刮”按钮,它都会将我发送到正确的位置,但每次都会出现此错误 这是我的restaurants\u controller.rb文件 def scrape url = 'https://www.tripadvisor.com/Restaurants-g31892-Rogers_Arkansas.html' response = RestaurantsScraper.process(url) if response[

我正在尝试用Rails制作一个基本的web刮板。每次我按下“刮”按钮,它都会将我发送到正确的位置,但每次都会出现此错误

这是我的
restaurants\u 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
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
这是我的
restaurantscapper.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
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
class RestaurantsScraper
这是我得到的错误图片

这是控制台中的错误

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)

RestaurantController处理为HTML 参数:{“真实性令牌”=>“3qXvtTOsU6VVtxaPvNXyCjpdnHLOgCvFgQYzB1JnhoHDz8ySF6gK/n5x+/XW5HC0HwfzQ1bFCu/KCfF3nA1SIQ==”} 一、 [2021-01-2602:35:35-0600#218][C:14760]信息——餐馆刮板:蜘蛛:开始:餐馆刮板 F、 [2021-01-26 02:35:35-0600#218][C:14760]致命——餐馆刮板:蜘蛛:停止:{:蜘蛛名称=>“餐馆刮板”,:状态=>:失败,:错误=>“#”,:环境=>“开发”,:开始时间=>2021-01-26 02:35:35.6330106-0600,:停止时间=>2021-01-26 02:35:35.6336933-0600,:运行时间=>“0s”,:访问次数=>0,{,:items=>{:sent=>0,:processed=>0},:events=>{:requests\u errors=>{},:drop\u items\u errors=>{},:custom=>{} 在布局/应用程序中呈现餐厅/scrap.html.erb 布局/应用程序中的呈现餐厅/scrape.html.erb(持续时间:0.1ms |分配:41) [Webpacker]一切都是最新的。无事可做 45毫秒内完成200次正常(视图:41.9毫秒;活动记录:0.0毫秒;分配:4104)
您有一个输入错误。它应该是
@start\u url=[url]
-复数。 错误是由中的第131行引起的。请参见代码片段:

  spider = self.new

  if start_urls
    ...
  else
    spider.parse
  end

由于未定义
start\u URL
,因此它将转到
else
分支并调用您定义的
parse
方法,该方法需要两个参数,但如错误所示,它是用0调用的。

您有一个输入错误。它应该是
@start\u url=[url]
-复数。 错误是由中的第131行引起的。请参见代码片段:

  spider = self.new

  if start_urls
    ...
  else
    spider.parse
  end

由于未定义
start\u URL
,因此它将转到
else
分支并调用您定义的
parse
方法,该方法需要两个参数,但正如错误所示,它是用0调用的。

错误来自哪一行和文件?检查你的控制台输出,它会在错误下面的一行告诉你。我编辑了这篇文章来添加错误。仍然很困惑。您能在
RestaurantsScraper
中发布
爬网
方法的签名吗。它可能需要两个参数。@PenoG我认为
parse
方法需要参数中的
url:
:而且应该是
@start\u url
(复数)。不太确定这是否是问题所在。但是尝试放置日志或使用debuggerIm使用Kimurai gem进行爬网!方法错误来自哪一行和文件?检查你的控制台输出,它会在错误下面的一行告诉你。我编辑了这篇文章来添加错误。仍然很困惑。您能在
RestaurantsScraper
中发布
爬网
方法的签名吗。它可能需要两个参数。@PenoG我认为
parse
方法需要参数中的
url:
:而且应该是
@start\u url
(复数)。不太确定这是否是问题所在。但是尝试放置日志或使用debuggerIm使用Kimurai gem进行爬网!我想你是对的,谢谢。我编辑了我的答案以反映这一点。我认为你是对的,谢谢。我编辑了我的答案以反映这一点。