<ul id="qxxfc"><fieldset id="qxxfc"><tr id="qxxfc"></tr></fieldset></ul>


      前段時間為“周杰倫打榜”話題迅速登上微博熱搜榜
      因為cxk的粉絲們質(zhì)疑周杰倫微博沒有數(shù)據(jù)
      (周杰倫沒有開通微博)
      于是,無數(shù)隱匿江湖多年
      看不下去的周杰倫老年粉開始被迫營業(yè)

      于是一場周杰倫中老年粉VS蔡徐坤鐵軍
      微博打榜大戰(zhàn)拉響
      為聽了那么多年的周杰倫
      粉絲們紛紛拉下老臉
      和00后的微博飯圈小年輕們
      從零學(xué)習(xí)如何做數(shù)據(jù)


      一、需求背景

      iKun們都說周杰倫的粉絲是夕陽紅老年團

      今天我們就用他們說的數(shù)據(jù),來實力打臉,讓iKun們看看周杰倫的粉絲們到底是不是中老年粉!

      二、功能描述

      用爬蟲爬取#周杰倫超話#下的微博,然后再爬取他們的個人主頁信息,獲取年齡、地區(qū)、性別等信息,然后用數(shù)據(jù)分析,再可視化呈現(xiàn)!


      注意:文中說的微博個人主頁信息均為微博公開信息,不包含任何隱私信息,同時全文中將不會出現(xiàn)任何人的個人信息,信息僅用于學(xué)習(xí)分析,任何人不得使用此教程用作商用,違者后果自付!

      三、技術(shù)方案

      我們大概分解下技術(shù)步驟,以及使用的技術(shù)

      * 爬取#周杰倫超話#下的微博
      * 根據(jù)每條微博爬取該用戶基本信息
      * 將信息保存到csv文件
      * 使用數(shù)據(jù)分析用戶年齡、性別分布
      * 分析粉絲團的地區(qū)分布
      * 使用詞云分析打榜微博內(nèi)容
      爬取數(shù)據(jù)我們可以使用requests庫,保存csv文件我們可以使用內(nèi)置庫csv,而可視化數(shù)據(jù)分析這次給大家介紹一個超級好用的庫pyecharts
      ,技術(shù)選型好了之后我們就可以開始技術(shù)實現(xiàn)了!

      四、爬取超話微博

      1.找到超話加載數(shù)據(jù)URL

      我們在谷歌瀏覽器(chrome)中找到#周杰倫超話#頁面,然后調(diào)出調(diào)試窗口,改為手機模式,然后過濾請求,只查看異步請求,查看返回數(shù)據(jù)格式,找到微博內(nèi)容所在!

      微博請求鏈接:
      https://m.weibo.cn/api/container/getIndex?jumpfrom=weibocom&containerid=1008087a8941058aaf4df5147042ce104568da_-_feed

      <https://m.weibo.cn/api/container/getIndex?jumpfrom=weibocom&containerid=1008087a8941058aaf4df5147042ce104568da_-_feed>

      2.代碼模擬請求數(shù)據(jù)

      拿到鏈接我們就可以模擬請求,這里我們還是使用我們熟悉的requests庫。簡單幾句便可以獲取微博!


      3.提取微博內(nèi)容

      我們可以看到返回的數(shù)據(jù)是一個json格式的,我們一層一層尋找,就可以找到微博內(nèi)容、用戶id所在!

      了解微博返回的數(shù)據(jù)結(jié)構(gòu)之后我們就可以將微博內(nèi)容和id提取出來啦!


      4.批量爬取微博

      在我們提取一條微博之后,我們便可以批量爬取微博啦,如何批量?當(dāng)然是要分頁了?那如何分頁,這里豬哥再教大家一遍尋找分頁參數(shù)技巧:

      查找分頁參數(shù)技巧:比較第一次和第二次請求url,看看有何不同,找出不同的參數(shù)!給大家推薦一款文本比較工具:Beyond Compare

      比較兩次請求的URL發(fā)現(xiàn),第二次比第一次請求鏈接中多了一個:since_id參數(shù),而這個since_id參數(shù)就是每條微博的id!


      微博分頁機制:根據(jù)時間分頁,每一條微博都有一個since_id,時間越大的since_id越大所以在請求時將since_id傳入,則會加載對應(yīng)話題下比此since_id小的微博,然后又重新獲取最小since_id將最小since_id傳入,依次請求,這樣便實現(xiàn)分頁

      了解微博分頁機制之后,我們就可以制定我們的分頁策略:我們將上一次請求返回的微博中最小的since_id作為下次請求的參數(shù),這樣就等于根據(jù)時間倒序分頁抓取數(shù)據(jù)!


      然后寫一個for循環(huán)調(diào)用上面那個方法就可以啦
      # 批量爬取 for i in range(1000): print('第%d頁' % (i + 1)) spider_topic()
      四、爬取用戶信息

      批量爬取微博搞定之后,我們就可以開始爬取用戶信息啦!

      首先我們得了解,用戶基本信息頁面的鏈接為:https://weibo.cn/用戶id/info,我們以某**喜歡唱、跳、rap還有籃球**的同學(xué)主頁為例子!
      <https://weibo.cn/用戶id/info,我們以某**喜歡唱、跳、rap還有籃球**的同學(xué)主頁為例子!>

      所以我們只要獲取到用戶的id就可以拿到他的公開基本信息!

      1.獲取用戶id

      回顧我們之前分析的微博數(shù)據(jù)格式,發(fā)現(xiàn)其中便有我們需要的用戶id!

      所以我們在提取微博內(nèi)容的時候可以順便將用戶id提取出來!


      2.模擬登錄

      我們獲取到用戶id之后,只要請求https://weibo.cn/用戶id/info <https://weibo.cn/用戶id/info>
      這個url就可以獲取公開信息了,但是查看別人用戶主頁是需要登錄的,那我們就先用代碼模擬登錄!

      我們之前爬取豆瓣 <https://blog.csdn.net/u014044812/article/details/96484905>
      的時候,已經(jīng)教過大家如何模擬登錄了,這里就直接放出代碼!

      登錄我們使用的是requests.Session()對象,這個對象會自動保存cookies,下次請求自動帶上cookies!

      3.爬取用戶公開信息

      拿到用戶id又登錄之后,就可以開始爬取用戶公開信息啦!

      這里公開信息我們只要:用戶名、性別、地區(qū)、生日這些數(shù)據(jù)!所以我們需要將這幾個數(shù)據(jù)提取出來!

      爬取用戶信息不能過于頻繁,否則會出現(xiàn)請求失敗(響應(yīng)狀態(tài)碼=418),但是不會封你的ip,其實很多大廠
      不太會輕易的封ip,太容易誤傷了,也許一封就是一個小區(qū)甚至更大!

      五、保存csv文件

      微博信息拿到了、用戶信息也拿到了,那我們就把這些數(shù)據(jù)保存起來,方便后面做數(shù)據(jù)分析!

      我們之前一直是保存txt格式的,因為之前都是只有一項數(shù)據(jù),而這次是多項數(shù)據(jù)(微博內(nèi)容、用戶名、地區(qū)、年齡、性別等),所以選擇CSV(Comma
      Separated Values逗號分隔值)格式的文件!

      我們生成一個列表,然后將數(shù)據(jù)按順序放入,再寫入csv文件!


      看看生成的csv文件,注意csv如果用wps或excel打開可能會亂碼,因為我們寫入文件用utf-8編碼,而wps或excel只能打開gbk編碼的文件,你可以用一般的文本編輯器即可,pycharm也可以!


      六、數(shù)據(jù)分析

      數(shù)據(jù)保存下來之后我們就可以進行數(shù)據(jù)分析了,首先我們要知道我們需要分析哪些數(shù)據(jù)?

      * 我們可以將性別數(shù)據(jù)做生成餅圖,簡單直觀
      * 將年齡數(shù)據(jù)作出柱狀圖,方便對比,看看到底是不是夕陽紅老年團
      * 將地區(qū)做成中國熱力圖,看看哪個地區(qū)粉絲最活躍
      * 最后將微博內(nèi)容做成詞云圖,直觀了解大家在說啥
      1.讀取csv文件列

      因為我們保存的數(shù)據(jù)格式為:’用戶id’, ‘用戶名’, ‘性別’, ‘地區(qū)’, ‘生日’, ‘微博id’,
      ‘微博內(nèi)容’,的很多行,而現(xiàn)在做數(shù)據(jù)分析需要獲取指定的某一列,比如:性別列,所以我們需要封裝一個方法用來讀取指定的列!

      這里豬哥還使用了Counter類來統(tǒng)計詞頻,方便后面數(shù)據(jù)分析,他返回的格式為:{‘女’: 1062, ‘男’: 637}。

      2.可視化庫pyecharts

      在我們分析之前,有一件很重要的事情,那就是選擇一個合適可視化庫!大家都知道Python可視化庫非常多,之前我們一直在用matplotlib庫
      做詞云,matplotlib做一些簡單的繪圖非常方便。但是今天我們需要做一個全國分布圖,所以經(jīng)過豬哥對比篩選,選擇了國人開發(fā)的pyecharts庫
      。選擇這個庫的理由是:開源免費、文檔詳細、圖形豐富、代碼簡介,用著就是一個字:爽!

      * 官網(wǎng):https://pyecharts.org/#/ <https://pyecharts.org/#/>
      * 源碼:https://github.com/pyecharts/pyecharts
      <https://github.com/pyecharts/pyecharts>
      * 安裝:pip install pyecharts
      po一張他們的官方文檔圖片

      這里有非常詳細的例子,直接復(fù)制過來就可以運行得到圖片!


      3.分析性別

      選擇了可視化庫之后,我們就來使用吧!

      這里說下為什么生成的是html?因為這是動態(tài)圖,就是可以點擊選擇顯示的,非常人性化!執(zhí)行之后會生成一個gender.html文件,在瀏覽器打開就可以!


      效果圖中可以看到,在打榜的粉絲中女性多于男性,女性占比大概為62%!

      4.分析年齡

      這一項是大家比較關(guān)心的,真的是夕陽紅粉絲團嗎?


      上圖中我們發(fā)現(xiàn)為周杰倫打榜的主力軍為:90后!

      5.地區(qū)分析

      下面我們來看看打榜粉絲全國各省的分布情況!

      上圖中我們可以看到打榜最多的三個?。ㄖ陛犑校┮来螢椋簭V州、北京、上海!

      6.打榜內(nèi)容分析

      我們來看看這些打榜的粉絲們都在說什么!

      上圖分析出現(xiàn)一些有趣的詞:營業(yè)、老年人、奶茶!

      看來打榜粉絲們都自認(rèn)為自己是老年人,哈哈哈!


      七、總結(jié)

      從結(jié)果來講為周杰倫打榜的粉絲主力軍還是80、90后,畢竟曾經(jīng)的青春啊,而且女生要比男生多,打榜粉絲最多的地區(qū)為廣東!

      從技術(shù)分析今天這個例子有不少的新東西,了解新浪微博分頁機制、爬取用戶公開信息、使用csv庫保存文件、使用pyecharts做數(shù)據(jù)可視化!

      當(dāng)然中間遇到了很多問題,只有自己親自嘗試才會知道,豬哥已經(jīng)把源碼放在github(
      https://github.com/pig6/sina_topic_spider
      <https://github.com/pig6/sina_topic_spider> 或點擊 閱讀原文)中,感興趣的同學(xué)記得轉(zhuǎn)發(fā)收藏有時間的時候嘗嘗鮮!
      ?

      友情鏈接
      ioDraw流程圖
      API參考文檔
      OK工具箱
      云服務(wù)器優(yōu)惠
      阿里云優(yōu)惠券
      騰訊云優(yōu)惠券
      京東云優(yōu)惠券
      站點信息
      問題反饋
      郵箱:[email protected]
      QQ群:637538335
      關(guān)注微信

        <ul id="qxxfc"><fieldset id="qxxfc"><tr id="qxxfc"></tr></fieldset></ul>
          中文字幕视频一区 | 欧美女人啪啪 | 黄色小电影在线 | 91豆花视频入口网站 | 亚洲无码在线观看免费 | bl高h视频| 欧美日韩一区二区午夜 | 天堂草原电视剧图片在线播放 | 我让你爽还是他让你爽嗯挺进去 | 我和麻麻车上啪啪全文阅读 |