我正在使用Python 3函数检查各种网站以确保它们正常(200个响应,正确的元数据,页面大小等)。这些网站使用不同的编码。我使用pycurl来解码页面主体。根据{{3}},在解码之前需要传递页面编码(即utf-8)。
如何在传递网站进行解码之前获取网站的当前编码? pycurl是我在Python 3中用于比较页面内容的最佳选择吗?
答案 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)
即可获得正确解码的内容。