[問題] 爬蟲編碼問題

作者: allan80625 (兒兒)   2016-06-16 11:38:54
大家好
我最近在爬蟲一個網站
使用的版本是python 3.4
在編碼上面遇到一個奇怪的問題
首先先request url
url = 'http://lvyou.baidu.com/taibei/'
res = requests.get(url)
res.encoding = 'utf-8'
res.text裡面有一段感覺是JavaScript用的json
if(false == "0"){
define('besttime',{text:"10\u6708-11\u6708\u662f\u6e38\u53f0\u5317\u7684\u6700\u4f73\u65f6\u95f4\uff0c\u6b64\u65f6\u6c14\u6e29\u572822\u2103\u201424\u2103"});
}
10\u6708-11 一直編碼不出來,原文是簡體中文
可是奇怪的是
我在下面另個變數等於他
aa = '10\u6708-11'
print(aa)
>> 10月-11
這樣就可以顯示了
請問為什麼網頁爬下來的編碼不成,另存變數卻可以?
謝謝大家
作者: uranusjr (←這人是超級笨蛋)   2016-06-16 12:20:00
你上面的那段我砍掉多餘的換行後可以直接執行無誤所以問題不是這段文字, 是你其他程式
作者: CaptainH (Cannon)   2016-06-16 14:50:00
一樓 我想他的意思是html raw text 的\UXXXX
作者: uranusjr (←這人是超級笨蛋)   2016-06-16 17:54:00
好像懂了, 可以參考這個 http://bit.ly/1UAtjlT
作者: qwertmn (抽筋)   2016-06-16 21:34:00
其實你已經找到答案了啊~ 他就是json stringjson.loads(r'"10\u6708-11\u6708"')另外就是 uranusjr 的方法也是可以work 的喔~恩- - 他是js 的dict.. 不是json 沒看仔細XDDDD不過忘了說, 如果你用json or unicode-escape 都沒辦法處理, 那應該是系統問題了~ 我自己試都可以
作者: s860134 (s860134)   2016-06-17 02:28:00
這問題沒那麼難懂... 你看到 \u6708 的字串在 python 中是因為 你輸入'\u6708' \u被視為 unicode 的 prefix所以她自然會把他轉成你看到的 10月但是網頁原始碼中是真正寫著 "\u6708" 6個字從檔案讀進 python 顯示應該是 '\\u6708''\\' 代表單斜線,python 字串中單個 \ 是跳脫字元簡單來說 print("\u6708")→月,print("\\u6708")→\u6708len('\u6708') == 1 , len('\\u6708') == 7打錯 len('\\u6708') == 6chr(int('6708',16)) == '\u6708'

Links booklink

Contact Us: admin [ a t ] ucptt.com