主要分享的内容是对光明网 ISO-8859-1 编码的处理方式。
我在处理响应时发现返回了乱码数据,经过各种encode、decode并不能解决问题,如果强行 ignore 忽略报错会导致数据丢失。
异常网址:https://zhonghua.cloud.gmw.cn/service/search.do?
接下来分享一下我的处理方法。
根据经验和分析,此时我选择通过其他方式进行转码查看。
由于JS语言支持面向对象、命令式、声明式、函数式编程范式,并且是目前支持最多编码的语言。
所以我们先把乱码的数据放到JS中尝试解码。
打开一个控制台进行调试:
通过escape和unescape可以发现能对这串字符串进行编码。
escape编码之后返回的是urlencode百分号编码。那我们可以再次把这段urlencode编码进行解码。
接下来把相应中的乱码拿出来测试。
如: 2021æ‰‹æœºå ‰æ˜Žç½‘æ–‡ç« é¡µ_å ¨åª’ä½“ç
将其escape
然后用python进行unquote
发现已经成功解码。
所以最终处理方法为:
# -*- coding: utf-8 -*-
# @Author : lx
# @IDE :PyCharm
import requests
import execjs
from urllib import parse
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36',
}
js = '''
function get_escape(doc){
return escape(doc);
}
'''
url = 'https://m.gmw.cn/2022-01/20/content_1302771636.htm'
doc = requests.get(url, headers=headers).text
doc = execjs.compile(js).call('get_escape', doc)
doc = parse.unquote(doc)
print(doc)