一世长安呢 发表于 2020-11-23 08:24:15

Python爬取网页返回的信息是\x开头的字符怎么进行编码转换?

如图所示,我直接使用utf-8转换也没法转成中文。

YunGuo 发表于 2020-11-23 08:24:16

本帖最后由 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)

wp231957 发表于 2020-11-23 08:49:52

有的能转有的不能转

wp231957 发表于 2020-11-23 08:59:55

把文本发出来

西瓜味的苹果 发表于 2020-11-23 09:03:31

a=b"\xE5\x85\x84\xE5\xBC\x9F\xE9\x9A\xBE\xE5\xBD\x93\xE6\x9D\x9C\xE6\xAD\x8C".decode('utf-8')

西瓜味的苹果 发表于 2020-11-23 09:04:25

网页的信息是字节,decode(“utf-8”)来解字节的编码

西瓜味的苹果 发表于 2020-11-23 09:08:05

wp231957 发表于 2020-11-23 09:10:39

西瓜味的苹果 发表于 2020-11-23 09:08


楼主返回的信息肯定是字符串不可能带b的

西瓜味的苹果 发表于 2020-11-23 09:22:00

wp231957 发表于 2020-11-23 09:10
楼主返回的信息肯定是字符串不可能带b的

他是在爬取网页啊,无论是urllib还是requests,爬取网页返回的不都是字节吗,再说网页怎么可能返回这样的字符串,小白一枚!!!{:5_96:}

YunGuo 发表于 2020-11-23 15:47:38

本帖最后由 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:51

应该是网页加密了,你不妨把链接发出来看看

一世长安呢 发表于 2020-11-23 21:10:43

笨鸟学飞 发表于 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-24 00:30:33

一世长安呢 发表于 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 21:38:19

笨鸟学飞 发表于 2020-11-24 00:30
如果没加密,那试试下面的代码

不行,网页内包含的一些内容无法解析。
UnicodeEncodeError: 'gb2312' codec can't encode character '\xe4' in position 265: illegal multibyte sequence

我太难了。。。 发表于 2020-11-24 22:31:09

有些是转化不了的{:10_269:}
页: [1]
查看完整版本: Python爬取网页返回的信息是\x开头的字符怎么进行编码转换?