Python3的requests类抓取中文页面出现乱码的解决办法
今天一个朋友用Requests抓取一个中文gb2312编码的页面时,整个页面的中文都乱码了
文章图片
1.0 这种乱码现象基本上都是编码造成的,我们要转到我们想要的编码,先po一个知识点,嵩天老师在Python网络爬虫与信息提取说到过的:response.encoding是指从HTTP的header中猜测的响应内容编码方式,如果header中不存在charset,则默认编码为ISO-8859-1 ,这样一来某些不规范的服务器返回就必然乱码了;response.apparent_encoding是指从内容中分析出的响应内容编码方式。requests内部的 utils 也提供了一个从返回 body 获取页面编码的函数get_encodings_from_content,这样如果服务器返回的头不含 Charset,再通过 get_encodings_from_content 就可以知道页面的正确编码了。下面是调试的过程:
import requests
from requests.exceptions import RequestExceptiondef get_one_page(url):
try:
response=requests.get(url)
if response.status_code == 200:
#print(response.text)
print(response.encoding)
print(response.apparent_encoding)
r=response.text
print(requests.utils.get_encodings_from_content(r)[0])
a=r.encode('ISO-8859-1').decode(requests.utils.get_encodings_from_content(r)[0])
print(a)
print('------------------------------------')
b = r.encode('ISO-8859-1').decode(response.apparent_encoding)
print(b)
return None
except RequestException:
return Nonedef main():
url = 'http://www.mh160.com/'
get_one_page(url)if __name__=='__main__':
main()
看图!看图!看图!
文章图片
2.0
推荐阅读
- 热闹中的孤独
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 放屁有这三个特征的,请注意啦!这说明你的身体毒素太多
- 一个人的旅行,三亚
- 布丽吉特,人生绝对的赢家
- 慢慢的美丽
- 尽力
- 一个小故事,我的思考。
- 家乡的那条小河
- 《真与假的困惑》???|《真与假的困惑》??? ——致良知是一种伟大的力量