前言:
当涉及到网页编码问题时,经常会遇到不同页面使用不同编码方式的情况。这可能导致在解析页面时出现乱码,使我们无法正确获取页面内容
正文:
网页的编码问题:
在处理网页编码问题之前,我们需要了解一些基础知识。网页中的编码方式通常在页面的头部信息中声明,例如Content-Type响应头。然而,有些页面的实际编码与声明的编码不匹配,这可能导致解析器无法正确解码页面内容。而解析工具(如XPath解析器)可能无法正确处理特殊的HTML实体(如 ),从而导致解析乱码。
如图:
问题分析:
现在挺多的网页在写页面的时候,不同页面用了不同的编码; 导致如果把encoding=静态 的话就会出现乱码,以至于无法成功解析到页面;
解决问题:
一开始,我想的是无非就是utf-8/gbk等几个编码,换一换就好了! 后来,实在是被千变万化的编码搞得心烦,索性:
#正常请求url
response = requests.get('https://example.com',headers=headers)
#用获取到的encoding 来转码
response.encoding = response.apparent_encoding
直接输出:
print(response.text)
或者有时会把求到的html存成文档,静态抓取:
#这样就好了
with open('example.html','w',encoding=response.apparent_encoding) as f:f.write(response.text)
补充一点:
对于有些香港的网页,他们经常会使用gb2312作为编码,这时候,如果你跟他们一起使用这个编码在输出的时候就会出现问题,直接看到gb2312 --->改成 GBK 即可!!!
---------你不改的话,如果你使用xpath,就容易遇到乱码!!
总结:
他变由他变,把咱的encoding改成动态的,跟着他一起变!!!