【发布时间】:2020-12-31 18:39:14
【问题描述】:
我需要刮。具体来说,我使用 Pycurl 和 BytesIO。
以下代码:
c = pycurl.Curl()
page = BytesIO()
c.setopt(c.INTERFACE, "tun0")
c.setopt(c.USERAGENT, userAgent)
c.setopt(pycurl.CAINFO, certifi.where())
c.setopt(c.URL, URL)
c.setopt(c.WRITEDATA, page)
c.perform()
直到昨天,page.getvalue() 会返回页面的 html,然后我会将其传递给 bs4。然而,今天,我注意到它返回了一个字节字符串,我什至无法将其解码为 utf-8,因为它返回了一个错误:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8b in position 1: invalid start byte
如何在字符串中输入 url 的内容,以便将其传递给 bs4 并抓取?
【问题讨论】:
-
发布前 200 个字节左右,也许我们可以猜出正确的编码。 pycurl 是否以任何方式公开响应标头?也许响应中包含“内容编码”。
-
在不解码的情况下显示它——看看你在这个字符串中得到了什么。也许它使用不同的编码然后
utf-8。或者它可能发送字节文件而不是文本/HTML 文件。 -
顺便说一句:
bs4可以获取字节 - 你不必解码它。