爬取網易嚴選某種衣服商品資料,實現視覺化,結論有點嚇人
前言
本文的文字及圖片來源於網路,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯絡我們以作處理。
以下文章來源於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相差不大。