python爬蟲抓下來的網頁,中間的中文亂碼怎麼解決?

特別簡單的一個爬蟲

# -*-coding:utf-8 -*-
import urllib
import urllib2
import re

url = "http://cuiqingcai.com/990.html"
request = urllib2.Request(url)
response = urllib2.urlopen(request)
print response.read()

用命令行提示符運行,中文為亂碼,怎麼解決?求教各位大神

問題快解決啦。。。找個個比較詳細的博客,仔細看了下。
小夥伴們要避免出現我這樣的問題,要首先看一下超鏈接是什麼編碼方式:&
我趴的網址charset=gbk。utf-8,不一致,所以中文亂碼了。
有類似困擾的小夥伴,可以去這個網址看看:http://www.crifan.com/summary_python_2_x_common_string_encode_decode_error_reason_and_solution/

問題解決了。。。媽媽呀的修改了一下pycharm的編譯設置就正常了。


Python代碼里的中文

  1. 代碼第一行(如果有腳本標記則是第二行)可以按照PEP8形式指定本代碼文件的編碼類型。若不指定則按照ascii(py2.x)或utf-8(py3)

你需要了解的內容

  1. 清楚知道包含中文的文件是用的什麼編碼
  2. 清楚知道自己輸出端(命令行?html?GUI?)用什麼編碼
  3. 清楚知道編碼的基本知識

你需要的python相關內容

以python2.7.x為例:

  1. print/file.write等實質上只輸出str對象,如果輸出內容不是str對象,則使用str函數進行轉換
  2. str函數是個殼,實質是調用對象方法__str__
  3. encode函數是將一個unicode類按照指定的編碼(如果不指定則使用defaultencoding)轉換為不帶編碼標記的str類
  4. decode函數是將一個str類按照指定編碼(如果不指定則使用defaultencoding)轉換為使用utf-8編碼的unicode類
  5. 直接print一個容器(dict/list/tuple)的時候不會對其中的字元串進行編碼,因此看到的非ascii字符集內容將會以xAA或者uAAAA之類的形式輸出

Python3中,str行為與py2的unicode行為一致;bytes行為與py2的str行為一致。


Python寫程序原則是所有進來的字元串(讀文件,爬網頁),一進來就decode,處理完之後在要輸出的地方在encode。題主讀入(read)和輸出(print)在一行里,要在win下面想不出錯就這麼寫

print response.decode("utf-8").encode("gbk")


python2 無非是decode 和encode

請搜索一下黃哥寫的文章。


python3裡面編碼問題簡單很多


推薦閱讀:

TAG:Python | 中文亂碼 |