成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

爬取淘寶上4000條月餅數(shù)據(jù),制作了一個(gè)酷炫的可視化大屏!

cod7ce / 1443人閱讀

摘要:基于此,我爬取了淘寶上多條月餅的銷售數(shù)據(jù),為大家展示了一幅漂亮的可視化大屏,解決大家心目中的問題。模塊的安裝與配置這次爬取淘寶,采用的是最簡(jiǎn)單的方式控制瀏覽器進(jìn)行自動(dòng)化操作,中途只需要掃碼登陸一次,即可完成整個(gè)數(shù)據(jù)的爬取。

朋友們,一年一度的中秋悄然而至,為了響應(yīng)這次節(jié)日,特意寫了這篇文章,希望能和大家一起學(xué)習(xí)。

中秋節(jié)介紹

中秋節(jié),又稱祭月節(jié)、月光誕、月夕、秋節(jié)、仲秋節(jié)、拜月節(jié)、月娘節(jié)、月亮節(jié)、團(tuán)圓節(jié)等,是中國(guó)民間的傳統(tǒng)節(jié)日。

中秋節(jié)自古便有祭月、賞月、吃月餅、玩花燈、賞桂花、飲桂花酒等民俗,流傳至今,經(jīng)久不息。

每年中秋節(jié)到,總會(huì)去姥姥那里送中秋,并買上各種各樣的月餅,那個(gè)時(shí)候科技并不怎么發(fā)達(dá),不僅沒有這么多形形色色的月餅,也不知道哪些月餅賣得好? 月餅的價(jià)格分布是怎樣的呢? 什么地方的月餅銷量最高呢? 簡(jiǎn)直有十萬個(gè)為什么,希望別人給我們解答。

隨著科技的飛速發(fā)展,互聯(lián)網(wǎng)溝通了你我他。通過淘寶上月餅的銷量,就可以解決我們想要知道的好多問題?;诖耍遗廊×颂詫毶?000多條月餅的銷售數(shù)據(jù),為大家展示了一幅漂亮的可視化大屏,解決大家心目中的問題。

selenium模塊的安裝與配置

這次爬取淘寶,采用的是最簡(jiǎn)單的方式:Selenium控制Chrome瀏覽器進(jìn)行自動(dòng)化操作,中途只需要掃碼登陸一次,即可完成整個(gè)數(shù)據(jù)的爬取。

1)安裝selenium庫(kù)

pip install selenium

檢驗(yàn)是否安裝成功:

2)chromedriver驅(qū)動(dòng)的配置

配置chromedriver驅(qū)動(dòng),一定要注意“驅(qū)動(dòng)”和“谷歌瀏覽器”版本一定是要相匹配,否則不能使用。

① 檢查谷歌瀏覽器的版本

這里首先提供一個(gè)詳細(xì)的地址供大家查看:
https://jingyan.baidu.com/article/95c9d20d74a1e8ec4f756149.html
點(diǎn)擊“右上角三個(gè)點(diǎn)” --> 點(diǎn)擊“設(shè)置” --> 點(diǎn)擊 “關(guān)于chrome”,出現(xiàn)如下界面。

② 下載chromedriver驅(qū)動(dòng)

這里再次提供一個(gè)詳細(xì)的地址,供大家選擇各種版本驅(qū)動(dòng)程序:
http://chromedriver.storage.googleapis.com/index.html
從上面的圖中可以看出,谷歌瀏覽器的版本是【81.0.4044.138】,這里我們選擇的對(duì)應(yīng)版本的驅(qū)動(dòng),如下圖所示。

點(diǎn)進(jìn)該文件后,可以根據(jù)我們的操作系統(tǒng),選擇對(duì)應(yīng)的驅(qū)動(dòng)。

③ chromedriver驅(qū)動(dòng)的配置

解壓上述下載好的文件,并將解壓后我們得到的chromedriver.exe文件,需要放到python的安裝路徑下(和python.exe放在一起)。
首先,你可以查看你的python解釋器安裝在哪里!

然后,將chromedriver.exe放置和python.exe在一起。

3)檢驗(yàn)selenium是否可用

使用如下兩行代碼,如果谷歌瀏覽器成功被驅(qū)動(dòng)打開,證明上述安裝和配置沒問題。

from selenium import webdriverbrowser = webdriver.Chrome()

結(jié)果如下:

4)一個(gè)小案例展示selenium的操作效果

from selenium import webdriverimport time# 創(chuàng)建瀏覽器對(duì)象,該操作會(huì)自動(dòng)幫我們打開Google瀏覽器窗口browser = webdriver.Chrome()# 調(diào)用瀏覽器對(duì)象,向服務(wù)器發(fā)送請(qǐng)求。該操作會(huì)打開Google瀏覽器,并跳轉(zhuǎn)到“百度”首頁browser.get("https://www.baidu.com/")# 最大化窗口browser.maximize_window()# 定位“抗擊肺炎”鏈接內(nèi)容element = browser.find_element_by_link_text("抗擊肺炎")# 為了更好的展示這個(gè)效果,我們等待3秒鐘time.sleep(3)# 點(diǎn)擊上述鏈接element.click()# 我們?cè)僮尀g覽器停留3秒鐘后,再關(guān)閉瀏覽器time.sleep(3)# 操作會(huì)自動(dòng)關(guān)閉瀏覽器browser.close()"""效果這里就不展示了,大家自行下去嘗試!"""

爬蟲完整帶啊嗎

from selenium import webdriverimport timeimport csvimport re# 搜索商品,獲取商品頁碼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è)“頁碼”,獲取“共100頁這個(gè)文本”    page_info = browser.find_element_by_xpath("http://div[@class="total"]").text    # 需要注意的是:findall()返回的是一個(gè)列表,雖然此時(shí)只有一個(gè)元素它也是一個(gè)列表。    page = re.findall("(/d+)",page_info)[0]    return page# 獲取數(shù)據(jù)def get_data():    # 通過頁面分析發(fā)現(xiàn):所有的信息都在items節(jié)點(diǎn)下    items = browser.find_elements_by_xpath("http://div[@class="items"]/div[@class="item J_MouserOnverReq  "]")    for item in items:        # 參數(shù)信息        pro_desc = item.find_element_by_xpath(".//div[@class="row row-2 title"]/a").text        # 價(jià)格        pro_price = item.find_element_by_xpath(".//strong").text        # 付款人數(shù)        buy_num = item.find_element_by_xpath(".//div[@class="deal-cnt"]").text        # 旗艦店        shop = item.find_element_by_xpath(".//div[@class="shop"]/a").text        # 發(fā)貨地        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(15)        get_data()        page_num += 1    print("數(shù)據(jù)爬取完畢!")if __name__ == "__main__":    key_word = input("請(qǐng)輸入你要搜索的商品:")    browser = webdriver.Chrome()    main()

數(shù)據(jù)清洗

數(shù)據(jù)清洗很重要,這個(gè)對(duì)于我們后續(xù)做可視化展示,極其重要。因此我們需要根據(jù)后面要做的圖形,然后進(jìn)行對(duì)應(yīng)的進(jìn)行數(shù)據(jù)清洗。

爬取到的原始數(shù)據(jù)如下:

整個(gè)數(shù)據(jù)看上去算是比較干凈,但是還是有幾個(gè)地方指的我們處理一下。

  • 1.爬取到的原始數(shù)據(jù)沒有列名,我們需要添加一個(gè)新列名;
  • 2.整個(gè)爬蟲過程中,會(huì)出現(xiàn)重復(fù)數(shù)據(jù),我們需要提前去重處理;
  • 3.將購(gòu)買人數(shù)為空的記錄,替換成0人付款;
  • 4.將購(gòu)買人數(shù)轉(zhuǎn)換為銷量(注意部分單位為萬);
  • 5.刪除無發(fā)貨地址的商品,并提取其中的省份;
# 導(dǎo)包import pandas as pdimport numpy as npimport re# 導(dǎo)入爬取得到的數(shù)據(jù)df = pd.read_csv("月餅.csv", engine="python", encoding="utf-8-sig", header=None)df.columns = ["商品名", "價(jià)格", "付款人數(shù)", "店鋪", "發(fā)貨地址"]df.head(10)# 去除重復(fù)值print(df.shape)df.drop_duplicates(inplace=True)print(df.shape)# 處理購(gòu)買人數(shù)為空的記錄df["付款人數(shù)"] = df["付款人數(shù)"].replace(np.nan,"0人付款")# 提取數(shù)值df["num"] = [re.findall(r"(/d+/.{0,1}/d*)", i)[0] for i in df["付款人數(shù)"]]  # 提取數(shù)值df["num"] = df["num"].astype("float")  # 轉(zhuǎn)化數(shù)值型# 提取單位(萬)df["unit"] = ["".join(re.findall(r"(萬)", i)) for i in df["付款人數(shù)"]]  # 提取單位(萬)df["unit"] = df["unit"].apply(lambda x:10000 if x=="萬" else 1)# 計(jì)算銷量df["銷量"] = df["num"] * df["unit"]# 刪除無發(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.to_csv("清洗完成數(shù)據(jù).csv",encoding="gbk")

看看清洗后的數(shù)據(jù):

數(shù)據(jù)可視化

可視化是整個(gè)文章的亮點(diǎn)所在,所謂“字不如表、表不如圖”。整個(gè)可視化大屏我們基于以下五個(gè)問題開展而來。

  • 1.月餅銷量Top10的柱形圖;
  • 2.店鋪月餅銷量Top10的柱形圖;
  • 3.全國(guó)月餅銷量的地域分布地圖;
  • 4.不同價(jià)格區(qū)間的月餅銷量圓環(huán)圖;
  • 5.月餅銷售關(guān)鍵字的詞云圖;

1)月餅銷量Top10的柱形圖

# 導(dǎo)入包from pyecharts.charts import Barfrom pyecharts import options as opts # 計(jì)算top10店鋪shop_top10 = df.groupby("商品名")["銷量"].sum().sort_values(ascending=False).head(10)# 繪制柱形圖bar0 = Bar(init_opts=opts.InitOpts(width="750px", height="350px")) bar0.add_xaxis(shop_top10.index.tolist())bar0.add_yaxis("sales_num", shop_top10.values.tolist()) bar0.set_global_opts(title_opts=opts.TitleOpts(title="月餅商品銷量Top10"),                     xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-30))) #bar0.render("月餅商品銷量Top10.html")bar0.render_notebook()

結(jié)果如下:

2)店鋪月餅銷量Top10的柱形圖

# 導(dǎo)入包from pyecharts.charts import Barfrom pyecharts import options as opts # 計(jì)算top10店鋪shop_top10 = df.groupby("店鋪")["銷量"].sum().sort_values(ascending=False).head(10)# 繪制柱形圖bar1 = Bar(init_opts=opts.InitOpts(width="750px", height="350px")) bar1.add_xaxis(shop_top10.index.tolist())bar1.add_yaxis("sales_num", shop_top10.values.tolist()) bar1.set_global_opts(title_opts=opts.TitleOpts(title="月餅店鋪銷量Top10"),                     xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-30))) #bar1.render("月餅店鋪銷量Top10.html")bar1.render_notebook()

結(jié)果如下:

3)全國(guó)月餅銷量的地域分布地圖

from pyecharts.charts import Map # 計(jì)算銷量province_num = df.groupby("省份")["銷量"].sum().sort_values(ascending=False) # 繪制地圖map1 = Map(init_opts=opts.InitOpts(width="750px", height="350px"))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)                    )#map1.render("各省份月餅銷量分布.html")map1.render_notebook()

結(jié)果如下:

4)不同價(jià)格區(qū)間的月餅銷量圓環(huán)圖

from pyecharts.charts import Piedef 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元以上"df["price_range"] = df["價(jià)格"].apply(lambda x: price_range(x)) price_cut_num = df.groupby("price_range")["銷量"].sum() data_pair = [list(z) for z in zip(price_cut_num.index, price_cut_num.values)]print(data_pair)# 餅圖pie1 = Pie(init_opts=opts.InitOpts(width="750px", height="350px"))# 內(nèi)置富文本pie1.add(         series_name="銷量",        radius=["35%", "55%"],        data_pair=data_pair,        label_opts=opts.LabelOpts(formatter="{—占比qoyqs8suu2u%}"),)pie1.set_global_opts(legend_opts=opts.LegendOpts(pos_left="left", pos_top="30%", orient="vertical"),                      title_opts=opts.TitleOpts(title="不同價(jià)格區(qū)間的月餅銷量占比"))#pie1.render("不同價(jià)格區(qū)間的月餅銷量占比.html")pie1.render_notebook()

結(jié)果如下:

5)月餅銷售關(guān)鍵字的詞云圖

import jiebaimport jieba.analysetxt = df["商品名"].str.cat(sep="。")# 添加關(guān)鍵詞jieba.add_word("粽子", 999, "五芳齋")# 讀入停用詞表stop_words = []with open("stop_words.txt", "r", encoding="utf-8") as f:    lines = f.readlines()    for line in lines:        stop_words.append(line.strip())# 添加停用詞stop_words.extend(["logo", "10", "100", "200g", "100g", "140g", "130g", "月餅", "禮盒裝"])  # 評(píng)論字段分詞處理word_num = jieba.analyse.extract_tags(txt,                                      topK=100,                                      withWeight=True,                                      allowPOS=())# 去停用詞word_num_selected = []for i in word_num:    if i[0] not in stop_words:        word_num_selected.append(i)key_words = pd.DataFrame(word_num_selected, columns=["words","num"])

結(jié)果如下:

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/119079.html

相關(guān)文章

  • SVG

    摘要:目前只提供了一些基礎(chǔ)功能。中與的區(qū)別開發(fā)者第一次接觸手寫那種,雖然很多情況都有設(shè)計(jì)師使用來完成這項(xiàng)工作,但還是不排除需要利用到的每個(gè)元素。輕量級(jí),具備靈活的來自團(tuán)隊(duì),全球非常出名的可視化團(tuán)隊(duì)。于是筆者嘗試著把移植到中。 使用SVG + CSS實(shí)現(xiàn)動(dòng)態(tài)霓虹燈文字效果 早上無意間進(jìn)入一個(gè)網(wǎng)站,看到他們的LOGO效果略屌,如圖: 剛開始以為是gif動(dòng)畫之類的,審查元素發(fā)現(xiàn)居然是用SVG + ...

    104828720 評(píng)論0 收藏0
  • 首次公開,整理12年積累的博客收藏夾,零距離展示《收藏夾吃灰》系列博客

    摘要:時(shí)間永遠(yuǎn)都過得那么快,一晃從年注冊(cè),到現(xiàn)在已經(jīng)過去了年那些被我藏在收藏夾吃灰的文章,已經(jīng)太多了,是時(shí)候把他們整理一下了。那是因?yàn)槭詹貖A太亂,橡皮擦給設(shè)置私密了,不收拾不好看呀。 ...

    Harriet666 評(píng)論0 收藏0
  • 女友忽然欲買文胸,但不知何色更美,Python解之【全程實(shí)戰(zhàn),議藏之】

    摘要:文章目錄情景再現(xiàn)本文關(guān)鍵詞挑個(gè)軟柿子單頁爬取數(shù)據(jù)處理翻頁操作擼代碼主調(diào)度函數(shù)頁面抓取函數(shù)解析保存函數(shù)可視化顏色分布評(píng)價(jià)詞云圖源碼獲取方式情景再現(xiàn)今日天氣尚好,女友忽然欲買文胸,但不知何色更美,遂命吾剖析何色買者益眾,為點(diǎn)議,事后而獎(jiǎng)勵(lì)之。 ...

    寵來也 評(píng)論0 收藏0
  • 中秋節(jié),哪種月餅比較好?

    摘要:可以看到在元的月餅銷量是反常的,說明這個(gè)價(jià)格比較受人們歡迎。高檔的月餅在臨近中秋節(jié)會(huì)買的越來越好,這符合人們的消費(fèi)習(xí)慣。下一步重點(diǎn)研究買的好的店鋪,天貓超市與稻香村食品旗艦店,票券票務(wù)十年老店主要是賣月餅劵,后面會(huì)說到。 造數(shù)帶你選月餅,點(diǎn)擊這里,過節(jié)再也不擔(dān)憂 showImg(https://segmentfault.com/img/remote/1460000011412184);...

    leeon 評(píng)論0 收藏0
  • 「碼個(gè)蛋」2017年200篇精選干貨集合

    摘要:讓你收獲滿滿碼個(gè)蛋從年月日推送第篇文章一年過去了已累積推文近篇文章,本文為年度精選,共計(jì)篇,按照類別整理便于讀者主題閱讀。本篇文章是今年的最后一篇技術(shù)文章,為了讓大家在家也能好好學(xué)習(xí),特此花了幾個(gè)小時(shí)整理了這些文章。 showImg(https://segmentfault.com/img/remote/1460000013241596); 讓你收獲滿滿! 碼個(gè)蛋從2017年02月20...

    wangtdgoodluck 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

cod7ce

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<