前段時間爲「周杰倫打榜」話題迅速登上微博熱搜榜 由於cxk的粉絲們質疑周杰倫微博沒有數據 (周杰倫沒有開通微博) 因而,無數隱匿江湖多年 看不下去的周杰倫老年粉開始被迫營業 html
iKun們都說周杰倫的粉絲是夕陽紅老年團 python
用爬蟲爬取#周杰倫超話#
下的微博,而後再爬取他們的我的主頁信息,獲取年齡、地區、性別等信息,而後用數據分析,再可視化呈現!git
注意:文中說的微博我的主頁信息均爲微博公開信息,不包含任何隱私信息,同時全文中將不會出現任何人的我的信息,信息僅用於學習分析,任何人不得使用此教程用做商用,違者後果自付!github
咱們大概分解下技術步驟,以及使用的技術chrome
#周杰倫超話#
下的微博爬取數據咱們可使用requests庫
,保存csv文件咱們可使用內置庫csv
,而可視化數據分析此次給你們介紹一個超級好用的庫pyecharts
,技術選型好了以後咱們就能夠開始技術實現了!json
咱們在谷歌瀏覽器(chrome)中找到#周杰倫超話#
頁面,而後調出調試窗口,改成手機模式,而後過濾請求,只查看異步請求,查看返回數據格式,找到微博內容所在! api
拿到連接咱們就能夠模擬請求,這裏咱們仍是使用咱們熟悉的requests庫
。簡單幾句即可以獲取微博! 瀏覽器
咱們能夠看到返回的數據是一個json格式的,咱們一層一層尋找,就能夠找到微博內容、用戶id所在! cookie
在咱們提取一條微博以後,咱們即可以批量爬取微博啦,如何批量?固然是要分頁了?那如何分頁,這裏豬哥再教你們一遍尋找分頁參數技巧:數據結構
查找分頁參數技巧:比較第一次和第二次請求url,看看有何不一樣,找出不一樣的參數!給你們推薦一款文本比較工具:Beyond Compare
比較兩次請求的URL發現,第二次比第一次請求連接中多了一個:since_id
參數,而這個since_id參數就是每條微博的id!
微博分頁機制:根據時間分頁,每一條微博都有一個since_id,時間越大的since_id越大因此在請求時將since_id傳入,則會加載對應話題下比此since_id小的微博,而後又從新獲取最小since_id將最小since_id傳入,依次請求,這樣便實現分頁
瞭解微博分頁機制以後,咱們就能夠制定咱們的分頁策略:咱們將上一次請求返回的微博中最小的since_id做爲下次請求的參數,這樣就等於根據時間倒序分頁抓取數據!
# 批量爬取
for i in range(1000):
print('第%d頁' % (i + 1))
spider_topic()
複製代碼
批量爬取微博搞定以後,咱們就能夠開始爬取用戶信息啦!
首先咱們得了解,用戶基本信息頁面的連接爲:weibo.cn/用戶id/info,我…喜歡唱、跳、rap還有籃球的同窗主頁爲例子!
回顧咱們以前分析的微博數據格式,發現其中便有咱們須要的用戶id!
咱們獲取到用戶id以後,只要請求weibo.cn/用戶id/info 這個url就能夠獲取公開信息了,可是查看別人用戶主頁是須要登陸的,那咱們就先用代碼模擬登陸!
咱們以前爬取豆瓣的時候,已經教過你們如何模擬登陸了,這裏就直接放出代碼!
拿到用戶id又登陸以後,就能夠開始爬取用戶公開信息啦!
微博信息拿到了、用戶信息也拿到了,那咱們就把這些數據保存起來,方便後面作數據分析!
咱們以前一直是保存txt格式的,由於以前都是隻有一項數據,而此次是多項數據(微博內容、用戶名、地區、年齡、性別等),因此選擇CSV(Comma Separated Values逗號分隔值)格式的文件!
數據保存下來以後咱們就能夠進行數據分析了,首先咱們要知道咱們須要分析哪些數據?
由於咱們保存的數據格式爲:'用戶id', '用戶名', '性別', '地區', '生日', '微博id', '微博內容',的不少行,而如今作數據分析須要獲取指定的某一列,好比:性別列,因此咱們須要封裝一個方法用來讀取指定的列!
Counter
類來統計詞頻,方便後面數據分析,他返回的格式爲:{'女': 1062, '男': 637}。
在咱們分析以前,有一件很重要的事情,那就是選擇一個合適可視化庫!你們都知道Python可視化庫很是多,以前咱們一直在用matplotlib庫
作詞雲,matplotlib作一些簡單的繪圖很是方便。可是今天咱們須要作一個全國分佈圖,因此通過豬哥對比篩選,選擇了國人開發的pyecharts庫
。選擇這個庫的理由是:開源免費、文檔詳細、圖形豐富、代碼簡介,用着就是一個字:爽!
po一張他們的官方文檔圖片
選擇了可視化庫以後,咱們就來使用吧!
這一項是你們比較關心的,真的是夕陽紅粉絲團嗎?
下面咱們來看看打榜粉絲全國各省的分佈狀況!
咱們來看看這些打榜的粉絲們都在說什麼!
看來打榜粉絲們都自認爲本身是老年人,哈哈哈!
從結果來說爲周杰倫打榜的粉絲主力軍仍是80、90後,畢竟曾經的青春啊,並且女生要比男生多,打榜粉絲最多的地區爲廣東!
從技術分析今天這個例子有很多的新東西,瞭解新浪微博分頁機制、爬取用戶公開信息、使用csv庫保存文件、使用pyecharts作數據可視化!
固然中間遇到了不少問題,只有本身親自嘗試纔會知道,豬哥已經把源碼放在github(github.com/pig6/sina_t… 或點擊 閱讀原文)中,感興趣的同窗記得轉發收藏有時間的時候嚐嚐鮮!