Ruby on rails 银莲花-命名错误:未定义的方法`xpath';零级:零级

Ruby on rails 银莲花-命名错误:未定义的方法`xpath';零级:零级,ruby-on-rails,ruby,xpath,anemone,Ruby On Rails,Ruby,Xpath,Anemone,我刚刚开始学习更多关于用Ruby编写一个网络爬虫的知识,该爬虫旨在使用海葵宝石和下面的rake任务对我的博客进行爬网并查找断开的外部链接 task :testing_this => :environment do require 'anemone' rooter = 'myblog.com' banned = ['tel:','@', '#', 'facebook.com', 'twitter.com', 'pinterest.com', 'linkedin.com

我刚刚开始学习更多关于用Ruby编写一个网络爬虫的知识,该爬虫旨在使用海葵宝石和下面的rake任务对我的博客进行爬网并查找断开的外部链接

task :testing_this => :environment do
    require 'anemone'
    rooter = 'myblog.com'
    banned = ['tel:','@', '#', 'facebook.com', 'twitter.com', 'pinterest.com', 'linkedin.com', 'youtube.com','reddit.com', 'wikipedia.org']
    extensions = %w( .jpg .jpeg .png .doc .pdf .js .css .xml .csv. .exe .zip .gzip )
    start = Time.now
    Anemone.crawl("http://#{rooter}/", {:threads => 4, :discard_page_bodies => false, :obey_robots_txt => false, :user_agent => 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36'}) do |anemone|
        begin
            anemone.on_every_page do |page|
                puts page.url.path
        links = page.doc.xpath("//a/@href")
        if (links != nil)
          links.each do |link|
            this_link = link.to_s
            unless extensions.any? { |exten| this_link && this_link.include?(exten) }
                unless banned.any? { |word| this_link && this_link.include?(word) }
                    unless this_link.include? rooter
                        # puts this_link
                        obl = URI.parse(URI.encode(this_link.strip)).host
                        unless obl.blank?
                            if obl.include? 'www.'
                                obl = obl.gsub("www.", "")
                            end
                            Obl.find_or_create_by(url: obl)
                        end
                    end
                  end
                end
          end
        end
        end
    rescue OpenURI::HTTPError => ex
    puts ex
    end 
    end
    time_t = Time.now - start
    puts "-------------"
    puts "#{time_t} seconds"
    puts "-------------"
end
它正在我的演示文件夹中工作,但是,我一直在使用它进行测试,我发现以下错误:

NoMethodError: undefined method `xpath' for nil:NilClass
我曾尝试构建一系列扩展,因为我确实想知道这是否是导致问题的原因,但到目前为止运气不佳


有人对如何调试或解决问题有什么建议吗?

似乎错误来自
page.doc.xpath
page.doc
为零

尝试在
on_every_page
方法中
检查
您的
页面

您还可以在
.xpath
之前添加
if
,以避免错误:

anemone.on_every_page do |page|
  puts page.url.path
  if page.doc.present?
    links = page.doc.xpath("//a/@href")

我建议首先重构这段代码,因为它很难阅读和调试。一旦完成,错误很可能会被自己发现。感谢Artur的建议-正如我所说,我对Ruby和web爬虫非常陌生,所以现在我已经开始运行它,是时候重构代码了:-)添加到.present中?修复了问题并避免了错误。