1. 程式人生 > 實用技巧 >爬取網易嚴選某種衣服商品資料,實現視覺化,結論有點嚇人

爬取網易嚴選某種衣服商品資料,實現視覺化,結論有點嚇人

前言

本文的文字及圖片來源於網路,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯絡我們以作處理。

以下文章來源於Python技術 ,作者派森醬

爬取資料

首先,我們在網易嚴選的搜尋框輸入關鍵詞“男士內褲”,頁面搜尋出來男士內褲的產品列表介面:

搜尋結果

我們點開第一個商品,點選“評論”,就可以看到如下資訊:

評論資訊


PS:如有需要Python學習資料的小夥伴可以加下方的群去找免費管理員領取.

可以免費領取專案實戰視訊

我們分析請求列表,就可以很容易地發現評論資料是通過 https://you.163.com/xhr/comment/listByItemByTag.json 這個請求來獲取的。然後我們過濾請求引數,去掉不是必傳的引數,最終發現 itemId 和 page 兩個引數是必須的。

itemId 是指商品的ID,page 就是指的請求的頁碼,預設每頁記錄數是40。所以我們要獲取評論資料的前提是獲取到對應的商品ID。

我們是從搜尋頁面點選產品進入商品詳情頁的,所以搜尋頁面的商品列表裡面肯定存在每一個商品的商品ID,我們回到搜尋產品列表頁,尋找搜尋商品的請求:

商品列表

同樣的,我們在搜尋介面的請求分析中,找到了 http://you.163.com/xhr/search/search.json 這個請求,逐個分析請求引數後發現,我們只需要 keyword 和 page 兩個引數即可。

請求分析完成後,我們就可以來碼程式碼了。程式碼如下:

# 獲取商品列表
def search_keyword(keyword):
    uri = 'https://you.163.com/xhr/search/search.json'
    query = {
        "keyword": keyword,
        "page": 1
    }
    try:
        res = requests.get(uri, params=query).json()
        result = res['data']['directly']['searcherResult']['result']
        product_id = []
        for r in result:
            product_id.append(r['id'])
        return product_id
    except:
        raise

# 獲取評論
def details(product_id):
    url = 'https://you.163.com/xhr/comment/listByItemByTag.json'
    try:
        C_list = []
        for i in range(1, 100):
            query = {
                "itemId": product_id,
                "page": i,
            }
            res = requests.get(url, params=query).json()
            if not res['data']['commentList']:
                break
            print("爬取第 %s 頁評論" % i)
            commentList = res['data']['commentList']
            C_list.extend(commentList)
            time.sleep(1)

        return C_list
    except:
        raise


product_id = search_keyword('男士內褲')
r_list = []
for p in product_id:
    r_list.extend(details(p))

with open('./briefs.txt', 'w') as f:
    for r in r_list:
        try:
            f.write(json.dumps(r, ensure_ascii=False) + '\n')
        except:
            print('出錯啦')

為了簡單起見,我抓取了首頁的40件商品的評論數,將結果儲存在 briefs.txt 檔案中。檔案資料的預覽如下:

儲存資料

分析資料

抓取完資料後,我們就可以進入探索環節了,我想從顏色、尺碼、評論三個角度分析資料,看看男士們內褲的一些“特點”。

我們來看看資料結構的特點:

{
  "skuInfo": [
    "顏色:黑色",
    "尺碼:M"
  ],
  "frontUserName": "S****、",
  "frontUserAvatar": "https://yanxuan.nosdn.127.net/0da37937c896cac1955bda8522d5754f.jpg",
  "content": "非常好",
  "createTime": 1592965119969,
  "picList": [],
  "commentReplyVO": null,
  "memberLevel": 5,
  "appendCommentVO": null,
  "star": 5,
  "itemId": 3544005
}

仔細觀察這條評論資料,我們可以看到顏色和尺碼都放在 skuInfo 這個數組裡面,評論是放在 content 欄位裡面。同時,我們多翻一些資料就可以發現,顏色有好幾種格式:

  • 單條裝的顏色,例如:顏色:淺麻灰
  • 多條裝的顏色,例如:顏色:(黑色+麻灰+淺麻灰)3條
  • 自選多條的顏色,例如:顏色:黑色+藏青色
  • 其他,例如:規格:5條裝

這裡,最後一種無法分辨出顏色,我準備過濾掉。其他幾種,去除掉干擾,通過“+”就可以拆分出顏色來。

而尺碼資料格式是統一的,可以直接獲取。

我將顏色和尺碼都做成柱狀圖來展示,而評論就用詞雲來展示。最終的效果圖如下:

顏色分佈

顏色並沒有出乎我的意料,黑色遙遙領先,不過,如果把幾種灰色加起來的話,可能超過了黑色。總之,黑色和灰色是大眾的選擇。

尺寸分佈

尺寸嘛,前三名是XL、L和XXL,不過XL和L相差不大。