python動態的網頁數據json里沒有中文字元怎麼辦?

果殼動態載入的網頁:
http://www.guokr.com/apis/minisite/article.json?retrieve_type=by_subjectsubject_key=diylimit=20offset=18_=1484373021355
獲取json數據之後如圖(部分):

這裡本該是中文字元但是不是如此。
如果直接列印這類內容會出現漢字,

問題是怎麼整體地把json里所有的這些內容轉換為漢字啊?


這就是漢字,按標準,非ascii字元按unicode編碼,也就是u四位數字,json.loads就變成漢字的unicode字元了,跟
這些一樣,都是轉義字元


只不過是表示方式不一樣而已,程序用起來沒差別。json.dumps 的時候加參數 ensure_ascii=False 就可以看到漢字了。

你需要 JSONView 這種瀏覽器擴展來漂亮地展示 JSON 數據。


看代碼


等你跨過這一段你大概就了解這個是什麼原因了,你存的是無編碼格式而已。
用spider 抓下來的一般都是 unicode 無編碼格式,如果需要存到文件,你需要指定編碼,才會顯示成漢字,如果用print ,是自動的轉換為當前系統的編碼格式了。
每個語言你都需要跨過去這個坎而已。
======分割線=======
其實很多新人都會有這樣的問題,
不想說的很複雜,其實這是一種序列化的方式,基於ascii 序列化,防止打開亂碼(個人感覺是這麼處理),
我們來看一下處理的效果:

我們就是為了將 這個 map結構保存為json

就會保存成 「u4e2du6587」 這樣的字元串,我們都知道他是中文兩個字,但是只是並非我們常見的漢字而已,其實大可不必在意這些問題,因為我們常常僅僅用於存儲而已,並非人讀

當然可以存儲為人類可讀的格式,只不過默認的編碼會是utf8
(因為我的文件頭會標明代碼的編碼) 在win的gbk 環境下 會出現亂碼。

更正,其實跟我文件頭寫的並沒有關係,因為翻看源碼發現,如果設置ensure_ascii 為False的時候默認的encoding會為utf8,當然此處可以設置其他編碼。

我們只需將 ascii 改為 False 即可得到 肉眼可見的編碼如下:

=======分割線==========
編碼是一個必須要面對的過程,即使用py3,甚至其他的語言,你總是遇到與其他程序交換數據,文件的存儲。
而且我必須承認,那個strmap的變數很有蠱惑性,大家以後不要起這種名字,當然這是個demo。:)


題主看圖,如果只是想在瀏覽器上看到中文,下載個瀏覽器插件就行,要是寫把數據下載下來保存到本地,腳本該咋寫咋寫,沒影響


兩者是一樣的,因為表達方式不一樣。

一種是用字元串去表達,另一種是內部編碼(也就是你看到的那個字元串u後面部分)。


解決了,自答下。
原來出現這種情況直接json.loads(格式為json的數據)就行了
很奇怪
有時候瀏覽器打開這種json的網頁會直接把裡面的漢字載入出來
有時候又不會。


推薦閱讀:

有沒有python爬蟲視頻教程推薦啊?
通俗的講,網路爬蟲到底是什麼?
python模擬登陸的時候,別人用的是js生成的驗證碼(純字元)如何獲得生成的動態頁面?
為什麼使用BeautifulSoup時,把解析器換成lxml就出錯?
如何從零基礎開始寫一個關於搜索知乎答案的python爬蟲?

TAG:Python | 爬蟲計算機網路 | JSON | Python入門 | 網頁爬蟲 |