Мне нужно почистить 10 тыс. URL-адресов с этого сайта, и некоторые из них не работают (я думаю ... это ошибка, которая не возвращает JSON, который я ищу, поэтому rest-client
возвращает 500 Internal Server error
в моей программе)
Синтаксис ошибки: `exception_with_response ': 500 Внутренняя ошибка сервера (RestClient :: InternalServerError)
До l oop через URL-адреса, я Использую range (1..30).each do |id|
. Я объединяю URL с текущей итерацией этого диапазона.
response = RestClient.get(url+id)
Проблема в том, что иногда URL, который я храню в переменной ответа, не существует, и / или веб-страница возвращает какую-то ошибку. Как я могу защитить свой код, чтобы я мог просто пропустить этот проблемный URL c и сохранить его?
Вот мой текущий код (я помещаю каждый код l oop в блок begin / rescue , но я не знаю, как написать код, чтобы сделать такую вещь):
require 'nokogiri'
require 'csv'
require 'rest-client'
require 'json'
link = "https://webfec.org.br/Utils/GetCentrobyId?cod="
CSV.open('data2.csv', 'ab') do |csv|
csv << ['Name', 'Street', 'Info', 'E-mail', 'Site']
(1..30).each do |id|
begin
response = RestClient.get(link+id.to_s)
json = JSON.parse(response)
html = json["Data"]
doc = Nokogiri::HTML.parse(html)
name = doc.xpath("/html/body/table/tbody/tr[1]").text
street = doc.xpath("/html/body/table/tbody/tr[2]").text.gsub(Regexp.union(REMOVER), " ")
info = doc.xpath("/html/body/table/tbody/tr[3]").text.gsub(Regexp.union(REMOVER), " ")
email = doc.xpath("/html/body/table/tbody/tr[4]").text.gsub(Regexp.union(REMOVER), " ")
site = doc.xpath("/html/body/table/tbody/tr[5]").text.gsub(Regexp.union(REMOVER), " ")
csv << [name, street, info, email, site]
rescue
end
end
end
Вы можете видеть, что я поместил все в l oop внутри блока begin
и есть rescue
Блок в конце, но я немного растерялся, как поступить с такой вещью.