带有变量编码的Python卷曲

时间:2018-05-09 13:10:03

标签: python pycurl

我正在使用Python 3函数检查各种网站以确保它们正常(200个响应,正确的元数据,页面大小等)。这些网站使用不同的编码。我使用pycurl来解码页面主体。根据{{​​3}},在解码之前需要传递页面编码(即utf-8)。

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

1 个答案:

答案 0 :(得分:1)

您通常根据服务器返回的HTTP标头确定编码。不要自己确定,而是使用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

如果标头中没有编码,那么它会变得有点复杂 - 您必须将响应视为ascii编码的HTML,尝试查找<meta http-equiv="Content-Type" ... />标记并从其content编码中提取。完成后,您将不得不使用相关编码再次解码内容。

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