Ruby-ScrapingHTML:如果url不存在,则跳到下一步
我目前正在开发一个html刮板,它从一个文本文件中获取一个动漫星球url列表,然后循环遍历它们,解析数据并将其存储在数据库中 刮板工作得很好,但是如果我放入一个大的列表,那么url没有正确链接到一个系列并抛出错误的可能性是相当高的。我想尝试这样做,如果url不起作用,那么它会在一个名为“error url”的数组中记下url并跳过记录 最终的结果是脚本完成了所有工作url,并返回了我以后可以使用的非工作url列表(可能在文本文件中,或者只是在控制台中显示) 我目前正在使用一个rake任务来完成这个任务,它工作得非常好。如果有人能帮我实现错误处理功能,我将不胜感激。干杯 刮除。耙除:Ruby-ScrapingHTML:如果url不存在,则跳到下一步,html,ruby-on-rails,ruby,web-scraping,Html,Ruby On Rails,Ruby,Web Scraping,我目前正在开发一个html刮板,它从一个文本文件中获取一个动漫星球url列表,然后循环遍历它们,解析数据并将其存储在数据库中 刮板工作得很好,但是如果我放入一个大的列表,那么url没有正确链接到一个系列并抛出错误的可能性是相当高的。我想尝试这样做,如果url不起作用,那么它会在一个名为“error url”的数组中记下url并跳过记录 最终的结果是脚本完成了所有工作url,并返回了我以后可以使用的非工作url列表(可能在文本文件中,或者只是在控制台中显示) 我目前正在使用一个rake任务来完成这
task :scrape => :environment do
require 'nokogiri'
require 'open-uri'
text = []
File.read("text.txt").each_line do |line|
text << line.chop
end
text.each do |series|
url = "http://www.anime-planet.com/anime/" + series
data = Nokogiri::HTML(open(url))
title = data.at_css('.theme').text
synopsis = data.at_css('.synopsis').text.strip
synopsis.slice! "Synopsis:\r\n\t\t\t\t\t"
eps = data.at_css('.type').text
year = data.at_css('.year').text
rating = data.at_css('.avgRating').text
categories = data.at_css('.categories')
genre = categories.css('li').text.to_s
image = data.at_css('#screenshots img')
imagePath = "http://www.anime-planet.com" + image['src']
anime = Series.create({:title => title, :image => imagePath, :description => synopsis, :eps => eps, :year => year, :rating => rating})
anime.tag_list = genre
anime.save()
end
end
您可以使用
openuri
的错误处理。有关更多详细信息,请参阅
url = "http://www.anime-planet.com/anime/" + series
begin
doc = open(url)
rescue OpenURI::HTTPError => http_error
# bad status code returned
// do something here
status = http_error.io.status[0].to_i # => 3xx, 4xx, or 5xx
puts "Got a bad status code #{status}"
# http_error.message is the numeric code and text in a string
end
data = Nokogiri::HTML(doc)
url = "http://www.anime-planet.com/anime/" + series
begin
doc = open(url)
rescue OpenURI::HTTPError => http_error
# bad status code returned
// do something here
status = http_error.io.status[0].to_i # => 3xx, 4xx, or 5xx
puts "Got a bad status code #{status}"
# http_error.message is the numeric code and text in a string
end
data = Nokogiri::HTML(doc)