本文轉(zhuǎn)載至微信公眾號(hào)「大數(shù)據(jù)前沿」,已獲取授權(quán)
下載W3Cschool手機(jī)App,0基礎(chǔ)隨時(shí)隨地學(xué)編程>>戳此了解
導(dǎo)言
二胖最近在逛京東的時(shí)候偶然發(fā)現(xiàn):MM們購(gòu)買bra的記錄上竟然留下了尺寸和顏色等信息,我當(dāng)時(shí)就想,要不要抓點(diǎn)數(shù)據(jù)下來看看啊
然后就有了這篇文章~~~
Let's go!
科普一下
在抓數(shù)據(jù)前,先給各位男性朋友科普一下,這個(gè)size信息到底怎么看(ps:我也是在網(wǎng)上查的(⊙o⊙)…)
70B,80C...到底啥意思?
數(shù)字的意思是下胸圍,是水平圍繞胸部底部一周的長(zhǎng)度,即胸部下圍尺寸,單位是厘米。
如果下胸圍在68cm~72cm之間,那么就可以選擇70碼。
然后ABCDEFGH就是size了,請(qǐng)自行體會(huì)~~~
所以一個(gè)尺碼是由兩個(gè)參數(shù)組成~
分類
二胖發(fā)現(xiàn),一款產(chǎn)品并不是所有的尺寸都有,比如下面的兩張圖,第一款產(chǎn)品的尺寸只有ABC,而第二款產(chǎn)品的尺寸是B-F。
很少有一款產(chǎn)品所有尺寸都有。
所以,很難僅從一款產(chǎn)品推測(cè)出所有人的購(gòu)買趨勢(shì)。
這里,二胖選擇了把小號(hào)(ABC)和大號(hào)(B-F)分開討論,并且每種型號(hào)各抓取三個(gè)不同的品牌來進(jìn)行統(tǒng)計(jì)。
在這種情況下,數(shù)據(jù)不一定準(zhǔn)確,但是至少能體現(xiàn)出大家的購(gòu)買趨勢(shì)。
參數(shù)選擇
這里我們就選擇三個(gè)參數(shù)來分析,分別是產(chǎn)品的尺寸(你懂的,就是大小),產(chǎn)品的顏色以及用戶購(gòu)買產(chǎn)品的平臺(tái)。
小號(hào)(A-C)
小號(hào)指的是僅有ABC尺碼的產(chǎn)品,這里統(tǒng)計(jì)了3款不同的產(chǎn)品,合計(jì)3000條交易記錄。
1.尺碼
從統(tǒng)計(jì)結(jié)果來看,小號(hào)產(chǎn)品中,75B和80B賣的最好。
2.顏色
在小號(hào)產(chǎn)品中,黑色最受用戶青睞,也許是相對(duì)比較性感?
3.購(gòu)物平臺(tái)
總的來說,還是從京東App購(gòu)買的用戶最多,但也可以看到,有8%的用戶是在微信平臺(tái)上進(jìn)行交易,這已經(jīng)是一個(gè)不小的數(shù)字了。
大號(hào)(B-F)
1.尺碼
大號(hào)指的是尺碼在B-F之間的產(chǎn)品,和小號(hào)一樣,也是統(tǒng)計(jì)了3款不同的產(chǎn)品,合計(jì)3000條交易記錄。
大號(hào)產(chǎn)品的尺寸稍微多一些,從B-F都有,不過從大家的購(gòu)買記錄來看,還是B占據(jù)了大頭,B和C加起來已經(jīng)超過了三分之二。
2.顏色
可能是由于具體產(chǎn)品的影響,大號(hào)和小號(hào)的顏色差別還挺大,大號(hào)最受歡迎的顏色是酒紅色,其次是紫色,不明覺厲~~
3.購(gòu)物平臺(tái)
從購(gòu)買來源上來說,兩種型號(hào)的產(chǎn)品差別不大,大多數(shù)用戶都是通過京東App購(gòu)買的,不過也有細(xì)微的差別。
購(gòu)買小號(hào)產(chǎn)品的用戶比購(gòu)買大號(hào)產(chǎn)品的用戶更喜歡用iphone(大約高了4%)。
文件下載
代碼github地址:https://github.com/yangxuanxc/jingdong_crawler
視頻地址:https://v.qq.com/x/page/g0732q8orka.html
如對(duì)GitHub不熟悉,可前往下面的百度網(wǎng)盤進(jìn)行下載
百度網(wǎng)盤下載鏈接: https://pan.baidu.com/s/1KUaYDn4_Vnfl1yaUR-DwrQ
密碼: gez5
技術(shù)分解
看完了上面的分析,我們來看看是如何將數(shù)據(jù)抓取下來的。
代碼和視頻講解的鏈接放在了留言區(qū),需要的同學(xué)自取~
上次給大家介紹了使用Java抓取微博數(shù)據(jù),而這次爬蟲使用的是Python的爬蟲框架Scrapy。
主要流程代碼如下:
# -*- coding: utf-8 -*-
import scrapy
from scrapy import Request
import json
import math
import time
import re
class BraSpider(scrapy.Spider):
name = 'bra'
headers = {
":authority": "sclub.jd.com",
":method": "GET",
":scheme": "https",
"accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
"accept-encoding": "gzip, deflate, br",
"accept-language:": "zh-CN,zh;q=0.9,en;q=0.8",
"cache-control": "max-age=0",
"upgrade-insecure-requests": "1",
"cookie":"t=8444fb486c0aa650928d929717a48022; _tb_token_=e66e31035631e; cookie2=104997325c258947c404278febd993f7",
"user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36",
}
base_url = "https://sclub.jd.com/comment/productPageComments.action?productId=17209509645&score=0&sortType=5&pageSize=10&page=%d"
def start_requests(self):
for page in range(1,100):
url = self.base_url%page
print(url)
self.headers[':path'] = url
yield Request(url, self.parse,headers = self.headers)
#time.sleep(2)
def parse(self, response):
content = json.loads(response.text)
comments = content['comments']
for comment in comments:
item = {}
item['content'] = comment['content']#評(píng)論正文
item['guid'] = comment['guid']#用戶id
item['id'] = comment['id']#評(píng)論id
item['time'] = comment['referenceTime']#評(píng)論時(shí)間
item['color'] = self.parse_kuohao(comment['productColor'])#商品顏色
item['size'] = self.parse_kuohao(comment['productSize'])#商品尺碼
item['userClientShow'] = comment['userClientShow']#購(gòu)物渠道
print(item)
yield item
#干掉括號(hào)
def parse_kuohao(self,text):
new_text = text
searchObj1 = re.search( r'(.+)', text, re.M|re.I)
searchObj2 = re.search( r'\(.+\)', text, re.M|re.I)
if searchObj1:
text = searchObj1.group().strip()
new_text = text.replace(text,'').strip()
if searchObj2:
text = searchObj2.group().strip()
new_text = text.replace(text,'').strip()
return new_text
除了代碼,二胖也錄制了一個(gè)小視頻教大家如何運(yùn)行上面那段代碼。
附上視頻: