<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Scrapy爬取網(wǎng)易嚴(yán)選制作可視化大屏!

          共 4312字,需瀏覽 9分鐘

           ·

          2021-12-11 07:32

          ↑?關(guān)注 + 星標(biāo)?,每天學(xué)Python新技能

          后臺(tái)回復(fù)【大禮包】送你Python自學(xué)大禮包


          需求分析


          Iphone13出來(lái)了,但是Iphone12依然香啊!
          好不好,我們?nèi)ゾW(wǎng)易嚴(yán)選看看便知~~


          所以我們今天的目標(biāo)就是使用scrapy抓取網(wǎng)易嚴(yán)選Iphone12評(píng)論數(shù)據(jù),看看到底值不值得入手!

          scrapy項(xiàng)目創(chuàng)建如下:



          網(wǎng)頁(yè)分析


          找到網(wǎng)頁(yè)真實(shí)請(qǐng)求連接,可以看到數(shù)據(jù)實(shí)際上存儲(chǔ)在json格式數(shù)據(jù)集里面
          所以我們第一步必須先獲取到這一整個(gè)json數(shù)據(jù)集。



          為了防止被網(wǎng)站防爬,我們還需在setting.py加上ua,如下:


          我們使用瀏覽器打開(kāi)請(qǐng)求連接可以更加直觀的觀察數(shù)據(jù)格式。



          發(fā)送請(qǐng)求


          我們要此次要抓取的數(shù)據(jù)一共有7個(gè),分別如下所示:


          我們先在items中定義好我們要獲取的數(shù)據(jù)

          ????#?名稱
          ????name?=?scrapy.Field()

          ????#?等級(jí)
          ????level?=?scrapy.Field()

          ????#?評(píng)分
          ????star?=?scrapy.Field()

          ????#?時(shí)間
          ????rls_time?=?scrapy.Field()

          ????#?顏色
          ????color?=?scrapy.Field()

          ????#?內(nèi)存
          ????storage?=?scrapy.Field()

          ????#?評(píng)論
          ????content?=?scrapy.Field()

          剛才我們已經(jīng)成功分析出來(lái)要獲取的數(shù)據(jù)集合是一個(gè)json格式的,
          scrapy已經(jīng)幫我們請(qǐng)求好了,我們直接打印
          ic(response.json())


          瀏覽器成功響應(yīng)給我們信息,這樣看起來(lái)結(jié)構(gòu)一目了然。



          接下來(lái)我們要做的就是獲取json格式中的commentList信息,因?yàn)槲覀冃枰男畔⒍荚谶@個(gè)里面

          phone_list?=?phone_info['data']['commentList']

          #?打印所需信息
          for?phone?in?phone_list:

          ????#?名稱
          ????item['name']?=?phone['frontUserName']

          ????#?等級(jí)
          ????item['level']?=?phone['memberLevel']

          ????#?評(píng)分
          ????item['star']?=?phone['star']

          ????#?時(shí)間
          ????rls_time?=?phone['createTime']
          ????item['rls_time']?=?time.strftime('%Y-%m-%d?%H:%M:%S',?time.localtime(rls_time/1000)).split('?')[0]

          ????#?顏色
          ????item['color']?=?phone['skuInfo'][0].split(':')[1]

          ????#?內(nèi)存
          ????item['storage']?=?phone['skuInfo'][1].split(':')[1]
          ????
          ????#?評(píng)論
          ????item['content']?=?phone['content']
          ????
          ????yield?item

          數(shù)據(jù)成功獲取到,最后我們把它扔給Pipeline,讓他自己去下載好了
          你可以選擇自己想要保存的格式。




          數(shù)據(jù)保存


          我一般為了后續(xù)的數(shù)據(jù)分析和可視化專門寫了一個(gè)可以直接保存在excel的函數(shù),如下:

          class?ExcelPipeline:

          ??op.Workbook()
          ??self.wb.active
          ??ws.append(['用戶名稱',?'會(huì)員等級(jí)',?'手機(jī)評(píng)分',?'評(píng)論時(shí)間',?'手機(jī)顏色',?'手機(jī)內(nèi)存',?'評(píng)論'])

          ??self.wb.save('../網(wǎng)易.xlsx')
          ??print('網(wǎng)易數(shù)據(jù)成功保存!')

          直接運(yùn)行數(shù)據(jù)就會(huì)保存在我們本地啦!(部分?jǐn)?shù)據(jù)如下)




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


          我們?cè)诖耸褂胮andas對(duì)數(shù)據(jù)進(jìn)行讀取然后去重復(fù)和去除空值處理。

          隨機(jī)抽取五條數(shù)據(jù)展示如下:


          pd.set_option('display.max_columns',?None)???#?顯示完整的列
          pd.set_option('display.max_rows',?None)??#?顯示完整的行
          pd.set_option('display.expand_frame_repr',?False)??#?設(shè)置不折疊數(shù)據(jù)

          #?讀取數(shù)據(jù)
          rcv_data?=?pd.read_excel('../網(wǎng)易.xlsx')

          #?刪除重復(fù)記錄和缺失值
          rcv_data?=?rcv_data.drop_duplicates()
          rcv_data?=?rcv_data.dropna()

          #?抽樣展示
          print(rcv_data.sample(5))

          '''
          ??用戶名稱??會(huì)員等級(jí)??手機(jī)評(píng)分????????評(píng)論時(shí)間???手機(jī)顏色??手機(jī)內(nèi)存??????????????????????評(píng)論
          ??7????趙****豪?????5?????5??2021-03-05?????黑色??128G????????????????沒(méi)買2天又便宜了
          ??42???用****4?????5?????5??2021-06-23??返紅包黑色??128G????????????手機(jī)非常好用,老婆很喜歡
          ??268??獨(dú)****息?????6?????5??2021-06-04??返紅包綠色??256G?????????????發(fā)貨很快,第二天就到了
          ??144??1****5?????5?????5??2021-02-27?????黑色??128G?????????????????沒(méi)啥可說(shuō)的?好
          ??97???用****4?????5?????5??2021-06-05??返紅包白色??128G??發(fā)貨快,物流也給力,包裝保護(hù)的好,正品沒(méi)問(wèn)題
          '''


          詞云可視化


          詞云圖展示如下:看來(lái)Iphone12依舊還是很香的,雖然13出來(lái)了

          但是依舊值得入手!





          詞頻可視化


          我們提取網(wǎng)易手機(jī)評(píng)論前十大高頻詞匯如下:
          #?詞頻設(shè)置
          all_words?=?[word?for?word?in?result.split('?')?if?len(word)?>?1?and?word?not?in?stop_words]
          wordcount?=?Counter(all_words).most_common(10)

          '''
          ('非常',?'不錯(cuò)',?'手機(jī)',?'好好',?'很快',?'發(fā)貨',?'喜歡',?'正品',?'物流',?'速度')
          (65,?48,?45,?36,?32,?32,?31,?30,?29,?29)
          '''

          使用pyecharts繪制可視化大屏圖展示如下:




          評(píng)分可視化


          我們使用pandas提取手機(jī)評(píng)分?jǐn)?shù)據(jù)以及頻率,數(shù)據(jù)可視化展示如下:

          從圖中可以非常直觀的看出蘋果12的受歡迎程度。

          #?劃分價(jià)格區(qū)間
          rcv_data['手機(jī)評(píng)分']?=?pd.cut(rcv_data['手機(jī)評(píng)分'],?[0,?1,?2,?5],?labels=['差評(píng)',?'中評(píng)',?'好評(píng)'])

          #?統(tǒng)計(jì)數(shù)量
          stars?=?rcv_data['手機(jī)評(píng)分'].value_counts()
          stars1?=?stars.index.tolist()??#?人氣值分類
          stars2?=?stars.tolist()???#?人氣值分類對(duì)應(yīng)數(shù)量

          '''
          ['好評(píng)',?'差評(píng)',?'中評(píng)']
          [308,?9,?2]
          '''





          購(gòu)機(jī)時(shí)間可視化


          我們爬取的數(shù)據(jù)都是在2021年,接下來(lái)我們提取事件中的月份數(shù)據(jù),
          來(lái)看看大家普遍的下單時(shí)間集中在哪幾個(gè)月份?
          #?提取時(shí)間月份
          rcv_data['評(píng)論時(shí)間']?=?rcv_data['評(píng)論時(shí)間'].map(lambda?x:?x.split('-')[1])
          rcv_data['評(píng)論時(shí)間']?=?pd.cut(rcv_data['評(píng)論時(shí)間'],?['00',?'01',?'02',?'03',?'04',?'05',?'06',?'07',?'08',?'09'],?labels=['一月',?'二月',?'三月',?'四月',?'五月',?'六月',?'七月',?'八月',?'九月'])

          #?統(tǒng)計(jì)數(shù)量
          dates?=?rcv_data['評(píng)論時(shí)間'].value_counts()
          dates1?=?dates.index.tolist()??#?月份分類
          dates2?=?dates.tolist()??#?月份分類對(duì)應(yīng)數(shù)量

          '''
          ['六月',?'三月',?'四月',?'九月',?'二月',?'七月',?'一月',?'五月',?'八月']
          [95,?66,?34,?33,?22,?20,?18,?16,?15]
          '''


          從圖中可以很直觀的看到大家的下單日期大多集中在六月份

          年終獎(jiǎng)6月發(fā)嗎





          內(nèi)存大小可視化


          接下來(lái)我們對(duì)手機(jī)內(nèi)存進(jìn)行可視化分析,看看大家喜歡的內(nèi)存是多大?

          storage?=?rcv_data['手機(jī)內(nèi)存'].value_counts()
          storage1?=?storage.index.tolist()??#?內(nèi)存種類
          storage2?=?storage.tolist()??#?內(nèi)存種類對(duì)應(yīng)數(shù)量

          '''
          ['128G',?'256G',?'64G']
          [221,?81,?18]
          '''


          64太小,256浪費(fèi)

          128G才是真愛(ài)?。?/span>





          手機(jī)顏色可視化


          關(guān)于Iphone的顏色,哪一種最受歡迎呢?
          #?顏色分布
          rcv_datas?=?rcv_data[rcv_data['手機(jī)顏色'].str.len()==2]
          colors?=?rcv_datas['手機(jī)顏色'].value_counts()
          colors1?=?colors.index.tolist()??#?內(nèi)存種類
          colors2?=?colors.tolist()??#?內(nèi)存種類對(duì)應(yīng)數(shù)量

          '''
          ['白色',?'黑色',?'紅色',?'綠色',?'藍(lán)色',?'紫色']
          [73,?56,?31,?30,?23,?15]
          '''

          通過(guò)下圖看出,大眾選擇都是喜歡白色的
          相反紫色是最不容易撞衫的

          推薦閱讀

          1. 豆瓣評(píng)分 9.0,超 10 萬(wàn)開(kāi)發(fā)者的入門選擇,這本經(jīng)典好書終于升級(jí)啦!

          2. 臥槽!又來(lái)一個(gè)Python學(xué)習(xí)神器?。?!

          3. 剛剛!華為再次擴(kuò)招1000人!看到要求我傻眼了!

          4. 零代碼爬蟲神器 -- Web Scraper 的使用


          瀏覽 43
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  精品不卡一区二区三区 | 五月丁香婷婷六月 | 高清国产无码在线观看 | 欧美麻豆一区 | 要色综合 |