工作中采集某网站,到详情页时突然发现有一个页面是乱码。但其他的都正常,百思不得骑姐。百度了一下午啊,智商捉急的很。
一直以为是 requests 获取页面内容时造成的乱码。查询相关资料后发现 res.apparent_encoding 返回的与页面中 charset 一致。
后来想可能是 BeautifulSoup 解析时出现了问题。用 soup.original_encoding 获取编码时发现真的是这个问题。页面时 GB2312 而这里却是 windows-1252
用 from_encoding 设置 BeautifulSoup的编码为 gb2312 却依然乱码。
一脸懵逼了。没办法,继续百度吧。呆逼的我上不了GOOGLE。
这里是找到的答案原话:
请注意 gb2312 不是 “gb2312”,凡 gb2312 的请换成 gb18030.
微软将 gb2312 和 gbk 映射为 gb18030,方便了一些人,也迷惑了一些人。
所以答案是 soup = BeautifulSoup(res.content,'html.parser',from_encoding="gb18030")