python:[Errno 10054]远程主机强行关闭现有连接

Nam*_*eru 31 python twitter web-crawler

我正在使用Twitter-py编写python来抓取Twitter空间.我已经将爬虫设置为在每次请求api.twitter.com之间休眠一会儿(2秒).但是,经过一段时间的运行(大约1),当Twitter的速率限制尚未超过时,我得到了这个错误.

[Errno 10054] An existing connection was forcibly closed by the remote host.
Run Code Online (Sandbox Code Playgroud)

这个问题的可能原因是什么以及如何解决这个问题?

我搜索过并发现由于许多请求,Twitter服务器本身可能会强制关闭连接.

非常感谢你提前.

Dav*_*rtz 11

这可能是由于连接的两端不同意在保持连接期间连接是否超时.(您的代码尝试重新使用连接,就像服务器关闭它一样,因为它已经空闲了太长时间.)您基本上应该只是通过新连接重试该操作.(我很惊讶您的图书馆不会自动执行此操作.)

  • 我也有同样的问题。使用bottle 库,并使用httplib 发送。我无法真正发送重试,因为原始调用已在服务器上执行。当我尝试读取响应数据时连接已关闭。这种情况并非总是发生,通常是当我只是向垃圾服务器发送请求时。您知道我可以调整哪些参数以使通信稳定吗? (2认同)
  • 谢谢你的提示。我还找出了为什么我经常遇到错误的原因。这是因为 Bottle 默认开发服务器的实现。它是单线程的,不适合一次处理太多请求。 (2认同)

Pyt*_*Bae 7

我知道这是一个非常古老的问题,但您可能需要设置请求标头。这为我解决了它。

例如'user-agent', 'accept' 等,这里是一个用户代理的例子:

url = 'your-url-here'
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36'}
r = requests.get(url, headers=headers)
Run Code Online (Sandbox Code Playgroud)

  • **额外细节:** 想象一下编写一个爬虫来轮询 Twitter,由于爬虫不是浏览器,因此默认情况下不会有用户代理。因此该网站表示,请欺骗我们,让我们认为您正在使用具有已建立的用户代理设置的真实浏览器,例如 Mozilla、AppleWebKit、Chrome 等浏览器。 (4认同)
  • 您可以添加一些细节吗? (2认同)

小智 6

有很多原因,例如

  • 服务器和客户端之间的网络链接可能暂时断开。
  • 用完系统资源。
  • 发送格式错误的数据。

要详细检查问题,可以使用Wireshark。

或者您可以重新请求或重新连接。