前言
本文的文字及圖片來源于網路,僅供學習、交流使用,不具有任何商業用途,著作權歸原作者所有,如有問題請及時聯系我們以作處理,
爬蟲
爬取淘寶資料,本次采用的方法是:Selenium控制Chrome瀏覽器自動化操作,其實我們還可以利用Ajax介面來構造鏈接,但是非常繁瑣(包含加密密鑰等),直接使用Selenium來模擬瀏覽器會省去很多事情;
最常見的問題是chromedriver驅動與谷歌瀏覽器的版本不匹配,很容易就可以解決,接下來,我們就開始利用selenium抓取淘寶商品,并使用Xpath決議得到商品名、價格、付款人數、店鋪名、發貨地址資訊,最后將資料保存在本地,
爬蟲程序如下圖:
selenium自動化爬取(需要淘寶掃描登錄一次)
from selenium import webdriver # 搜索商品,獲取商品頁碼 def search_product(key_word): # 定位輸入框 browser.find_element_by_id("q").send_keys(key_word) # 定義點擊按鈕,并點擊 browser.find_element_by_class_name('btn-search').click() # 最大化視窗:為了方便我們掃碼 browser.maximize_window() # 等待15秒,給足時間我們掃碼 time.sleep(15) # 定位這個“頁碼”,獲取“共100頁這個文本” page_info = browser.find_element_by_xpath('//div[@]').text # 需要注意的是:findall()回傳的是一個串列,雖然此時只有一個元素它也是一個串列, page = re.findall("(\d+)",page_info)[0] return page
詳細爬蟲代碼下載見文末,
資料整理
此時我們爬取得到的資料:
整理前的資料
資料還是比較粗糙的,有幾個問題需要我們去處理:
- 添加列名
- 去除重復資料(翻頁爬取程序中會有重復)
- 購買人數為空的記錄,替換成0人付款
- 將購買人數轉換為銷量(注意部分單位為萬)
- 洗掉無發貨地址的商品,并提取其中的省份
部分代碼:
# 洗掉無發貨地址的商品,并提取省份 df = df[df['發貨地址'].notna()] df['省份'] = df['發貨地址'].str.split(' ').apply(lambda x:x[0]) # 洗掉多余的列 df.drop(['付款人數', '發貨地址', 'num', 'unit'], axis=1, inplace=True) # 重置索引 df = df.reset_index(drop=True) df.head(10)
整理后的資料
這樣我們就對資料完成了清洗與整理,方便下一步進行可視化,
順便做個排序,看看什么粽子最貴!
df1 = df.sort_values(by="價格", axis=0, ascending=False) df1.iloc[:5,:]
價格TOP5的粽子
前三名都來自御茶膳房旗艦店,讓我們看看1780元的粽子長啥樣吧!
想嘗嘗
資料可視化
本文我們打算用pyecharts進行可視化展示,有同學可能使用的是老版本(0.5X),Pyecharts的1.x版本與老版本(0.5X)不兼容,如果無法匯入可能是這個問題哈,
可視化所有陳述句均基于v1.7.1,通過以下陳述句可查詢你的pyecharts版本:
import pyecharts
print(pyecharts.__version__)
扇形圖
最貴的粽子1780元看來是吃不起了,那大家都買什么價位的呢?
先按照淘寶推薦的區間劃分一下:
def price_range(x): #按照淘寶推薦劃分價格區間 if x <= 22: return '22元以下' elif x <= 115: return '22-115元' elif x <= 633: return '115-633元' else: return '633元以上'
再使用pyecharts來生成不同價格區間的粽子銷量占比圖,
不同價格區間的粽子銷量占比
看來百元以內的粽子(禮盒裝)才是大家的正常承受范圍,不過我還是選擇小區門口的5塊錢3個,
詞云圖
我們用jieba對爬取得到的商品名稱分詞,生成詞云,
from pyecharts.charts import WordCloud from pyecharts.globals import SymbolType # 詞云圖 word1 = WordCloud(init_opts=opts.InitOpts(width='1350px', height='750px')) word1.add("", [*zip(key_words.words, key_words.num)], word_size_range=[20, 200], shape=SymbolType.DIAMOND) word1.set_global_opts(title_opts=opts.TitleOpts('粽子商品名稱詞云圖'), toolbox_opts=opts.ToolboxOpts()) word1.render("粽子商品名稱詞云圖.html")
粽子商品名稱詞云圖
碩大的粽子周圍環繞著幾個突出的關鍵詞:禮盒裝、鮮肉、蛋黃、嘉興、豆沙、端午節,除去端午節相關的詞匯,我們通過關鍵詞大小似乎就知道幾種口味的受歡迎情況,
查閱資料對比一下,還真是大體一致,
心疼我棗粽,
至于嘉興這個地名,我們后文會繼續提到,
條形圖
上文我們查到了最貴的粽子,那么銷量最好的粽子/店鋪是什么呢?
安排
粽子商品銷量Top10
五芳齋共4款入圍,其中一款禮盒裝達到了100萬+的銷量,應該比這個還多(參見微信的10w+),真真老老緊隨其后,3款粽子進入TOP10,其余的品牌還有稻香村和知味觀,額,第九名是賣粽葉的,看來自己包粽子的需求也是蠻大的嘛,
粽子店鋪銷量Top10
粽子店鋪銷量Top10其實與商品相似,五芳齋官方旗艦店和真真老老旗艦店占據首位,遙遙領先,
經過查閱,五芳齋,真真老老,都為嘉興的粽子兩大品牌,那難怪嘉興在詞云圖里那么突出,嘉興屬于浙江省,銷量冠亞軍都在這里,那浙江豈不是占比很大,
地圖
繼續使用pyecharts來生成各省份粽子銷量分布圖
from pyecharts.charts import Map # 計算銷量 province_num = df.groupby('省份')['銷量'].sum().sort_values(ascending=False) # 繪制地圖 map1 = Map(init_opts=opts.InitOpts(width='1350px', height='750px')) map1.add("", [list(z) for z in zip(province_num.index.tolist(), province_num.values.tolist())], maptype='china' ) map1.set_global_opts(title_opts=opts.TitleOpts(title='各省份粽子銷量分布'), visualmap_opts=opts.VisualMapOpts(max_=300000), toolbox_opts=opts.ToolboxOpts() ) map1.render("各省份粽子銷量分布.html")
各省份粽子銷量分布
這個銷量占比差異真的是太大了,
可以說中國粽子看浙江,浙江粽子看嘉興[3](通過計算發貨地址為浙江的粽子銷量占比70.6%,而嘉興占浙江的87.4%)
紀錄片《舌尖上的中國》里的嘉興粽
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/115642.html
標籤:Python
