Ruby에서 내 블로그를 크롤링하고 아네모네 보석과 갈퀴를 사용하여 부러진 외부 링크를 찾도록 설계된 웹 크롤러를 작성하는 방법에 대해 자세히 배우기 시작했습니다.Anemone - NoMethodError : 정의되지 않은 메소드`xpath 'for nil : NilClass
NoMethodError: undefined method `xpath' for nil:NilClass
나는 시도했다 : 이
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
이
그것은 그러나, 나는 그것을 테스트 https://arthurdejong.org/webcheck/demo/을 사용하고, 내 데모 폴더에 일하고 난 다음 오류 받고 있어요는
아래 작업 ... 문제의 원인이 무엇인지 궁금해했지만 지금까지는 확장 배열을 작성했습니다. 불운.누구든지이 문제를 디버깅하거나 문제를 해결하는 방법에 대한 조언을 갖고 있습니까?
나는 먼저이 코드를 리팩토링 건의 할 것입니다. 일단 완료되면 버그 자체가 발견 될 가능성이 있습니다. –
제안에 감사드립니다. Artur - 제가 말했듯이 저는 루비와 웹 크롤러를 처음 접했으니 이제 코드를 리팩터링 할 시간이되었습니다 :-) –