1. 程式人生 > >requests爬取中文網站的字元編碼問題

requests爬取中文網站的字元編碼問題

    這兩天在一些入口網站使用requests爬資料的時候,發現列印或者儲存到檔案中的中文顯示為Unicode碼,看著十分不爽快,於是就必須網上找了一下相關問題。其實,弄明白瞭解決也很簡單了
   比如,爬取鳳凰網

response= requests.get("http://www.ifeng.com/")

   我們都知道response有textcontent這兩個property,它們都是指響應內容,但是又有區別。我們從doc中可以看到:

   text的doc內容為:

Content of the response, in unicode.
If Response.encoding is None, encoding will be guessed using ``chardet``.
The encoding of the response content is determined based solely on HTTP headers, following RFC 2616 to the letter. If you can take advantage of non-HTTP knowledge to make a better guess at the encoding, you should set ``r.encoding`` appropriately before accessing this property.

   而content的doc內容為:

Content of the response, in bytes.

   其中text是unicode碼,content是位元組碼,我們獲取到的響應內容的字元編碼只取決於HTTP headers,也就是我們檢視網頁原始碼時<head>標籤下<meta>標籤中charset指定的字元編碼方式,例如:

<meta http-equiv="content-type" content="text/html;charset=utf-8">

   因此,當我們使用text屬性獲取html內容出現unicode碼時,我們可以通過設定字元編碼response.encoding

,來使之匹配網頁原始碼中指定的字元編碼,這樣列印輸出就不會很奇怪了。

import requests

response = requests.get("http://www.ifeng.com/")
response.encoding = "utf-8" #手動指定字元編碼為utf-8
print(response.text)

   有興趣的童鞋可以試試沒有指定字元編碼或者指定其他字元編碼的效果。有不懂的歡迎留言討論!

   另外,我們使用python內建的檔案操作函式開啟文字檔案(不是二進位制檔案,注意區別)時,預設使用的platform dependent的字元編碼進行編解碼文字檔案,比如Windows中使用的是Ascii,Linux中使用的是utf-8,當然,我們再open()

的時候可以通過encoding指定字元編碼,例如:

open(fileName,"r",encoding="utf-8")

以上就是關於python在爬取中文網頁時遇到的一些小問題,記錄一下,以便幫助自己和大家。