您好,登錄后才能下訂單哦!
這篇文章將為大家詳細(xì)講解有關(guān)怎么用Python爬取淘寶上的粽子數(shù)據(jù)并進(jìn)行分析,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。
爬取淘寶數(shù)據(jù),本次采用的方法是:Selenium控制Chrome瀏覽器自動(dòng)化操作。其實(shí)我們還可以利用Ajax接口來構(gòu)造鏈接,但是非常繁瑣(包含加密密鑰等),直接使用Selenium來模擬瀏覽器會(huì)省去很多事情;
最常見的問題是chromedriver驅(qū)動(dòng)與谷歌瀏覽器的版本不匹配,很容易就可以解決。接下來,我們就開始利用selenium抓取淘寶商品,并使用Xpath解析得到商品名、價(jià)格、付款人數(shù)、店鋪名、發(fā)貨地址信息,最后將數(shù)據(jù)保存在本地。
爬蟲過程如下圖:
selenium自動(dòng)化爬?。ㄐ枰詫殥呙璧卿浺淮危?/p>
from selenium import webdriver # 搜索商品,獲取商品頁(yè)碼 def search_product(key_word): # 定位輸入框 browser.find_element_by_id("q").send_keys(key_word) # 定義點(diǎn)擊按鈕,并點(diǎn)擊 browser.find_element_by_class_name('btn-search').click() # 最大化窗口:為了方便我們掃碼 browser.maximize_window() # 等待15秒,給足時(shí)間我們掃碼 time.sleep(15) # 定位這個(gè)“頁(yè)碼”,獲取“共100頁(yè)這個(gè)文本” page_info = browser.find_element_by_xpath('//div[@class="total"]').text # 需要注意的是:findall()返回的是一個(gè)列表,雖然此時(shí)只有一個(gè)元素它也是一個(gè)列表。 page = re.findall("(\d+)",page_info)[0] return page
詳細(xì)爬蟲代碼下載見文末。
此時(shí)我們爬取得到的數(shù)據(jù):
整理前的數(shù)據(jù)
數(shù)據(jù)還是比較粗糙的,有幾個(gè)問題需要我們?nèi)ヌ幚恚?/p>
添加列名
去除重復(fù)數(shù)據(jù)(翻頁(yè)爬取過程中會(huì)有重復(fù))
購(gòu)買人數(shù)為空的記錄,替換成0人付款
將購(gòu)買人數(shù)轉(zhuǎn)換為銷量(注意部分單位為萬)
刪除無發(fā)貨地址的商品,并提取其中的省份
部分代碼:
# 刪除無發(fā)貨地址的商品,并提取省份 df = df[df['發(fā)貨地址'].notna()] df['省份'] = df['發(fā)貨地址'].str.split(' ').apply(lambda x:x[0]) # 刪除多余的列 df.drop(['付款人數(shù)', '發(fā)貨地址', 'num', 'unit'], axis=1, inplace=True) # 重置索引 df = df.reset_index(drop=True) df.head(10)
整理后的數(shù)據(jù)
這樣我們就對(duì)數(shù)據(jù)完成了清洗與整理,方便下一步進(jìn)行可視化。
順便做個(gè)排序,看看什么粽子最貴!
df1 = df.sort_values(by="價(jià)格", axis=0, ascending=False) df1.iloc[:5,:]
想嘗嘗
本文我們打算用pyecharts進(jìn)行可視化展示。有同學(xué)可能使用的是老版本(0.5X),Pyecharts的1.x版本與老版本(0.5X)不兼容,如果無法導(dǎo)入可能是這個(gè)問題哈。
可視化所有語(yǔ)句均基于v1.7.1,通過以下語(yǔ)句可查詢你的pyecharts版本:
import pyecharts print(pyecharts.__version__)
扇形圖
最貴的粽子1780元看來是吃不起了,那大家都買什么價(jià)位的呢?
先按照淘寶推薦的區(qū)間劃分一下:
def price_range(x): #按照淘寶推薦劃分價(jià)格區(qū)間 if x <= 22: return '22元以下' elif x <= 115: return '22-115元' elif x <= 633: return '115-633元' else: return '633元以上'
再使用pyecharts來生成不同價(jià)格區(qū)間的粽子銷量占比圖。
不同價(jià)格區(qū)間的粽子銷量占比
看來百元以內(nèi)的粽子(禮盒裝)才是大家的正常承受范圍,不過我還是選擇小區(qū)門口的5塊錢3個(gè)。
詞云圖
我們用jieba對(duì)爬取得到的商品名稱分詞,生成詞云。
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")
粽子商品名稱詞云圖
碩大的粽子周圍環(huán)繞著幾個(gè)突出的關(guān)鍵詞:禮盒裝、鮮肉、蛋黃、嘉興、豆沙、端午節(jié)。除去端午節(jié)相關(guān)的詞匯,我們通過關(guān)鍵詞大小似乎就知道幾種口味的受歡迎情況。
查閱資料對(duì)比一下,還真是大體一致。
心疼我棗粽。
至于嘉興這個(gè)地名,我們后文會(huì)繼續(xù)提到。
粽子商品銷量Top10
五芳齋共4款入圍,其中一款禮盒裝達(dá)到了100萬+的銷量,應(yīng)該比這個(gè)還多(參見微信的10w+)。真真老老緊隨其后,3款粽子進(jìn)入TOP10。其余的品牌還有稻香村和知味觀,額,第九名是賣粽葉的,看來自己包粽子的需求也是蠻大的嘛。
粽子店鋪銷量Top10
粽子店鋪銷量Top10其實(shí)與商品相似,五芳齋官方旗艦店和真真老老旗艦店占據(jù)首位,遙遙領(lǐng)先。
經(jīng)過查閱,五芳齋,真真老老,都為嘉興的粽子兩大品牌,那難怪嘉興在詞云圖里那么突出。嘉興屬于浙江省,銷量冠亞軍都在這里,那浙江豈不是占比很大。
繼續(xù)使用pyecharts來生成各省份粽子銷量分布圖
from pyecharts.charts import Map # 計(jì)算銷量 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")
各省份粽子銷量分布
這個(gè)銷量占比差異真的是太大了。
可以說中國(guó)粽子看浙江,浙江粽子看嘉興[3](通過計(jì)算發(fā)貨地址為浙江的粽子銷量占比70.6%,而嘉興占浙江的87.4%)
關(guān)于怎么用Python爬取淘寶上的粽子數(shù)據(jù)并進(jìn)行分析就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。