本文的文字及圖片來源於網絡,僅供學習、交流使用,不具備任何商業用途,若有問題請及時聯繫咱們以做處理。nginx
如下文章來源於傑哥的IT之旅,做者:Cherich_sunweb
Python爬蟲、數據分析、網站開發等案例教程視頻免費在線觀看chrome
https://space.bilibili.com/523606542
今年不知道有多少小夥伴留在原地過年,雖然今年過年不能回老家,但這個年也得過,也得買年貨,給家人長輩送禮。因而我出於好奇心的想法利用爬蟲獲取某寶數據,並結合 Python 數據分析和第三方可視化平臺來分析一下你們過年都買了哪些東西瀏覽器
用 Python 的實現過程,對於本文的敘述,主要分爲如下五步:網絡
其實就今天的數據來說,咱們主要作的是探索性分析;首先梳理已有的字段,有標題(提取出品類)、價格、銷量、店鋪名、發貨地。下面來作一下詳細的維度拆分以及可視化圖形選擇:工具
品類:學習
價格:年貨的價格區間分佈狀況;(圓環圖,觀察佔比)字體
銷量、店鋪名:網站
發貨地:銷量最高的城市有哪些?(地圖)spa
爬取主要利用 selenium 模擬點擊瀏覽器,前提是已經安裝 selenium 和瀏覽器驅動,這裏我是用的 Google 瀏覽器,找到對應的版本號後並下載對應的版本驅動,必定要對應瀏覽器的版本號。
pip install selenium
安裝成功後,運行以下代碼,輸入關鍵字"年貨",進行掃碼就能夠了,等着程序慢慢採集。
# coding=utf8 import re from selenium.webdriver.chrome.options import Options from selenium import webdriver import time import csv # 搜索商品,獲取商品頁碼 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[@class="total"]').text # 須要注意的是:findall()返回的是一個列表,雖然此時只有一個元素它也是一個列表。 page = re.findall("(\d+)", page_info)[0] return page # 獲取數據 def get_data(): # 經過頁面分析發現:全部的信息都在items節點下 items = browser.find_elements_by_xpath('//div[@class="items"]/div[@class="item J_MouserOnverReq "]') for item in items: # 參數信息 pro_desc = item.find_element_by_xpath('.//div[@class="row row-2 title"]/a').text # 價格 pro_price = item.find_element_by_xpath('.//strong').text # 付款人數 buy_num = item.find_element_by_xpath('.//div[@class="deal-cnt"]').text # 旗艦店 shop = item.find_element_by_xpath('.//div[@class="shop"]/a').text # 發貨地 address = item.find_element_by_xpath('.//div[@class="location"]').text # print(pro_desc, pro_price, buy_num, shop, address) with open('{}.csv'.format(key_word), mode='a', newline='', encoding='utf-8-sig') as f: csv_writer = csv.writer(f, delimiter=',') csv_writer.writerow([pro_desc, pro_price, buy_num, shop, address]) def main(): browser.get('https://www.taobao.com/') page = search_product(key_word) print(page) get_data() page_num = 1 while int(page) != page_num: print("*" * 100) print("正在爬取第{}頁".format(page_num + 1)) browser.get('https://s.taobao.com/search?q={}&s={}'.format(key_word, page_num * 44)) browser.implicitly_wait(25) get_data() page_num += 1 print("數據爬取完畢!") if __name__ == '__main__': key_word = input("請輸入你要搜索的商品:") option = Options() browser = webdriver.Chrome(chrome_options=option, executable_path=r"C:\Users\cherich\AppData\Local\Google\Chrome\Application\chromedriver.exe") main()
採集結果以下:
數據準備完成,中間從標題裏提取類別過程比較耗時,建議你們直接用整理好的數據。
大概思路是對標題進行分詞,命名實體識別,標記出名詞,找出類別名稱,好比堅果、茶葉等。
這裏的文件清洗幾乎用 Excel 搞定,數據集小,用 Excel 效率很高,好比這裏作了一個價格區間。到如今數據清洗已經完成(能夠用三方工具作可視化了),若是你們愛折騰,能夠接着往下看用 Python 如何進行分析。
一、讀取文件
import pandas as pd import matplotlib as mpl mpl.rcParams['font.family'] = 'SimHei' from wordcloud import WordCloud from ast import literal_eval import matplotlib.pyplot as plt datas = pd.read_csv('./年貨.csv',encoding='gbk') datas
二、可視化:詞雲圖
li = [] for each in datas['關鍵詞'].values: new_list = str(each).split(',') li.extend(new_list) def func_pd(words): count_result = pd.Series(words).value_counts() return count_result.to_dict() frequencies = func_pd(li) frequencies.pop('其餘') plt.figure(figsize = (10,4),dpi=80) wordcloud = WordCloud(font_path="STSONG.TTF",background_color='white', width=700,height=350).fit_words(frequencies) plt.imshow(wordcloud) plt.axis("off") plt.show()
圖表說明:咱們能夠看到詞雲圖,熱門(出現次數最多)品類字體最大,依次是:堅果、茶葉、糕點等。
三、可視化:繪製圓環圖
# plt.pie(x,lables,autopct,shadow,startangle,colors,explode) food_type = datas.groupby('價格區間').size() plt.figure(figsize=(8,4),dpi=80) explodes= [0,0,0,0,0.2,0.1] size = 0.3 plt.pie(food_type, radius=1,labels=food_type.index, autopct='%.2f%%', colors=['#F4A460','#D2691E','#CDCD00','#FFD700','#EEE5DE'], wedgeprops=dict(width=size, edgecolor='w')) plt.title('年貨價格區間佔比狀況',fontsize=18) plt.legend(food_type.index,bbox_to_anchor=(1.5, 1.0)) plt.show()
圖表說明:圓環圖和餅圖相似,表明部分相對於總體的佔比狀況,能夠看到0 ~ 200元的年貨大概33%左右,100 ~ 200元也是33%。說明大部分的年貨的價格趨於200之內。
四、可視化:繪製條形圖
data = datas.groupby(by='店鋪名')['銷量'].sum().sort_values(ascending=False).head(10) plt.figure(figsize = (10,4),dpi=80) plt.ylabel('銷量') plt.title('年貨銷量前十名店鋪',fontsize=18) colors = ['#F4A460','#D2691E','#CDCD00','#EEE5DE', '#EEB4B4', '#FFA07A', '#FFD700'] plt.bar(data.index,data.values, color=colors) plt.xticks(rotation=45) plt.show()
圖表說明:以上是店鋪按銷量排名狀況,能夠看到第一名是三隻松鼠旗艦店,看來過年你們都喜歡吃乾貨。
五、可視化:繪製橫向條形圖
foods = datas.groupby(by='類別')['銷量'].sum().sort_values(ascending=False).head(10) foods.sort_values(ascending=True,inplace=True) plt.figure(figsize = (10,4),dpi=80) plt.xlabel('銷量') plt.title('年貨推薦購買排行榜',fontsize=18) colors = ['#F4A460','#D2691E','#CDCD00','#CD96CD','#EEE5DE', '#EEB4B4', '#FFA07A', '#FFD700'] plt.barh(foods.index,foods.values, color=colors,height=1) plt.show()
圖表說明:根據類別銷量排名,排名第一是堅果,驗證了上面的假設,你們喜歡吃堅果。
淘寶熱賣年貨: 堅果,茶葉,糕點,餅乾,糖果,白酒,核桃,羊肉,海蔘,枸杞;
年貨推薦清單(按銷量):堅果、零食、糕點、餅乾、茶葉、糖果、松子、紅棗、蛋糕、滷味、瓜子、牛奶、核桃;
年貨價格參考:66%以上的年貨價格在0~200元之間;
熱門店鋪:三隻松鼠、天貓超市、百草味、良品鋪子;