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

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

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

宝慕林4294392 2019-02-25 21:00:33
def getHtml(url,timeout=20): try: headers = { 'Accept-Language': 'zh-cn', 'Content-Type': 'application/x-www-form-urlencoded', 'User-Agent': 'Mozilla/4.0 (compatible MSIE 6.00 Windows NT 5.1 SV1)', } r = requests.get(url,headers=headers,timeout=timeout) html = r.text return html except Exception,ex: return None soup = BeautifulSoup(getHtml()) print soup.title 以上代码,如何改进,才能在获取任何网页标题的时候,不至于乱码。 注:提取部分网页的标题的时候会直接乱码显示。如何改进,才能通用?
查看完整描述

5 回答

?
绝地无双

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

有个 chardet 用来检测编码的,如果安装了,BeautifulSoup 貌似会自动调用这个库来检测编码并 decode 成 unicode。

对了,上面是从网上看的。

总之拿到文件编码就好办了。

查看完整回答
反对 回复 2019-03-01
?
慕哥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-03-01
?
元芳怎么了

TA贡献1798条经验 获得超7个赞

先看看是不是编码问题,如果不是的话,建议再看看是不是gzip加密了,如果是的话需要解密,Python有自带的gzip库,
import gzip

g = gzip.open(path, 'rb')
然后对象g就能当普通文件对象进行操作了(虽然type不是'file')

查看完整回答
反对 回复 2019-03-01
?
料青山看我应如是

TA贡献1772条经验 获得超8个赞

with open('r.txt','w',encoding='utf-8') as ff:
ff.write(r.text)

查看完整回答
反对 回复 2019-03-01
  • 5 回答
  • 0 关注
  • 576 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信