Python3中的http.client.IncompleteRead错误

时间:2018-07-07 20:11:03

标签: python python-3.x beautifulsoup http.client

我正在尝试使用beautifulsoup4和python3抓取really long web page。由于网站的大小,当我尝试在网站中搜索内容时,http.client会给我一个错误:

  

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

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

1 个答案:

答案 0 :(得分:1)

http.client的文档在顶部告诉您,这是一个非常底层的库,主要用于支持urllib,并且:

  

对于更高级别的HTTP客户端界面,也建议参见The Requests package

如果您可以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')

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