| 属性 | 说明 |
|---|---|
| r.encoding | 从http header中提取响应内容编码 |
| r.apparent_encoding | 从内容中分析出的响应内容编码 |
- encoding是从http中的header中的charset字段中提取的编码方式,若header中没有charset字段则默认为ISO-8859-1编码模式,则无法解析中文,这是乱码的原因。
- apparent_encoding会从网页的内容中分析网页编码的方式,所以apparent_encoding比encoding更加准确。当网页出现乱码时可以把apparent_encoding的编码格式赋值给encoding。
编码很重要:如果网页编码方式是ISO-8895-1,那么用r.text查看的是乱码。r.encoding只是分析网页的头部,猜测编码方式,而r.apparent_encoding则是实实在在根据网页内容分析编码方式。所以,在爬虫程序中,经常使用r.encoding = r.apparent_encoding,来直接获取网页的编码。
import requests url = "http://www.baidu.com/" r = requests.get(url) print(r.text) print(r.encoding) # ISO-8859-1 # 只是分析网页的头部,猜测编码方式 print(r.apparent_encoding) # 则是实实在在根据网页内容分析编码方式
ç¾åº¦ä¸ä¸ï¼ä½ å°±ç¥é æ°é» hao123 å°å¾ è§é¢ è´´å§ æ´å¤äº§åå³äºç¾åº¦ About Baidu
©2017 Baidu 使ç¨ç¾åº¦åå¿è¯» æè§åé¦ äº¬ICPè¯030173å·
解决乱码方案
print('-------------第一种方案 utf-8------------------------------------')
r.encoding = 'utf-8'
print(r.text)
print('-------------第二种方案 获取byte 类型-------------------------------------')
print(r.content.decode('utf-8')) # decode是解码
-------------第一种方案 utf-8------------------------------------
百度一下,你就知道 新闻 hao123 地图 视频 贴吧 更多产品关于百度 About Baidu
©2017 Baidu 使用百度前必读 意见反馈 京ICP证030173号



