使用Kimurai在Ruby on Rails中爬取数据时遭遇URI::HTTP未初始化错误
解决Kimurai爬虫中
uninitialized constant URI::HTTP错误 问题原因
Ruby 3.0及以上版本中,URI库的子模块(如URI::HTTP、URI::HTTPS)不再自动加载,而Kimurai 1.4.0的代码中直接使用URI::HTTP进行URL有效性校验,导致未初始化常量的错误。
解决方案
方案1:显式引入URI::HTTP模块
在爬虫代码开头添加require 'uri/http',确保URI::HTTP常量被加载:
require 'open-uri' require 'nokogiri' require 'kimurai' require 'uri/http' # 添加该行 class WebScrapper < Kimurai::Base @name = "web_scrapper_spider" @engine = :mechanize @start_urls = ["https://metaruby.com/"] @config = { user_agent: "Chrome/68.0.3440.84" } def parse(response, url:, data: {}) blogs = [] response.xpath("//table[@class='topic-list']//tbody//tr").each do |tr| scrapped_data = { title: tr.at('td[1]//span').text, category: tr.at('td[1]//div//span').text, date: tr.at('td[3]').text.strip } blogs << scrapped_data save_to "results.json", scrapped_data.as_json, format: :json end end end
方案2:升级Kimurai到兼容Ruby 3.x的版本
Kimurai 1.4.0对Ruby 3.1的支持不足,升级到最新版本(如2.x系列)可解决兼容性问题:
- 修改Gemfile中的依赖:
gem 'kimurai', '~> 2.0'
- 执行bundle更新:
bundle update kimurai
验证
修改后重新运行爬虫,URI::HTTP未初始化的错误会消失,爬虫可正常发起请求并解析页面。
内容的提问来源于stack exchange,提问作者Nikita Sharma
相关产品推荐
相关产品推荐

