[问题] 爬虫编码问题

楼主: 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