爬取淘宝商品评论——2020-8月
本文具有時效性,指不定哪天失效
時間:2020-8
網頁分析
一般來說,請求的數據 會有幾種可能:
1、很簡單的html頁面(靜態網頁),就直接requests就可以請求成功;
2、js渲染的頁面 ,很常見,requests請求一堆js數據;
3、需要登錄才能獲取,登錄后,把cookie 加入請求;
4、json數據
顯然淘寶不是靜態網頁,直接打開某個商品(我們這里選擇Nike旗艦店的一雙鞋),選擇評論頁面,按F12進入調試頁面頁面,選擇network,然后點擊評論的下一頁觀察頁面請求
放大看一下
顯然評論數據就藏在list_detail開頭的響應中,那我們就直接看標頭(按照慣例,直接復制標題鏈接打開,并不能得到想要的信息,那就是還需要請求標頭的信息):
一般來說,這么長的請求是比較難看的,通常需要多觀察幾頁
重點在前面那部分,sellerid應該是商品id,currentpage是當前評論頁,并且 &ua= 后面那一段長長的字符并不相同,或許可以把它去掉,待會代碼試試。
再看看請求標頭需要什么:
authority + path 就是上面的請求url,其他的language,encoding,每個網頁基本都一樣的,可加可不加。
我們需要的是cookie(記錄客戶端的用戶信息,登錄后會有),referer(告訴服務器該網頁是從哪個頁面鏈接過來的),user-agent(爬蟲老朋友了,瀏覽器標識)
代碼分析
開始寫代碼試試
import requestspage = 1 #最終代碼改成for循環可以遍歷下載path = 'https://rate.tmall.com/list_detail_rate.htm?itemId=612891862405&spuId=1532072041&sellerId=890482188&order=3¤tPage=' url = path + str(page) #原始鏈接加上頁面headers = {'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.59 Safari/537.36 Edg/85.0.564.30',#referer隨便填個淘寶網頁應該都能用'referer': 'https://detail.tmall.com/item.htm?spm=a230r.1.14.80.675374f6O2Yqxg&id=612891862405&ns=1&abbucket=15','cookie': '復制你的cookie在這里'} res = requests.get(url,headers = headers)直接打印看看有沒有獲取成功:
可以看到數據是在的里面,雖然看起來亂七八糟。我們把里面的json提取出來就好:
用josn加載會直觀看出鍵值對:
取出需要的屬性(我這里只選擇評論,商品屬性,時間):
分析到這里已經足夠了,接下來可以根據自己需求寫代碼:
最終代碼:
import requests import re import json import time import pandas as pddef get_comments():for page in range(1,20):link = 'https://rate.tmall.com/list_detail_rate.htm?itemId=612891862405&spuId=1532072041&sellerId=890482188&order=3¤tPage='url = link + str(page) #原始鏈接加上頁面數headers = {'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.59 Safari/537.36 Edg/85.0.564.30','referer': 'https://detail.tmall.com/item.htm?spm=a230r.1.14.80.675374f6O2Yqxg&id=612891862405&ns=1&abbucket=15','cookie': '復制你的cookie到這里'}res = requests.get(url,headers = headers)js_str = re.search('\{.*}',res.text)js_dict = json.loads(js_str.group())time.sleep(7)dict_content = {}rateContent = [] #評論auctionSku = [] #款式rateDate = [] #時間for i in range(len(js_dict['rateDetail']['rateList'])):rateContent.append(js_dict['rateDetail']['rateList'][i]['rateContent'])auctionSku.append([js_dict['rateDetail']['rateList'][i]['auctionSku']])rateDate.append([js_dict['rateDetail']['rateList'][i]['rateDate']])dict_content['rateContent'] = rateContentdict_content['auctionSku'] = auctionSkudict_content['rateDate'] = rateDate#dict_content['id'] = '890482188'df = pd.DataFrame(dict_content)if page == 1:df.to_csv('./nike.csv',encoding='utf_8_sig')else:df.to_csv('./nike.csv',mode = 'a',header= False,encoding='utf_8_sig')print('已保存第',page,'頁','這一頁有',i,'條評論')if __name__ == '__main__': get_comments()詞云
補充
這僅僅只是一個商品的評論頁面,能做的事還有很多,比如獲取商品的屬性,價格,月銷量;遍歷多個商品,店鋪;對獲取到的數據進行數據分析;
并且實際上搜索頁面的商品數據就在網頁源代碼中:
user_id是商品id,并且在這里可以直觀的獲取價格,銷量,評論數(這對我們控制上述代碼控制for循環很有用)
總結
以上是生活随笔為你收集整理的爬取淘宝商品评论——2020-8月的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前端学习(3346):设计模式之工厂模式
- 下一篇: [CF903G]Yet Another