鱼C论坛

 找回密码
 立即注册
查看: 3923|回复: 14

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

[复制链接]
发表于 2020-11-23 08:24:15 | 显示全部楼层 |阅读模式
10鱼币
如图所示,我直接使用utf-8转换也没法转成中文。
最佳答案
2020-11-23 08:24:16
本帖最后由 YunGuo 于 2020-11-26 17:18 编辑

兄弟,有空给你研究了一下这个问题,python3中其实还是有办法可以解决的。
先将字符串编码为unicode_escape,作用就是将字符串反向转换
  1. s='\xe4\xbd\xa0\xe5\xa5\xbd\xe4\xb8\x96\xe7\x95\x8c'
  2. s = s.encode('unicode_escape')
复制代码

得到的是bytes类型数据(字符串中的单斜杠变成双斜杠)
  1. b'\\xe4\\xbd\\xa0\\xe5\\xa5\\xbd\\xe4\\xb8\\x96\\xe7\\x95\\x8c'
复制代码

再将bytes类型转为字符串,取出b中间的字符串,将字符串中\\x替换为%,改成url编码
  1. ss = re.findall("b'(.*?)'", str(s))[0].replace('\\\\x', '%')
复制代码

或者直接解码,再替换
  1. ss = s.decode('utf-8').replace('\\x', '%')
复制代码

得到中文的url编码
  1. %e4%bd%a0%e5%a5%bd%e4%b8%96%e7%95%8c
复制代码

最后利用urllib的unquote方法转为中文
  1. un = parse.unquote(ss)
复制代码
QQ截图20201122164230.png

最佳答案

查看完整内容

兄弟,有空给你研究了一下这个问题,python3中其实还是有办法可以解决的。 先将字符串编码为unicode_escape,作用就是将字符串反向转换 得到的是bytes类型数据(字符串中的单斜杠变成双斜杠) 再将bytes类型转为字符串,取出b中间的字符串,将字符串中\\x替换为%,改成url编码 或者直接解码,再替换 得到中文的url编码 最后利用urllib的unquote方法转为中文
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-23 08:24:16 | 显示全部楼层    本楼为最佳答案   
本帖最后由 YunGuo 于 2020-11-26 17:18 编辑

兄弟,有空给你研究了一下这个问题,python3中其实还是有办法可以解决的。
先将字符串编码为unicode_escape,作用就是将字符串反向转换
  1. s='\xe4\xbd\xa0\xe5\xa5\xbd\xe4\xb8\x96\xe7\x95\x8c'
  2. s = s.encode('unicode_escape')
复制代码

得到的是bytes类型数据(字符串中的单斜杠变成双斜杠)
  1. b'\\xe4\\xbd\\xa0\\xe5\\xa5\\xbd\\xe4\\xb8\\x96\\xe7\\x95\\x8c'
复制代码

再将bytes类型转为字符串,取出b中间的字符串,将字符串中\\x替换为%,改成url编码
  1. ss = re.findall("b'(.*?)'", str(s))[0].replace('\\\\x', '%')
复制代码

或者直接解码,再替换
  1. ss = s.decode('utf-8').replace('\\x', '%')
复制代码

得到中文的url编码
  1. %e4%bd%a0%e5%a5%bd%e4%b8%96%e7%95%8c
复制代码

最后利用urllib的unquote方法转为中文
  1. un = parse.unquote(ss)
复制代码

评分

参与人数 1荣誉 -1 鱼币 +1 收起 理由
一世长安呢 -1 + 1 感谢楼主无私奉献!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-23 08:49:52 | 显示全部楼层
有的能转  有的不能转
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-23 08:59:55 | 显示全部楼层
把文本发出来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-23 09:03:31 | 显示全部楼层
  1. a=b"\xE5\x85\x84\xE5\xBC\x9F\xE9\x9A\xBE\xE5\xBD\x93\xE6\x9D\x9C\xE6\xAD\x8C".decode('utf-8')
复制代码

评分

参与人数 1鱼币 +1 收起 理由
一世长安呢 + 1 感谢楼主无私奉献!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-23 09:04:25 | 显示全部楼层
网页的信息是字节,decode(“utf-8”)来解字节的编码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-23 09:08:05 | 显示全部楼层
QQ截图20201123090609.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-23 09:10:39 | 显示全部楼层

楼主返回的信息肯定是字符串  不可能带b的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-23 09:22:00 | 显示全部楼层
wp231957 发表于 2020-11-23 09:10
楼主返回的信息肯定是字符串  不可能带b的

他是在爬取网页啊,无论是urllib还是requests,爬取网页返回的不都是字节吗,再说网页怎么可能返回这样的字符串,小白一枚!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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类型才能转。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-23 20:37:51 | 显示全部楼层
应该是网页加密了,你不妨把链接发出来看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 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
Snipaste_2020-11-23_21-09-20.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-24 00:30:33 | 显示全部楼层
一世长安呢 发表于 2020-11-23 21:10
网页数据没加密,我把代码中的\x开头的字符取出来使用 a = b'\xe6\x88\x91\xe9\x97\xae\xe4\xbb\x80\xe4\ ...

如果没加密,那试试下面的代码
  1. import requests

  2. res = requests.get(url)
  3. res.encoding='utf-8'
  4. print(res.text)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-24 22:31:09 | 显示全部楼层
有些是转化不了的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-19 04:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表