为了账号安全,请及时绑定邮箱和手机立即绑定

python:requests获取网页源码的时候乱码

python:requests获取网页源码的时候乱码

皈依舞 2019-04-16 20:27:51
defgetHtml(url,timeout=20):try:headers={'Accept-Language':'zh-cn','Content-Type':'application/x-www-form-urlencoded','User-Agent':'Mozilla/4.0(compatibleMSIE6.00WindowsNT5.1SV1)',}r=requests.get(url,headers=headers,timeout=timeout)html=r.textreturnhtmlexceptException,ex:returnNonesoup=BeautifulSoup(getHtml())printsoup.title以上代码,如何改进,才能在获取任何网页标题的时候,不至于乱码。注:提取部分网页的标题的时候会直接乱码显示。如何改进,才能通用?
查看完整描述

2 回答

?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

有个chardet用来检测编码的,如果安装了,BeautifulSoup貌似会自动调用这个库来检测编码并decode成unicode。
对了,上面是从网上看的。
总之拿到文件编码就好办了。
                            
查看完整回答
反对 回复 2019-04-16
?
慕哥9229398

TA贡献1877条经验 获得超6个赞

查看一下网页的编码,比如是gbk的话,就r.encoding='gbk'。一下内容摘自requests文档
Requests会自动解码来自服务器的内容。大多数unicode字符集都能被无缝地解码。
请求发出后,Requests会基于HTTP头部对响应的编码作出有根据的推测。当你访问r.text之时,Requests会使用其推测的文本编码。你可以找出Requests使用了什么编码,并且能够使用r.encoding属性来改变它:
r.encoding
'utf-8'
r.encoding='ISO-8859-1'
如果你改变了编码,每当你访问r.text,Request都将会使用r.encoding的新值。你可能希望在使用特殊逻辑计算出文本的编码的情况下来修改编码。比如HTTP和XML自身可以指定编码。这样的话,你应该使用r.content来找到编码,然后设置r.encoding为相应的编码。这样就能使用正确的编码解析r.text了。
                            
查看完整回答
反对 回复 2019-04-16
  • 2 回答
  • 0 关注
  • 586 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号