Python RoboBrowser SSL错误:握手错误:SysCallError(104,';ECONNRESET';)

Python RoboBrowser SSL错误:握手错误:SysCallError(104,';ECONNRESET';),python,ssl,robobrowser,econnreset,Python,Ssl,Robobrowser,Econnreset,我正在尝试在网页上填写表格,并使用RoboBrowser库返回一些结果 我有一个大约有200k个引用的文件,可能没有给出adaquate anwser(数据[1]中存储的街道名称可能与表单中要求的名称不同,并导致打开另一个页面)。 我的代码运行并打印我想要的信息,或者如果响应不是预期的(主要是因为街道名称错误),则打印“NS” 然而,经过一段随机时间后(最初约1300次循环,然后约100-300次或更少),我得到: Traceback (most recent call last):

我正在尝试在网页上填写表格,并使用RoboBrowser库返回一些结果

我有一个大约有200k个引用的文件,可能没有给出adaquate anwser(数据[1]中存储的街道名称可能与表单中要求的名称不同,并导致打开另一个页面)。 我的代码运行并打印我想要的信息,或者如果响应不是预期的(主要是因为街道名称错误),则打印“NS”

然而,经过一段随机时间后(最初约1300次循环,然后约100-300次或更少),我得到:

    Traceback (most recent call last):
  File "web_scraper.py", line 49, in <module>
    result = rechCadastre(data_point,result)
  File "web_scraper.py", line 16, in rechCadastre
    browser.submit_form(form)
  File "/usr/local/lib/python2.7/dist-packages/robobrowser/browser.py", line 343, in submit_form
    response = self.session.request(method, url, **send_args)
  File "/usr/local/lib/python2.7/dist-packages/requests/sessions.py", line 488, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/local/lib/python2.7/dist-packages/requests/sessions.py", line 609, in send
    r = adapter.send(request, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/requests/adapters.py", line 497, in send
    raise SSLError(e, request=request)
requests.exceptions.SSLError: ("bad handshake: SysCallError(104, 'ECONNRESET')",)
我正在使用Ubuntu16.04.2LTS和Python2.7


谢谢大家!

我成功地避免了这个错误,每次呼叫都将等待时间。sleep改为1。 程序有时会再次出错,但很少(大约20000-30000次请求中有一次)


谢谢你的支持

EconReset意味着服务器已经硬关闭了连接。可能是因为滥用,他们在一段时间后阻止了您的IP地址,或者只是在特定时间范围内从同一IP地址只允许最大数量的连接。谢谢@SteffenUllrich!有什么方法可以绕过它吗?如果过滤器确实基于在特定时间内限制来自同一IP地址的请求数量,那么如果您限制每次请求的数量,或者您从不同的IP地址访问站点,可能会有所帮助。
import csv
import re
from robobrowser import RoboBrowser
import time

def rechCadastre(data,result):
    time.sleep(0.01)
    form=browser.get_form(id="rech")
    repetition = ''
    if data[2]!='':
        repetition = data[2][0]
    param={'numeroVoie':data[1],'nomVoie':data[0],'ville':data[3], 'indiceRepetition':repetition}
    for x in iter(param):
        form[x]=param[x]
    time.sleep(0.01)
    browser.submit_form(form)
    success = browser.select('#onglet')
    if not success:
        result += "NS,NS"
    else:   
        answer = browser.select('.nomcol')[0]
        parcelle= re.split('(\W+)',re.search("Parcelle n\W [0-9]{1,4}",answer.text).group(0))[4]
        feuille = re.split('(\W+)',re.search("Feuille [0-9]{1,4} [A-Z]{1,4}",answer.text).group(0))[4]
        result += feuille+","+parcelle
    browser.back()
    return result


data = []
url = "https://www.cadastre.gouv.fr/scpc/accueil.do"
browser = RoboBrowser()
browser.open(url)

infile = open("treated.csv",'rb')
reader=csv.reader(infile)
for row in reader:
    data.append(row)

#compt=0
for data_point in data: 
#   if compt == 20:
#       break   
#   data_point = data[i]
    result = data_point[0] + "," + data_point[1] + "," + data_point[2] + "," + data_point[3] + ",,"
    nd = data_point[0] == "#N/D"
    rep = (data_point[2] == '') or (data_point[2] == 'BIS') or (data_point[2] == 'TER') or (data_point[2] == 'QUATER') and (data_point[2] == 'B')
    acceptable = rep and (not nd)
    if acceptable:
        result = rechCadastre(data_point,result)
    print result 
#   compt += 1