python爬虫问题: requests库中文编码问题
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python爬虫问题: requests库中文编码问题,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1286字,纯文字阅读大概需要2分钟。
内容图文
为什么会有ISO-8859-1这样的字符集编码
requests会从服务器返回的响应头的 Content-Type 去获取字符集编码,如果content-type有charset字段那么requests才能正确识别编码,否则就使用默认的 ISO-8859-1. 一般那些不规范的页面往往有这样的问题.
\requests\utils.py
如何获取正确的编码
requests的返回结果对象里有个apparent_encoding函数, apparent_encoding通过调用chardet.detect()来识别文本编码. 但是需要注意的是,这有些消耗计算资源.
\requests\models.py
@property
def apparent_encoding(self):
"""The apparent encoding, provided by the chardet library."""
return chardet.detect(self.content)['encoding']
requests的text() 跟 content() 有什么区别?
requests在获取网络资源后,我们可以通过两种模式查看内容。 一个是r.text,另一个是r.content,那他们之间有什么区别呢?
分析requests的源代码发现,r.text返回的是处理过的Unicode型的数据,而使用r.content返回的是bytes型的原始数据。也就是说,r.content相对于r.text来说节省了计算资源,r.content是把内容bytes返回. 而r.text是decode成Unicode. 如果headers没有charset字符集的化,text()会调用chardet来计算字符集,这又是消耗cpu的事情.
通过看requests代码来分析text() content()的区别.
requests中文乱码解决方法
方法一: 直接encode成utf-8格式.
1r.content.decode(r.encoding).encode('utf-8')
1r.encoding = 'utf-8'
方法二:如果headers头部没有charset,那么就从html的meta中抽取.
内容总结
以上是互联网集市为您收集整理的python爬虫问题: requests库中文编码问题全部内容,希望文章能够帮你解决python爬虫问题: requests库中文编码问题所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。