Python實現淘寶爬取——奶粉銷售信息爬取及其數據可視化

簡介

雙十一剛過,TB的銷售額又創下了新高,我也爲2000+億做出了貢獻
恰巧買了一袋德運奶粉,味道還不錯。我就在想,接觸爬蟲也有兩個多月了,還沒有爬過TB這種經典的網站,藉着勁頭就爬取了一下TB上奶粉的銷售信息

爬蟲

在淘寶框搜索奶粉,就會彈出各式各樣的奶粉
在這裏插入圖片描述
可以爬取的有用信息:價格、銷售量、商品名稱、店鋪、地址
淘寶是一個典型用json格式存儲信息的網址,通俗講,json格式就是一層套一層的字典,像淘寶這樣一個網頁中有很多商品的網頁,源碼看起來可能會很複雜,但都是有規律可循,需要仔細觀察
在這裏插入圖片描述
在這裏插入圖片描述
通過分析,可以看出所有的商品信息都存儲在開頭爲g_page_config = 結尾爲shopcardOff":true}};的一個字典中,只需要獲取這個字典然後用python中的json庫進行解析即可

response = requests.get(urls,headers = headers)
response.encoding = 'utf-8'
html = response.text
#print(html)
start = html.find('g_page_config = ')+len('g_page_config = ')
end = html.find('"shopcardOff":true}')+len('"shopcardOff":true}')
js = json.loads(html[start:end+1])
# goods = re.search(r'g_page_config = (.*?)}};', response.text)
# print(goods)
# js = json.loads(str(goods))

這裏列舉了兩種獲取方式,一是用find方法,二是用正則匹配,都能成功獲取網頁信息
解析網頁過後,就可以從獲取到的信息中提取有用信息,通過分析可得知有用信息都存儲在很多層嵌套的字典中,所以通過遍歷這個字典提取出信息

for i in js['mods']['itemlist']['data']['auctions']:
	#產品名稱
	title = i['raw_title']
	#產品價格
	price = i['view_price']
	#地區
	location = i['item_loc'].split()[0]
	#銷售量
	sales = i['view_sales'].replace('人收貨','')
	#評價人數
	people  = i['comment_count']
	#店鋪類型
	store = i['nick']

爲了便於數據分析,所以在提取信息時,將地區和銷售量做了處理,例浙江 杭州浙江500人收貨500

數據處理

爬取數據結果如下
在這裏插入圖片描述
一共有2924條數據,其實是遠遠少於100頁中商品數量
在進行數據處理前,必須先要確定所有數據的字段是否完整
在這裏插入圖片描述
只有評價人數這個字段缺少一個數據,填充數據或者刪去都不會對數據集整體產生很大影響
在觀察數據時,可能在寫入csv文件時語句不規範,出現了下圖問題
在這裏插入圖片描述
列索引多次出現在數據集中,所以必須要刪去,只需要將數據集中不包含產品名稱字樣的樣本保留即可

data1 = data[~data['產品名稱'].isin(['產品名稱'])]

數據集中6個特徵都爲object類型,所以爲了進行數據可視化,需要對數據進行強制轉換
價格和評價人數數據比較規範,直接用astype進行轉化即可

data1['價格'] = data1['價格'].astype(float)
data1['評價人數'] = data1['評價人數'].astype(int)

但是銷售量這一樣本中還有其他字符存在,可以編寫一個函數處理數據

def price(e):
    if '萬+' in e:
        num1 = re.findall('(.*?)萬+',e)
        return float(num1[0])*10000
    elif '+' in e:
        return e.replace('+','')
    else:
        return float(e)
data1['商品銷售量'] = data1['銷售量'].apply(price)

同時可以通過數據字符串中特有的字符,將奶粉和店鋪進行分類
奶粉大致可分爲:全脂奶粉、低脂奶粉、脫脂奶粉、嬰幼兒奶粉、高鈣奶粉、未知
店鋪大致可分爲:天貓超市、旗艦店、專營店、海外類型店鋪、其他店鋪
已知商品價格和銷售量後,也可以算出該商品的銷售額

data1['銷售額'] = data1['價格']*data1['商品銷售量']

處理後的數據如下
在這裏插入圖片描述
在對處理後數據大致瀏覽時,出現了評價人數爲0的情況
在這裏插入圖片描述
評價人數爲0並不能判斷這個數據是否對錯,但是銷售量8500的商品評價爲0,就顯着不符合常理,爲了確定判斷,找到了該商品,評價人數有33w+,顯然這些是錯誤數據

list = data1[data1['評價人數']<1].index.tolist()
data1.drop([24, 138, 388, 1418, 2484],inplace = True)

drop函數直接將這幾行數據刪去,下面進行數據可視化

數據可視化

1.類型

在這裏插入圖片描述
奶粉的類型,相對來說還是嬰兒奶粉比較多,由於對產品名稱提取特徵不夠細化,所以未知也比較多,達到了800+;店鋪類型則是其他店鋪佔比最多,普通奶粉可依據價格挑選,但是嬰兒奶粉一定要依據質量挑選才可,儘可能在旗艦店這樣比較可靠的店鋪購買

2.店鋪地址分佈

在這裏插入圖片描述
店鋪地址仍然是江浙滬、廣東佔據大比例,可能不止奶粉,許多其他商品的網店、配貨倉庫都集中分佈在這些地區;衆所周知,澳大利亞的奶粉是及其出名的,所以也佔一定比例

3.價格

在這裏插入圖片描述
嬰兒奶粉的價格品牌是非常多的,所以價格分佈也較廣泛,有的甚至達到了2000+,看來養孩子真的是不容易;相比脫脂、低脂奶粉,全脂奶粉反而價格更高,有點出乎意料,多了工序價格卻還低了?當然品牌造成的影響也不可否認;高鈣奶粉價格相對來說中規中矩,貴一點的也不過500左右

4.銷售額前50分佈

在這裏插入圖片描述
這份數據中奶粉銷售額最高的可以達到1100w+,所以在網店中,奶粉的市場還是不小的
在這裏插入圖片描述
銷售額TOP50份樣本,43.3%的店鋪都爲天貓超市,旗艦店也佔有22.8%,所以可見大部分人買奶粉還是會到比較可靠的網店購買的;奶粉類型還是未知佔據最多,其次嬰幼兒奶粉佔比28.8%,而低脂奶粉和脫脂奶粉總佔比6.7%,這兩類奶粉會對健身人士、老年人及消化不良的嬰兒的人有些益處,所以銷售額也會相對較低

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章