Python 使用可变编码的卷曲

Python Curl with Variable Encoding

我正在研究 Python 3 功能来检查各种网站以确保它们正常(200 个响应、正确的元数据、页面大小等)。这些站点使用不同的编码。我正在使用 pycurl 来解码页面主体。根据pycurl quickstart页面编码(即utf-8)需要在解码前通过。

如何在将网站传递给解码之前获取网站的当前编码? pycurl 是我在 Python 3 中比较页面内容的最佳选择吗?

您通常根据服务器返回的 HTTP headers 来确定编码。不要自己确定,而是使用 requests 模块为您执行所有这些,因此获取内容非常简单:

import requests

req = requests.get("your_url")
if req.status_code == 200:
    print(req.text)  # print out the decoded content or do whatever you want with it

如果 header 本身不存在编码,那么它会变得有点复杂 - 您必须将响应视为 ascii 编码 HTML,尝试找到一个 <meta http-equiv="Content-Type" ... /> 标签并从其 content 中提取编码。一旦你拥有它,你将不得不用有问题的编码再次解码内容。

requests 响应中,non-decoded 内容在 req.content 中可用,因此要获得 ascii 编码 HTML 使用 req.content.decode("ascii") 然后解析其 HTML 并寻找编解码器(在 Python 中搜索如何解析 HTML),最后,当您拥有编解码器时,只需 re-decode 内容该编解码器:req.content.decode(your_discovered_codec) 以获得正确解码的内容。