ruby - 我如何处理rest-client 500错误响应并继续抓取我的循环?

标签 ruby rest-client

我需要从该网站抓取 10k 个 URL,其中一些已停止服务(我认为...这是一个错误,不会返回我正在查找的 JSON,因此 rest-client 在我的程序中返回 500 内部服务器错误)

Error syntax: `exception_with_response': 500 Internal Server Error (RestClient::InternalServerError)

为了循环访问 URL,我使用范围 (1..30).each do |id|。我将 URL 与该范围的当前迭代连接起来。

response = RestClient.get(url+id)

问题是有时我存储在响应变量中的 URL 不存在和/或网页返回一些错误。 我怎样才能保护我的代码,这样我就可以通过这个有问题的 URL 并保持抓取

这是我当前的代码(我将循环的每个代码都放在开始/救援 block 中,但我不知道如何编写代码来执行此类操作):

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

您可以看到我将循环中的所有内容都放在 begin block 内,最后有 rescue block ,但我很不知道如何做到这一点东西。

最佳答案

您应该只拯救 exmaple 的异常:

[*1..3].each{|i| RestClient.get('https://fooboton.free.beeceptor.com') rescue RestClient::InternalServerError; next}

因此,对于您的情况,请执行以下操作:

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) 
      rescue RestClient::InternalServerError
        next # skip this iteration in your loop
      end
    ... # rest of your code

关于ruby - 我如何处理rest-client 500错误响应并继续抓取我的循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60232059/

相关文章:

ruby-on-rails - Ruby/Rails 神秘的 "undefined constant"问题

JAVA - 两个带有 SSL 连接的客户端 java,第一个需要证书,第二个不需要证书

internet-explorer - 在 Internet Explorer 中工作但在 Firefox 中不起作用

ruby-on-rails - Rails 从 ActiveRecord 对象生成不正确的 SQL

jquery - 使用 Ruby/Sinatra 以 HTML 形式呈现 ajax 调用结果

ruby-on-rails - 后台rb定时任务结束

ruby-on-rails - Rails 包含验证

ruby-on-rails - 我可以在 Rails 中设置级联删除吗?

ruby - 如何让 Ruby 的 RestClient 使用多值查询参数?

java - 使用 restclient 或 postman 发送 gzip 数据