python 爬蟲 response得到亂碼

熾天使_曉發表於2018-08-13

這個問題折磨了我幾乎一天,好在我倔強地不停搜尋解決方法。

“終於等到你,還好我沒放棄。”

進入正題,感謝大神的分享,開個傳送門https://www.cnblogs.com/leomo/p/6869230.html

以下為程式碼,爬取漢字“一”的篆書字,得到網頁原始碼:

import requests

#使用post方法爬取網頁資訊

url = 'http://www.diyiziti.com/Builder'
data = {'Content':urllib2.quote('一'),
        'FontInfoId':Sort}
headers = {'content-type': 'charset=utf8'}
response = requests.post(url = url, data = data, headers=headers)
print(response.content)

過程:

當我使用get方法不傳入引數時,列印其得到的網頁的編碼格式。

url = 'http://www.diyiziti.com/Builder'
response = requests.get(url)
print(response.encoding)

>>>utf-8

得到結果:utf-8

但是當我用post方法傳入引數進去,列印其得到的網頁的編碼格式。

url = 'http://www.diyiziti.com/Builder'
data = {'Content':urllib2.quote(wd),'FontInfoId':Sort}
response = requests.post(url=url,data = data)
print(response.encoding)

>>>None

得到結果:None

百思不得其解,直到看到大神的解決方法,明白了當我輸入資料得到響應後的網頁原始碼時,它並未指定編碼方式。

文章https://blog.csdn.net/sentimental_dog/article/details/52661974 中指出

“官方文件的意思就是,如果requests沒有發現http headers中的charset,就會使用預設的IOS-8859-1(也就是我們常說的latin-1,但是我們一般的網頁使用的charset其實是utf-8)這會導致什麼結果呢?”

詳細的解釋大家可以進入上面連結檢視。總而言之就是導致編碼、解碼不正確,因此出現亂碼。

所以本文重點

使用headers = {'content-type': 'charset=utf8'},

通過配置header 設定編碼解決問題。

相關文章