我正在尝试使用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字节)
有什么办法可以解决这个错误?
答案 0 :(得分:1)
http.client
的文档在顶部告诉您,这是一个非常底层的库,主要用于支持urllib
,并且:
对于更高级别的HTTP客户端界面,也建议参见The Requests package。
如果您可以conda install requests
或pip install requests
,那么您的问题就变得微不足道了:
import requests
req = requests.get('https://www.worldcubeassociation.org/results/events.php?eventId=222®ionId=&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
或对其进行猴子修补)来解决此问题。可能不会像使用高级库那样简单或有趣。