为什么我得到数据有的乱码,有的不乱吗???乱码该怎么解决???求大佬赐教!!!
代码:
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())
结果:
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())
为什么要是gbk
@hhwwww:看返回的ResponseHeader
Content-Type: text/html; charset=gb2312
或者你用IE之类的能切换编码的浏览器,看下就明白了!
得到返回的文件流,解析当然要按照Response的charset;
如果只看html里的charset那就错了。
@张朋举: 为什么不用gb2312
@hhwwww: GBK是gb2312超集,所以可用!
https://cloud.tencent.com/developer/article/1343240
现在各大网站基本都是用utf8,和谐所有编码问题,中文的特定编码基本不用。
网站为了保护自己的数据,是可能自定义编码(以及字体的)的,这很正常 —— 比如火山视频;那么你需要人工自己去映射编码,实际状况自行分析~~
能帮我分析一下吗?我没看到它是自定义编码啊?麻烦大佬帮帮忙,谢谢!!!
@hhwwww: 不能,可以快速看的 能提供方法方向的,我可以提供;费时费力的 —— 我们这种行业就是是靠这种“体能”吃饭的,自己加加油哈。
@花飘水流兮: 啊。。。怎么办,我该怎么解决乱码。。。
乱码那一行单独处理
怎么处理
@hhwwww: 这一行是table里数据 可以利用一些页面解析工具例如jsoup直接从表格里取数据
用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
韦德
利记
变化时间
能解释一下为什么这样可以呢?
@hhwwww:
网页源码中说的是utf-8编码,所以请求回来的response.text是用utf-8编码的,但是看这个情况,这些字的编码是用的gbk,所以将请求下来的二进制response.content使用gbk编码就行了。utf-8更加通用一些,gbk是中文的标准。
@Masako: 怎么看出来是gbk的
@hhwwww: 楼下是对的,我是凭经验来的,没注意这个原理,学到了。
我点回复不小心点了反对,好像不能取消了。。。