在獲取的json評論中包含如下特殊數(shù)據(jù):
f({
"version": "v2",
"errcode": "0",
"errmsg": "",
"result":{
"comments": [
{
"id": "13392158929",
"topped": "0",
"guid": "4bd7882a-5177-4a2c-a872-f32f66426a06",
"content": "外形外觀:可以接受屏幕音效:屏幕不靈敏\x26hellip\x3B音效非常非常差今時今日還做出這樣的手機\x26hellip\x3B表示無語\x26hellip\x3B買了只能將就用吧!拍照效果:對于老人家來說可以接受運行速度:老人家不玩游戲\x26hellip\x3B還是可以的待機時間:不理想其他特色:沒有什么物色\x26hellip\x3B原以為華為崛起:\x26hellip\x3B性價比較低\x26hellip\x3B!",
"creationTime": "2019-11-01 09:55:58",
. . . . . .
"userClientShow": "來自京東Android客戶端",
}
,
{
"id": "13391208100",
"topped": "0",
"guid": "d4a74074-3edb-4da1-b201-008bee226dfb",
"content": "不錯",
"creationTime": "2019-10-31 23:28:34",
"isTop": false,
"referenceId": "100003599639",
"referenceImage": "jfs/t1/41065/9/5364/252918/5cee30b8E22c3ea99/5d652e51051b7bdf.jpg",
"referenceName": "華為 HUAWEI 麥芒 8 超廣角AI三攝 高清珍珠屏 大存儲 6GB+128GB 幻夜黑 全網(wǎng)通雙4G手機",
"referenceTime": "2019-10-29 21:13:04",
"referenceType": "Product",
. . . . . .
"userClientShow": "來自京東Android客戶端",
}
]
}
})
觀察這個類JSON有三處問題:
- f(....)所有數(shù)據(jù)在括號內(nèi);
- {}中的最后一個屬性:"userClientShow": "來自京東Android客戶端", 以逗號結(jié)尾(并非每個都有逗號);
- 最難的是里面有:\x26hellip\x3B這樣的特殊數(shù)據(jù)。
處理方案:
1.最簡單:content.strip().lstrip('f(').rstrip(')')即可;
- userClientShow帶逗號時Json.loads時會拋異常, 可以通過:
re.sub('("userClientShow.*),', '\g<1>', text)
匹配帶“,”的userClientShow,然后去掉“,”并將文本替換到原處;
- 麻煩點,觀察發(fā)現(xiàn)語句:
“形外觀:可以接受屏幕音效:屏幕不靈敏\x26hellip\x3B音效非常非常差今時今日還做出這樣的手機”
中的特殊“\x26hellip\x3B”需要經(jīng)過如下變形方可:“\x26hellip\x3B”→“& hellip ;”→“...”
首先: “\x26hellip\x3B”→“& hellip ;”
def _hex(self, __hex):
return chr(int(__hex.group()[2:], 16))
content= re.sub(r'\\x.{2}', self._hex, content)
然后: “& hellip ;”→“...”
text = HTMLParser.HTMLParser().unescape(text)
解決。