您现在的位置是:综合 >>正文
python查网页源代码都是乱码怎么办
综合3327人已围观
简介用Python抓网页,print出来全是乱码,这事我碰到过不下二十次。别急着怀疑人生,九成情况是编码没对上。 先做个最直接的检查——看响应头里的charset。用requests库的话,respons ...
用Python抓网页,查网print出来全是页源乱码,这事我碰到过不下二十次。代码都乱别急着怀疑人生,码办九成情况是查网编码没对上。
先做个最直接的页源检查——看响应头里的charset。用requests库的代码都乱话,response.encoding这个属性经常是码办坑。网站返回的查网是UTF-8,但requests猜成了ISO-8859-1,页源你直接打印当然全乱。代码都乱这时候手动指定一下:response.encoding = 'utf-8',码办再打印就正常了。查网我上个月爬一个政府公告站,页源就是代码都乱这毛病,改一行代码的事。
但有时候响应头里没写charset,或者写了假的。那就得从HTML源码里找。正则搜charset=或者encoding=,看看meta标签里写的啥。有个老门户网站,响应头说是gb2312,实际页面里写的是gbk,按gb2312解照样乱。这时候用response.content.decode('gbk', errors='ignore'),直接拿字节流自己解码,别信requests的自动判断。
还有一种更阴间的——页面里嵌了iframe或者动态加载的内容。你requests拿到的只是空壳HTML,真正的内容是JS跑出来的,那些字符本身没乱,是你没拿到。这种情况别折腾编码了,换selenium或者playwright上,渲染完再抓。
再说个实战细节。有时候打印到终端乱,但存文件就正常,或者反过来。这跟Python没关系,是你终端和文件系统的编码不一致。Windows下cmd默认gbk,你print UTF-8的中文当然花屏。解决办法:要么sys.stdout.reconfigure(encoding='utf-8'),要么干脆把结果写进文件,用编辑器打开看。
最后提个土办法,但真管用。用chardet库自动检测编码,虽然慢点,但能处理绝大多数情况。写个兜底逻辑:先试UTF-8,不行就chardet猜,再不行就gbk硬解。这套组合拳打下来,我这两年没再被乱码卡住过。
对了,别忘了看是不是gzip压缩没解。requests会自动解,但如果你用了urllib或者自己拼的http请求,没解压的话,二进制流直接decode肯定乱。检查一下Content-Encoding响应头,是gzip就先gzip.decompress()。
乱码这事,本质就是编码和解码对不上。你手里拿的是字节流,得找对钥匙才能打开。别慌,按顺序排查:响应头 → HTML声明 → 自动检测 → 手动指定。基本上三步之内能解决。
Tags:
上一篇:插十三的个人主页
下一篇:红警2共和国之辉个人防守图
相关文章
thinkphp外卖小程序
综合ThinkPHP外卖小程序,听着像技术选型,实际是门生意经。我见过太多团队卡在“用框架写代码”和“做能跑的产品”之间那道坎上。代码敲出来不难,难的是让骑手、商家、用户三端在一个小程序里顺畅咬合,像齿轮 ...
【综合】
阅读更多springboot静态资源映射
综合SpringBoot的静态资源映射,说白了就是告诉框架:你上哪儿找图片、CSS、JS这些“死文件”。默认规则很简单,classpath下的/static、/public、/resources、/MET ...
【综合】
阅读更多二进制数据分析工具
综合二进制数据分析工具 上周我调试一个嵌入式设备的固件,卡了整整两天。设备偶尔死机,但日志文件里全是正常记录,传感器数值看着也没毛病。最后我实在没辙,把整个内存转储文件拖进二进制编辑器里逐字节翻,才发现问 ...
【综合】
阅读更多