[實戰]我們爬取了20W條淘寶銷售記錄,只為了知道哪種月餅更受歡迎!
引言
中秋佳節我們要吃傳統美食——月餅。小編忽然間有個想法,想要知道在淘寶上哪種月餅更受歡迎。說幹就幹,立馬操練起來~
需求分析
通過爬取淘寶散裝月餅銷售記錄,對使用者購買過的月餅進行統計,分析最受歡迎的月餅種類。由於搜尋關鍵字“月餅”會出現很多套裝禮盒,影響我們的判斷資料,所以我們將關鍵字定位“散裝月餅”。
最終需求定為:爬取淘寶“散裝月餅”搜尋結果中,所有產品的評價,通過評價中展示的月餅餡型別,進行分析。
知識點
爬取資料:requests庫
多執行緒:ThreadPoolExecutor
圖形分析:pyecharts
獲取產品ID
首先登陸淘寶網,開啟開發者工具,搜尋關鍵字“散裝月餅”,觀察URL。點選下一頁,再次觀察URL。下面列出前三頁的URL。
第一頁:https://s.taobao.com/search?ie=utf8&initiative_id=staobaoz_20180924&stats_click=search_radio_all%3A1&js=1&imgfile=&q=%E6%95%A3%E8%A3%85%E6%9C%88%E9%A5%BC&suggest=0_1&_input_charset=utf-8&wq=%E6%95%A3%E8%A3%85&suggest_query=%E6%95%A3%E8%A3%85&source=suggest
第二頁:https://s.taobao.com/search?ie=utf8&initiative_id=staobaoz_20180924&stats_click=search_radio_all%3A1&js=1&imgfile=&q=%E6%95%A3%E8%A3%85%E6%9C%88%E9%A5%BC&suggest=0_1&_input_charset=utf-8&wq=%E6%95%A3%E8%A3%85&suggest_query=%E6%95%A3%E8%A3%85&source=suggest&bcoffset=3&ntoffset=3&p4ppushleft=1%2C48&s=44
第三頁:https://s.taobao.com/search?ie=utf8&initiative_id=staobaoz_20180924&stats_click=search_radio_all%3A1&js=1&imgfile=&q=%E6%95%A3%E8%A3%85%E6%9C%88%E9%A5%BC&suggest=0_1&_input_charset=utf-8&wq=%E6%95%A3%E8%A3%85&suggest_query=%E6%95%A3%E8%A3%85&source=suggest&bcoffset=0&ntoffset=6&p4ppushleft=1%2C48&s=88
這是前三個頁面的URL,可以發現,除了"q="和"s="後面的資料不一樣,其他的都是一樣的,因此,可以把URL簡化為:
https://s.taobao.com/search?q=keyword&s=pagenum
其中,q代表搜尋的關鍵詞,s代表商品列表的頁數,0代表第一頁,44代表第二頁,88代表第三頁……以此URL抓取商品的ID等資訊。
此部分程式碼如下:
def get_product_id_list(num,all_product_list):
base_url = "https://s.taobao.com/search"
params = {
"q":"月餅散裝",
"s":num*44,
}
r = requests.get(base_url,params=params,headers=headers)
nids=re.findall(pattern='"nid":"(.*?)"',string=r.text)
for nid in nids:
if nid not in all_product_list:
all_product_list.append(nid)
print("第%s頁product-id提取完成"%num)
return all_product_list
獲取月餅種類
上述程式碼可以獲取到商品ID,利用商品ID資訊,跳轉到具體的商品詳情頁面,對其評論進行抓取。點選商品詳情頁的評論資訊,可以看到呼叫瞭如下的介面資訊:
上面的介面資訊,我們去除不必要的引數,可以得到連結: https://rate.taobao.com/feedRateList.htm?auctionNumId=575182860576¤tPageNum=1 。推測auctionNumId為產品ID,currentPageNum為當前評論頁數。根據上述分析,我們可以得到使用者評論中的產品資訊。部分程式碼如下:
while True:
params = {
"auctionNumId":product_id,
"currentPageNum":currentPageNum
}
r = requests.get(base_url,params=params,headers=headers)
try:
data = eval(r.text.strip("(").strip(")").replace("true","True").replace("false","False").replace("null","None"))
total = data["total"]
except:
total = 0
if total != 0:
comments = data["comments"]
for comment in comments:
auction = comment["auction"]
sku = auction["sku"]
if sku in product.keys():
product[sku] += 1
else:
product[sku] = 1
else:
break
print("第%s條商品的第%s頁評論爬取完成"%(num,currentPageNum))
currentPageNum += 1
print("第%s條商品的評論爬取完成" % num)
最後將爬取結果分類整理至本地檔案。(程式碼略)
資料分析
通過上述的爬蟲,我們最終爬取了22W條月餅銷售記錄。最後形成柱形圖、餅圖及詞雲圖。
根據上述內容可以看到,除去禮盒型別,蛋黃、五仁、蓮蓉、火腿為銷售數量比較多的。(此部分統計資料是將雜項去除之後的資料)
除了按照餡的種類進行劃分之外,我們還可以根據產地進行劃分。結果如下圖所示。
按照口味劃分:
按照月餅皮型別分類:
以上資料均為部分資料,分析結果僅供參考!
原始碼
連結:https://pan.baidu.com/s/1ZHaOvyt1wRrzZOZnHthTjw 密碼:27em