之前我水平有限,對于淘寶評論這種動態(tài)網(wǎng)頁枯怖,由于數(shù)據(jù)在網(wǎng)頁源碼中是找不到的注整,所以無法抓取數(shù)據(jù),只能使用selenium模仿人操控瀏覽器來抓數(shù)據(jù)度硝,
優(yōu)點是可見容易且不宜被淘寶公司封鎖肿轨;缺點是速度太慢。
經(jīng)過今天一天的鉆研蕊程,終于學(xué)會分析數(shù)據(jù)包椒袍,而且淘寶評論的數(shù)據(jù)包都是以json格式傳輸?shù)摹3藢W(xué)會抓包藻茂,還要會從json中提取出想要的評論數(shù)據(jù)才行驹暑。
本文實現(xiàn)難點:
一玫恳、分析數(shù)據(jù)包,找到淘寶評論傳輸用的網(wǎng)址优俘,分析網(wǎng)址特點
二京办、如何從找到的數(shù)據(jù)包中,從json格式內(nèi)容中得到想要的數(shù)據(jù)
(可先大鄧錄制的抓包分析視頻帆焕,學(xué)習(xí)本案例中的抓包分析過程)
如果您覺得我的教程寫的不錯的話惭婿,可以關(guān)注下
我的公眾號: 大鄧帶你玩轉(zhuǎn)python (ID:shuxierenshengba)
案例
德國博朗oralb/oral b 歐樂b電動牙刷 成人充電式家用 D12清亮
網(wǎng)址如下
https://detail.tmall.com/item.htm?id=38975978198&ali_refid=a3_430582_1006:1106461044:N:%E7%94%B5%E5%8A%A8%E7%89%99%E5%88%B7:bfee1d767fa0a91e5e853b29d794c6f2&ali_trackid=1_bfee1d767fa0a91e5e853b29d794c6f2&spm=a230r.1.14.1.R0FzCm
打開該網(wǎng)址,點擊評論
如圖中紅色圈中的評論叶雹,分析發(fā)現(xiàn)审孽,在網(wǎng)頁源碼中查找不到。
找啊找浑娜,找啊找佑力,圈中的評論就是不在網(wǎng)頁源碼中。那只有一種可能筋遭,在我們看不到的方式傳送打颤。
不懂分析抓包的,可以看看下面這篇淘寶評論實戰(zhàn)漓滔。
通過抓取淘寶評論為例講解Python爬取ajax動態(tài)生成的數(shù)據(jù)(經(jīng)典)_AJAX相關(guān)_腳本之家
用火狐瀏覽器编饺,打開開發(fā)者工具,點擊網(wǎng)絡(luò)
真的找到了啊
接下來我們要知道這個包傳遞信息的網(wǎng)址
點擊消息頭响驴,紅方框中的請求網(wǎng)址就是這個評論數(shù)據(jù)包傳遞的網(wǎng)址
網(wǎng)址如下
https://rate.tmall.com/list_detail_rate.htm?itemId=38975978198&spuId=279689783&sellerId=92889104&order=3¤tPage=1&append=0&content=1&tagId=&posi=&picture=&ua=250UW5TcyMNYQwiAiwTR3tCf0J/QnhEcUpkMmQ=|Um5Ockt+RH9FfEZ6QXpEcCY=|U2xMHDJ+H2QJZwBxX39RaVV7W3UyWzAeSB4=|VGhXd1llXGlTaFJrUW1WbVNnUG1PdkN7TnBNeUxzR3pFeEB/QG44|VWldfS0TMwc4BycbIwMtBn0AbSJNNl87ZBVaMRo6FEIU|VmhIGCIWNgsrFy4XKgo0ATkDIx8mHyICNgs2FioUIBo6DjMOWA4=|V25OHjBVPF07RT5XLgAgFCEUNAgxCDQULRAoHUsd|WGFBET8RMQ02Di4SKhIvDzQJNAoxZzE=|WWBAED5bMlM1SzBZIA4uGy4VNQkxCzISJhwjGCN1Iw==|WmNDEz1YMVA2SDNaIw0tES0QLw8zCzIIKBwmHCMWQBY=|W2JCEjxZMFE3STJbIgwsEicbOwc+AToaJhoiFi0RRxE=|XGVFFTteN1YwTjVcJQsrEisePgI8CDERLRkmEiseSB4=|XWREFDpbJksuYgZvFXUwWjhVPkNtTXZKclJuUWhUdEt2SXRAfCp8|XmdHFzkXNws3Az4eIh4rFDQLNg8xBThuOA==|X2ZGFjgWNgkxDy8TKh8hAT4DOAY9B1EH|QHlZCSdMK09uA3IPdB0zEy8TLRMzDzAFORkmGyAUKx5IHg==|QXlZCSdCK0osUilAORc3Z1ltVHRIdk96LAwxET8RMQ4wBTAOO207|QnpaCiQKKnpDeUFhXWFZYUF4RH1dYVt7R3hNbVFqPBwhAS8BIRgnEywRLHos|Q3pHelpnR3hYZF1hQX9HfV1kRHhFZVFxRGRefkVlXX1EZFp6RWVZeU1tWA4=&isg=Anl5FLTxBcTYINlX61XKverNieN0fW04cSauNZurS6AfIpO049emCPMw0pst&needFold=0&_ksTS=1487675147352_694&callback=jsonp695
看起來網(wǎng)址太長透且,太復(fù)雜(稍安勿躁),那么先復(fù)制網(wǎng)址豁鲤,在瀏覽器上打開看看是什么東西
復(fù)雜的網(wǎng)址中,有些亂七八糟的可以刪除琳骡,有意義的部分保留锅论。切記刪除一小部分后先嘗試能不能打開網(wǎng)頁,如果成功再刪減楣号,直到不能刪減最易。最后保留下來的網(wǎng)址,如下
https://rate.tmall.com/list_detail_rate.htm?itemId=38975978198&spuId=279689783&sellerId=92889104&order=3&callback=jsonp698¤tPage=1
currentPage=1意思是當(dāng)前頁碼是第一頁炫狱。如果改動為currentPage=3表示是第三頁藻懒。
好了,下面是代碼
import requests
import json
import simplejson
headers = {
'Connection': 'keep-alive',
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:51.0) Gecko/20100101 Firefox/51.0'
}
base_url = 'https://rate.tmall.com/list_detail_rate.htm?itemId=38975978198&' \
'spuId=279689783&sellerId=92889104&order=3&callback=jsonp698'
#在base_url后面添加¤tPage=1就可以訪問不同頁碼的評論
#將響應(yīng)內(nèi)容的文本取出
tb_req = requests.get(base_url, headers=headers).text[12:-1]
#將str格式的文本格式化為字典
tb_dict = simplejson.loads(tb_req)
#編碼: 將字典內(nèi)容轉(zhuǎn)化為json格式對象
tb_json = json.dumps(tb_dict, indent=2)? #indent參數(shù)為縮緊视译,這樣打印出來是樹形json結(jié)構(gòu)嬉荆,方便直觀
#解碼: 將json格式字符串轉(zhuǎn)化為python對象
review_j = json.loads(tb_json)
#這里的0是當(dāng)前頁的第一個評論,每頁面其實是有20個評論的
print(review_j["rateDetail"]["rateList"][0]['rateContent'])
簡書附上視頻后憎亚,代碼就不能用markdown格式粘貼员寇,代碼看起來比較亂弄慰,建議去知乎看我的文章