爬取微博用戶公開信息,分析爲周杰倫打榜的夕陽紅老年團,告訴你他們真實年齡!

前段時間爲「周杰倫打榜」話題迅速登上微博熱搜榜 由於cxk的粉絲們質疑周杰倫微博沒有數據 (周杰倫沒有開通微博) 因而,無數隱匿江湖多年 看不下去的周杰倫老年粉開始被迫營業 html

在這裏插入圖片描述
因而一場周杰倫中老年粉VS蔡徐坤鐵軍 微博打榜大戰拉響 爲聽了那麼多年的周杰倫 粉絲們紛紛拉下老臉 和00後的微博飯圈小年輕們 從零學習如何作數據
在這裏插入圖片描述

1、需求背景

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

在這裏插入圖片描述
今天咱們就用他們說的數據,來實力打臉,讓iKun們看看周杰倫的粉絲們究竟是不是中老年粉!

2、功能描述

用爬蟲爬取#周杰倫超話#下的微博,而後再爬取他們的我的主頁信息,獲取年齡、地區、性別等信息,而後用數據分析,再可視化呈現!git

注意:文中說的微博我的主頁信息均爲微博公開信息,不包含任何隱私信息,同時全文中將不會出現任何人的我的信息,信息僅用於學習分析,任何人不得使用此教程用做商用,違者後果自付!github

3、技術方案

咱們大概分解下技術步驟,以及使用的技術chrome

  1. 爬取#周杰倫超話#下的微博
  2. 根據每條微博爬取該用戶基本信息
  3. 將信息保存到csv文件
  4. 使用數據分析用戶年齡、性別分佈
  5. 分析粉絲團的地區分佈
  6. 使用詞雲分析打榜微博內容

爬取數據咱們可使用requests庫,保存csv文件咱們可使用內置庫csv,而可視化數據分析此次給你們介紹一個超級好用的庫pyecharts,技術選型好了以後咱們就能夠開始技術實現了!json

4、爬取超話微博

1.找到超話加載數據URL

咱們在谷歌瀏覽器(chrome)中找到#周杰倫超話#頁面,而後調出調試窗口,改成手機模式,而後過濾請求,只查看異步請求,查看返回數據格式,找到微博內容所在! api

在這裏插入圖片描述
微博請求連接: m.weibo.cn/api/contain…

2.代碼模擬請求數據

拿到連接咱們就能夠模擬請求,這裏咱們仍是使用咱們熟悉的requests庫。簡單幾句即可以獲取微博! 瀏覽器

在這裏插入圖片描述

3.提取微博內容

咱們能夠看到返回的數據是一個json格式的,咱們一層一層尋找,就能夠找到微博內容、用戶id所在! cookie

在這裏插入圖片描述
瞭解微博返回的數據結構以後咱們就能夠將微博內容和id提取出來啦!
在這裏插入圖片描述

4.批量爬取微博

在咱們提取一條微博以後,咱們即可以批量爬取微博啦,如何批量?固然是要分頁了?那如何分頁,這裏豬哥再教你們一遍尋找分頁參數技巧:數據結構

查找分頁參數技巧:比較第一次和第二次請求url,看看有何不一樣,找出不一樣的參數!給你們推薦一款文本比較工具:Beyond Compare

比較兩次請求的URL發現,第二次比第一次請求連接中多了一個:since_id參數,而這個since_id參數就是每條微博的id!

微博分頁機制:根據時間分頁,每一條微博都有一個since_id,時間越大的since_id越大因此在請求時將since_id傳入,則會加載對應話題下比此since_id小的微博,而後又從新獲取最小since_id將最小since_id傳入,依次請求,這樣便實現分頁

瞭解微博分頁機制以後,咱們就能夠制定咱們的分頁策略:咱們將上一次請求返回的微博中最小的since_id做爲下次請求的參數,這樣就等於根據時間倒序分頁抓取數據

在這裏插入圖片描述
而後寫一個for循環調用上面那個方法就能夠啦

# 批量爬取
    for i in range(1000):
        print('第%d頁' % (i + 1))
        spider_topic()
複製代碼

4、爬取用戶信息

批量爬取微博搞定以後,咱們就能夠開始爬取用戶信息啦!

首先咱們得了解,用戶基本信息頁面的連接爲:weibo.cn/用戶id/info,我…喜歡唱、跳、rap還有籃球的同窗主頁爲例子!

在這裏插入圖片描述
因此咱們只要獲取到用戶的id就能夠拿到他的公開基本信息!

1.獲取用戶id

回顧咱們以前分析的微博數據格式,發現其中便有咱們須要的用戶id!

在這裏插入圖片描述
因此咱們在提取微博內容的時候能夠順便將用戶id提取出來!
在這裏插入圖片描述

2.模擬登陸

咱們獲取到用戶id以後,只要請求weibo.cn/用戶id/info 這個url就能夠獲取公開信息了,可是查看別人用戶主頁是須要登陸的,那咱們就先用代碼模擬登陸!

咱們以前爬取豆瓣的時候,已經教過你們如何模擬登陸了,這裏就直接放出代碼!

在這裏插入圖片描述
登陸咱們使用的是requests.Session()對象,這個對象會自動保存cookies,下次請求自動帶上cookies!

3.爬取用戶公開信息

拿到用戶id又登陸以後,就能夠開始爬取用戶公開信息啦!

在這裏插入圖片描述
這裏公開信息咱們只要: 用戶名、性別、地區、生日這些數據!因此咱們須要將這幾個數據提取出來!
在這裏插入圖片描述
爬取用戶信息不能過於頻繁,不然會出現請求失敗(響應狀態碼=418),可是不會封你的ip,其實不少大廠 不太會輕易的封ip,太容易誤傷了,也許一封就是一個小區甚至更大!

5、保存csv文件

微博信息拿到了、用戶信息也拿到了,那咱們就把這些數據保存起來,方便後面作數據分析!

咱們以前一直是保存txt格式的,由於以前都是隻有一項數據,而此次是多項數據(微博內容、用戶名、地區、年齡、性別等),因此選擇CSV(Comma Separated Values逗號分隔值)格式的文件!

在這裏插入圖片描述
咱們生成一個列表,而後將數據按順序放入,再寫入csv文件!
在這裏插入圖片描述
看看生成的csv文件,注意csv若是用wps或excel打開可能會亂碼,由於咱們寫入文件用utf-8編碼,而wps或excel只能打開gbk編碼的文件,你能夠用通常的文本編輯器便可,pycharm也能夠!
在這裏插入圖片描述

6、數據分析

數據保存下來以後咱們就能夠進行數據分析了,首先咱們要知道咱們須要分析哪些數據?

  1. 咱們能夠將性別數據作生成餅圖,簡單直觀
  2. 將年齡數據做出柱狀圖,方便對比,看看究竟是不是夕陽紅老年團
  3. 將地區作成中國熱力圖,看看哪一個地區粉絲最活躍
  4. 最後將微博內容作成詞雲圖,直觀瞭解你們在說啥

1.讀取csv文件列

由於咱們保存的數據格式爲:'用戶id', '用戶名', '性別', '地區', '生日', '微博id', '微博內容',的不少行,而如今作數據分析須要獲取指定的某一列,好比:性別列,因此咱們須要封裝一個方法用來讀取指定的列!

在這裏插入圖片描述
這裏豬哥還使用了 Counter類來統計詞頻,方便後面數據分析,他返回的格式爲:{'女': 1062, '男': 637}。

2.可視化庫pyecharts

在咱們分析以前,有一件很重要的事情,那就是選擇一個合適可視化庫!你們都知道Python可視化庫很是多,以前咱們一直在用matplotlib庫作詞雲,matplotlib作一些簡單的繪圖很是方便。可是今天咱們須要作一個全國分佈圖,因此通過豬哥對比篩選,選擇了國人開發的pyecharts庫。選擇這個庫的理由是:開源免費、文檔詳細、圖形豐富、代碼簡介,用着就是一個字:爽!

po一張他們的官方文檔圖片

在這裏插入圖片描述
這裏有很是詳細的例子,直接複製過來就能夠運行獲得圖片!
在這裏插入圖片描述

3.分析性別

選擇了可視化庫以後,咱們就來使用吧!

在這裏插入圖片描述
這裏說下爲何生成的是html?由於這是動態圖,就是能夠點擊選擇顯示的,很是人性化!執行以後會生成一個gender.html文件,在瀏覽器打開就能夠!
在這裏插入圖片描述
在這裏插入圖片描述
效果圖中能夠看到,在打榜的粉絲中女性多於男性, 女性佔比大概爲62%!

4.分析年齡

這一項是你們比較關心的,真的是夕陽紅粉絲團嗎?

在這裏插入圖片描述
在這裏插入圖片描述
上圖中咱們發現 爲周杰倫打榜的主力軍爲:90後!

5.地區分析

下面咱們來看看打榜粉絲全國各省的分佈狀況!

在這裏插入圖片描述
上圖中咱們能夠看到 打榜最多的三個省(直轄市)依次爲:廣州、北京、上海

6.打榜內容分析

咱們來看看這些打榜的粉絲們都在說什麼!

在這裏插入圖片描述
上圖分析出現一些 有趣的詞:營業、老年人、奶茶!

看來打榜粉絲們都自認爲本身是老年人,哈哈哈!

在這裏插入圖片描述

7、總結

從結果來說爲周杰倫打榜的粉絲主力軍仍是80、90後,畢竟曾經的青春啊,並且女生要比男生多,打榜粉絲最多的地區爲廣東!

從技術分析今天這個例子有很多的新東西,瞭解新浪微博分頁機制、爬取用戶公開信息、使用csv庫保存文件、使用pyecharts作數據可視化!

固然中間遇到了不少問題,只有本身親自嘗試纔會知道,豬哥已經把源碼放在github(github.com/pig6/sina_t… 或點擊 閱讀原文)中,感興趣的同窗記得轉發收藏有時間的時候嚐嚐鮮!

相關文章
相關標籤/搜索