1. 程式人生 > >[實戰]我們爬取了20W條淘寶銷售記錄,只為了知道哪種月餅更受歡迎!

[實戰]我們爬取了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&currentPageNum=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