Python3 中的 http.client.IncompleteRead 错误

Eva*_*ueh 5 python beautifulsoup python-3.x http.client

我正在尝试使用 beautifulsoup4 和 python3 抓取一个非常长的网页。由于网站的大小,http.client当我尝试在网站中搜索某些内容时,会出现错误:

文件“/anaconda3/lib/python3.6/http/client.py”,第 456 行,在读取返回 self._readall_chunked() 文件“/anaconda3/lib/python3.6/http/client.py”,第 570 行,在 _readall_chunked 中引发 IncompleteRead(b''.join(value)) http.client.IncompleteRead: IncompleteRead(16109 字节读取)

有什么办法可以解决这个错误吗?

aba*_*ert 2

正如文档http.client在顶部告诉您的那样,这是一个非常低级的库,主要用于支持urllib, 和:

另请参见Requests 包建议用于更高级别的 HTTP 客户端接口。

如果你可以conda install requestspip install requests,你的问题就变得微不足道了:

import requests
req = requests.get('https://www.worldcubeassociation.org/results/events.php?eventId=222&regionId=&years=&show=All%2BPersons&average=Average')
soup = BeautifulSoup(req.text, 'lxml')
Run Code Online (Sandbox Code Playgroud)

如果您无法安装第三方库,可以解决这个问题但实际上并不支持,而且并不容易。中的块处理代码都不http.client是公开的或记录的,但文档确实将您链接到,您可以在其中查看私有方法。特别是,请注意read调用一个名为 的方法_readall_chunked,该方法循环调用_safe_read上的方法_get_chunk_left。该_safe_read方法是您需要替换的代码(例如,通过子类化HTTPResponse或对其进行猴子修补)来解决此问题。这可能不会像使用更高级别的库那么简单或有趣。