我目前正在开发一个 html 抓取器,它从文本文件中获取动漫星球 url 的列表,然后遍历它们,解析数据并将其存储在数据库中。
刮刀运行良好,但是如果我放入一个大列表,那么 url 没有正确链接到系列并引发错误的可能性非常高。我想尝试这样做,如果 url 不起作用,那么它会在名为 'error-urls' 的数组中记下 url 并跳过记录。
最终结果是脚本完成了所有工作 url 并返回我以后可以使用的非工作 url 列表(可能在文本文件中,或者只显示在控制台中)。
我目前正在为此使用 rake 任务,效果很好。如果有人可以帮助我实现错误处理功能,将不胜感激。干杯!
scrape.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
list.txt 的小例子
5-Centimeters-Per-Second
11Eyes
A-Channel
Air
Air-Gear
Aishiteru-Ze-Baby