#ruby #web-scraping #export-to-csv #nokogiri
#рубиновый #соскабливание полотна #экспорт в csv #nokogiri
Вопрос:
Я очищаю веб-сайт, и некоторые URL-адреса отсутствуют. В результате мой код не может получить все данные, которые я пытаюсь сохранить.
Вот мой код :
informations = []
0.upto(94) do |n|
begin
html_file = open(departement[n]).read
html_doc = Nokogiri::HTML(html_file)
unless n == 19
html_doc.search('a').each do |element|
if n < 9
x = "http://www.annuaire-des-mairies.com/0#{n 1}/" element.text.strip
informations << x
elsif n > 9 amp;amp; n < 19
y = "http://www.annuaire-des-mairies.com/#{n 1}/" element.text.strip
informations << y
elsif n > 19
z= "http://www.annuaire-des-mairies.com/#{n 2}/" element.text.strip
informations << z
csv_options = { col_sep: ',', force_quotes: true, quote_char: '"' }
filepath = 'mairiesscrapées.csv'
informations.each do |information|
next unless information.include? ".html"
html_file = open(URI.parse(URI.escape(information))).read
html_doc = Nokogiri::HTML(html_file)
g = html_doc.search("td")
CSV.open(filepath, 'ab', csv_options) do |csv|
csv << [g[0].to_s, g[3].to_s, g[7].to_s, g[13].to_s]
puts csv
rescue OpenURI::HTTPError => ex
puts "Handle missing link here"
end
end
end
end
end
end
end
Я пытался вставить begin
rescue
метод, но моя консоль продолжает отвечать мне :
1: from /Users/pierrelaburthe/.rbenv/versions/2.6.3/lib/ruby/2.6.0/open-uri.rb:756:in `buffer_open'
/Users/pierrelaburthe/.rbenv/versions/2.6.3/lib/ruby/2.6.0/open-uri.rb:378:in `open_http': 404 Not Found (OpenURI::HTTPError)
Комментарии:
1. Что, по-вашему, должна делать ваша программа после спасения исключения?
2. Ошибка 404 возникает из-за того, что извлеченный URL-адрес недействителен или потому, что страница фактически не существует?
3. Помимо других проблем, все, что делает rescue, — это дает программе возможность обработать исключение. Это зависит от программиста, скорее всего, с помощью повторной попытки или продолжения, в зависимости от того, что делает цикл.
4. URL-адрес не существует, и я ожидаю, что программа продолжит удаление других URL-адресов, даже если один URL-адрес поврежден.
Ответ №1:
Проблема может быть в том, что средство спасения находится не в нужном месте. Его нужно переместить на несколько уровней, чтобы перехватить исключение.
informations = []
0.upto(94) do |n|
begin
html_file = open(departement[n]).read
html_doc = Nokogiri::HTML(html_file)
unless n == 19
html_doc.search('a').each do |element|
if n < 9
x = "http://www.annuaire-des-mairies.com/0#{n 1}/" element.text.strip
informations << x
elsif n > 9 amp;amp; n < 19
y = "http://www.annuaire-des-mairies.com/#{n 1}/" element.text.strip
informations << y
elsif n > 19
z= "http://www.annuaire-des-mairies.com/#{n 2}/" element.text.strip
informations << z
csv_options = { col_sep: ',', force_quotes: true, quote_char: '"' }
filepath = 'mairiesscrapées.csv'
informations.each do |information|
next unless information.include? ".html"
html_file = open(URI.parse(URI.escape(information))).read
html_doc = Nokogiri::HTML(html_file)
g = html_doc.search("td")
CSV.open(filepath, 'ab', csv_options) do |csv|
csv << [g[0].to_s, g[3].to_s, g[7].to_s, g[13].to_s]
puts csv
end
end
end
end
end
rescue OpenURI::HTTPError => ex
puts "Handle missing link here"
end
end