首页 新闻 会员 周边

爬虫得到的部分汉字乱码

0
悬赏园豆:100 [已解决问题] 解决于 2019-09-17 08:54

为什么我得到数据有的乱码,有的不乱吗???乱码该怎么解决???求大佬赐教!!!

代码:
import requests
from pyquery import PyQuery as pq

response = requests.get('http://nba.win007.com/odds/AsianOdds_n.aspx?id=365422')
doc = pq(response.text)
print(doc('.teamname').text())
print(doc('.title').text())

结果:

西野IT的主页 西野IT | 初学一级 | 园豆:19
提问于:2019-09-08 17:25
< >
分享
最佳答案
0

文本编码问题:resp.encoding = 'gbk'

import requests
from pyquery import PyQuery as pq

resp = requests.get('http://nba.win007.com/odds/AsianOdds_n.aspx?id=365422')
resp.encoding = 'gbk'
doc = pq(resp.text)
print(doc('.teamname').text())
print(doc('.title').text())

收获园豆:50
张朋举 | 小虾三级 |园豆:1915 | 2019-09-10 16:18

为什么要是gbk

西野IT | 园豆:19 (初学一级) | 2019-09-10 20:49

@hhwwww:看返回的ResponseHeader
Content-Type: text/html; charset=gb2312
或者你用IE之类的能切换编码的浏览器,看下就明白了!
得到返回的文件流,解析当然要按照Response的charset;
如果只看html里的charset那就错了。

张朋举 | 园豆:1915 (小虾三级) | 2019-09-10 22:37

@张朋举: 为什么不用gb2312

西野IT | 园豆:19 (初学一级) | 2019-09-16 19:12

@hhwwww: GBK是gb2312超集,所以可用!
https://cloud.tencent.com/developer/article/1343240
现在各大网站基本都是用utf8,和谐所有编码问题,中文的特定编码基本不用。

张朋举 | 园豆:1915 (小虾三级) | 2019-09-17 08:35
其他回答(3)
0

 网站为了保护自己的数据,是可能自定义编码(以及字体的)的,这很正常 —— 比如火山视频;那么你需要人工自己去映射编码,实际状况自行分析~~

收获园豆:10
花飘水流兮 | 园豆:13560 (专家六级) | 2019-09-08 20:47

能帮我分析一下吗?我没看到它是自定义编码啊?麻烦大佬帮帮忙,谢谢!!!

支持(0) 反对(0) 西野IT | 园豆:19 (初学一级) | 2019-09-08 20:52

@hhwwww: 不能,可以快速看的 能提供方法方向的,我可以提供;费时费力的 —— 我们这种行业就是是靠这种“体能”吃饭的,自己加加油哈。

支持(0) 反对(0) 花飘水流兮 | 园豆:13560 (专家六级) | 2019-09-08 20:57

@花飘水流兮: 啊。。。怎么办,我该怎么解决乱码。。。

支持(0) 反对(0) 西野IT | 园豆:19 (初学一级) | 2019-09-08 21:19
0

乱码那一行单独处理

收获园豆:10
ycyzharry | 园豆:25653 (高人七级) | 2019-09-08 22:27

怎么处理

支持(0) 反对(0) 西野IT | 园豆:19 (初学一级) | 2019-09-08 23:39

@hhwwww: 这一行是table里数据 可以利用一些页面解析工具例如jsoup直接从表格里取数据

支持(0) 反对(0) ycyzharry | 园豆:25653 (高人七级) | 2019-09-09 23:49
0

用gbk编码就行了

import requests
from pyquery import PyQuery as pq

response = requests.get('http://nba.win007.com/odds/AsianOdds_n.aspx?id=365422')
# print(response.content.decode('gbk'))
# doc = pq(response.text)
doc = pq(response.content.decode('gbk'))
print(doc('.teamname').text())
print(doc('.title').text())

得到

凱勒迅雷女籃 VS 韋里比魔鬼女籃
博彩公司
多盘口
初盘
终盘
历史资料 主队
盘口
客队
主队
盘口
客队 澳门
易胜博
皇冠
bet365
韦德
利记
变化时间
收获园豆:30
Masako | 园豆:1893 (小虾三级) | 2019-09-09 11:12

能解释一下为什么这样可以呢?

支持(0) 反对(0) 西野IT | 园豆:19 (初学一级) | 2019-09-09 14:07

@hhwwww:
网页源码中说的是utf-8编码,所以请求回来的response.text是用utf-8编码的,但是看这个情况,这些字的编码是用的gbk,所以将请求下来的二进制response.content使用gbk编码就行了。utf-8更加通用一些,gbk是中文的标准。

支持(0) 反对(0) Masako | 园豆:1893 (小虾三级) | 2019-09-09 14:13

@Masako: 怎么看出来是gbk的

支持(0) 反对(1) 西野IT | 园豆:19 (初学一级) | 2019-09-10 20:50

@hhwwww: 楼下是对的,我是凭经验来的,没注意这个原理,学到了。
我点回复不小心点了反对,好像不能取消了。。。

支持(0) 反对(0) Masako | 园豆:1893 (小虾三级) | 2019-09-11 14:17
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册