python爬取淘宝评论_抓取淘宝某产品评论(附视频教程)
之前我水平有限,對于淘寶評論這種動態網頁,由于數據在網頁源碼中是找不到的,所以無法抓取數據,只能使用selenium模仿人操控瀏覽器來抓數據,
優點是可見容易且不宜被淘寶公司封鎖;缺點是速度太慢。
經過今天一天的鉆研,終于學會分析數據包,而且淘寶評論的數據包都是以json格式傳輸的。除了學會抓包,還要會從json中提取出想要的評論數據才行。
本文實現難點:
一、分析數據包,找到淘寶評論傳輸用的網址,分析網址特點
二、如何從找到的數據包中,從json格式內容中得到想要的數據
(可先看視頻,學習本案例中的抓包分析過程)
如果您覺得我的教程寫的不錯的話,可以關注下
我的公眾號: 大鄧帶你玩轉python (ID:shuxierenshengba)
案例
網址如下
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打開該網址,點擊評論
如圖中紅色圈中的評論,分析發現,在網頁源碼中查找不到。
找啊找,找啊找,圈中的評論就是不在網頁源碼中。那只有一種可能,在我們看不到的方式傳送。
不懂分析抓包的,可以看看下面這篇淘寶評論實戰。
用火狐瀏覽器,打開開發者工具,點擊網絡
真的找到了啊
那么接下來我們要知道這個包傳遞信息的網址
點擊消息頭,紅方框中的請求網址就是這個評論數據包傳遞的網址
網址如下
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
看起來網址太長,太復雜(稍安勿躁),那么先復制網址,在瀏覽器上打開看看是什么東西
復雜的網址中,有些亂七八糟的可以刪除,有意義的部分保留。切記刪除一小部分后先嘗試能不能打開網頁,如果成功再刪減,直到不能刪減。最后保留下來的網址,如下
https://rate.tmall.com/list_detail_rate.htm?itemId=38975978198&spuId=279689783&sellerId=92889104&order=3&callback=jsonp698¤tPage=1
currentPage=1意思是當前頁碼是第一頁。如果改動為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就可以訪問不同頁碼的評論
#將響應內容的文本取出
tb_req = requests.get(base_url, headers=headers).text[12:-1]
#將str格式的文本格式化為字典
tb_dict = simplejson.loads(tb_req)
#編碼: 將字典內容轉化為json格式對象
tb_json = json.dumps(tb_dict, indent=2) #indent參數為縮緊,這樣打印出來是樹形json結構,方便直觀
#解碼: 將json格式字符串轉化為python對象
review_j = json.loads(tb_json)
#這里的0是當前頁的第一個評論,每頁面其實是有20個評論的
print(review_j["rateDetail"]["rateList"][0]['rateContent'])
上面只是抓了一個評論。下面是抓取近100頁的網頁所有評論,代碼如下
import requests
import json
import time
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就可以訪問不同頁碼的評論
for i in range(2, 98, 1):
url = base_url + '¤tPage=%s' % str(i)
#將響應內容的文本取出
tb_req = requests.get(base_url, headers=headers).text[12:-1]
print(tb_req)
#將str格式的文本格式化為字典
tb_dict = simplejson.loads(tb_req)
#編碼: 將字典內容轉化為json格式對象
tb_json = json.dumps(tb_dict, indent=2) #indent參數為縮緊,這樣打印出來是樹形json結構,方便直觀
#print(type(tb_json))
#print(tb_json)
#解碼: 將json格式字符串轉化為python對象
review_j = json.loads(tb_json)
for p in range(1, 20, 1):
print(review_j["rateDetail"]["rateList"][p]['rateContent'])
time.sleep(1)
歡迎關注公眾號 :大鄧帶你玩轉python
總結
以上是生活随笔為你收集整理的python爬取淘宝评论_抓取淘宝某产品评论(附视频教程)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: NFS4文件锁机制探秘
- 下一篇: SAR辐射校正