我正在从Web上抓取一些数据,由于我应该获取的数据量很大,所以我同时收到了500多个请求(通过urllib.request.urlopen(url)通过合并通过multiprocessing发出)。

这里的问题是引发以下错误:


  urllib.error.URLError:urlopen错误名称中的临时失败
  解析度


经过研究后,我发现此问题是由于存在太多请求而无法关闭连接这一事实引起的。但是尚未找到任何解决方法。

我应该将同时连接限制在某个安全范围内,还是更改urllib请求配置?

开发环境:


Ubuntu 16.04
Python 3.6

最佳答案

尝试从请求库中使用Session Objects。如文档中所述,


  通过Session对象,您可以在请求中保留某些参数。它还会在所有通过Session实例发出的请求中保留cookie,并将使用urllib3的连接池。因此,如果您要向同一主机发出多个请求,则基础TCP连接将被重用,这可能会导致性能显着提高(请参阅HTTP持久连接)。


也许有关高效Web抓取的其他thread可以帮助您。

关于python - Python WebCrawling urllib.error.URLError:<urlopen错误名称解析中的临时失败>,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49718857/

10-12 23:13