Python爬取网页返回的信息是\x开头的字符怎么进行编码转换?
如图所示,我直接使用utf-8转换也没法转成中文。 本帖最后由 YunGuo 于 2020-11-26 17:18 编辑兄弟,有空给你研究了一下这个问题,python3中其实还是有办法可以解决的。
先将字符串编码为unicode_escape,作用就是将字符串反向转换
s='\xe4\xbd\xa0\xe5\xa5\xbd\xe4\xb8\x96\xe7\x95\x8c'
s = s.encode('unicode_escape')
得到的是bytes类型数据(字符串中的单斜杠变成双斜杠)
b'\\xe4\\xbd\\xa0\\xe5\\xa5\\xbd\\xe4\\xb8\\x96\\xe7\\x95\\x8c'
再将bytes类型转为字符串,取出b中间的字符串,将字符串中\\x替换为%,改成url编码
ss = re.findall("b'(.*?)'", str(s)).replace('\\\\x', '%')
或者直接解码,再替换
ss = s.decode('utf-8').replace('\\x', '%')
得到中文的url编码
%e4%bd%a0%e5%a5%bd%e4%b8%96%e7%95%8c
最后利用urllib的unquote方法转为中文
un = parse.unquote(ss) 有的能转有的不能转 把文本发出来 a=b"\xE5\x85\x84\xE5\xBC\x9F\xE9\x9A\xBE\xE5\xBD\x93\xE6\x9D\x9C\xE6\xAD\x8C".decode('utf-8') 网页的信息是字节,decode(“utf-8”)来解字节的编码 西瓜味的苹果 发表于 2020-11-23 09:08
楼主返回的信息肯定是字符串不可能带b的 wp231957 发表于 2020-11-23 09:10
楼主返回的信息肯定是字符串不可能带b的
他是在爬取网页啊,无论是urllib还是requests,爬取网页返回的不都是字节吗,再说网页怎么可能返回这样的字符串,小白一枚!!!{:5_96:} 本帖最后由 YunGuo 于 2020-11-23 15:51 编辑
你这输出的是字符串。
在python2中,字符串存入内存的就是utf-8格式,你print输出的这些就会直接显示中文(如果字符串是中文,则需要在文件头声明)。
而在python3中print将字符串以unicode编码存入内存,然后输出转为了utf-8格式;你这个输出的就是utf-8,无法用decode再次转成中文,需要前面加个b变成bytes类型才能转。 应该是网页加密了,你不妨把链接发出来看看 笨鸟学飞 发表于 2020-11-23 20:37
应该是网页加密了,你不妨把链接发出来看看
网页数据没加密,我把代码中的\x开头的字符取出来使用 a = b'\xe6\x88\x91\xe9\x97\xae\xe4\xbb\x80\xe4\xb9\x88\xe4\xba\x8b' 的方式进行decode解码可以直接得到中文,但是字符串没法直接使用decode 一世长安呢 发表于 2020-11-23 21:10
网页数据没加密,我把代码中的\x开头的字符取出来使用 a = b'\xe6\x88\x91\xe9\x97\xae\xe4\xbb\x80\xe4\ ...
如果没加密,那试试下面的代码
import requests
res = requests.get(url)
res.encoding='utf-8'
print(res.text) 笨鸟学飞 发表于 2020-11-24 00:30
如果没加密,那试试下面的代码
不行,网页内包含的一些内容无法解析。
UnicodeEncodeError: 'gb2312' codec can't encode character '\xe4' in position 265: illegal multibyte sequence 有些是转化不了的{:10_269:}
页:
[1]