Python 爬蟲 | 懂球帝App 60萬用戶分析
懂球帝App是什麼?
懂球帝是一款提供全球體育足球新聞、深度報道、足球社區的手機App,基本上可以滿足球迷在手機上關於足球的一切需求。
懂球帝App之於足球大概就像虎撲之於籃球吧。
我爬取了懂球帝App上最近的 99,889 篇post,共有 5,891,037 條評論,而這些評論是來自於 610,803 個用戶。
(本來想著多拿一點用戶數據的...結果只有十分之一...)
這個項目所有的代碼都是用 Python 實現。
代碼地址:
pengshiqi/Dongqiudi為了獲取用戶ID,我的思路是:先獲取近期的文章,然後從文章的評論區中獲取評論用戶的ID。
首先,我使用抓包工具 Charles 抓包所需要的各個API:
- 獲取 article ID 的 API:http://api.dongqiudi.com/app/tabs/iphone/1.json,這是一頁(共20篇)的數據,下一頁的API在next欄位中。
- 獲取評論用戶的 API:http://api.dongqiudi.com/v2/article/{article_id}/comment?sort=down&version=600,同樣地,下一頁的API在next欄位中。
- 獲取用戶信息的 API:https://api.dongqiudi.com/users/profile/{user_id}。
- 獲取球隊信息的 API:http://api.dongqiudi.com/catalogs 和 http://api.dongqiudi.com/catalog/channels/{league_id}。
其中,獲取球隊信息的API需要登錄,具體請求方法為:在網頁版懂球帝上登錄自己的賬號後,獲取Cookie,並將這個Cookie放入headers中再請求這兩個API。
爬取數據我使用的是 requests/requests,其中爬取評論區用戶ID的時間比較長,而且由於下一頁的API是由上一頁API返回的,所以只能串列而不能並行。為了穩定性和魯棒性考慮,還需要有斷點繼續機制。
在爬取到60萬個用戶ID後,使用這些ID來獲取各個用戶的信息,這個階段是可以並行的。我有考慮過使用非同步爬蟲(asyncio 和 aiohttp)來加速,主要參考的是 加速爬蟲: 非同步載入 Asyncio - 網頁爬蟲 | 莫煩Python,但後來發現只有60w用戶,數據量並不是特別大,就沒有這麼做。僅僅是將爬蟲任務分配到了3台伺服器,爬了10個小時就得到了。
爬取到的所有數據我都存儲在本地的 sqlite3 資料庫中。
數據分析階段,使用 pyecharts/pyecharts 來進行數據可視化,其中的分詞部分使用 fxsjy/jieba 來完成。
下面是數據分析的結果:
01
這些用戶中,有 263,960 人為男性♂用戶,有 18,227 人為女性♀用戶,其餘 328,609 人沒有填寫性別信息。
emmmm,上網搜了下, Bilibili的男女比大概是 5 : 4, 知乎的男女比大概是 2 : 1, 懂球帝這 14.5 : 1 的比例,大概就是繼GitHub之後又一個同性交友社區了吧...
02
再看看懂球帝們所在的地區,首先是國內的分布情況。
廣東的懂球帝數量最多,其次是北京,再次是山東和江蘇。
然後是海外懂球帝們的分布。
由於懂球帝App上選擇地區時,只能選擇圖中高亮的地區,所以只比較這些地區的情況。
這些地區中懂球帝數量最多的是西班牙????,其次是英國????和美國????。
03
懂球帝App中,每個用戶可以設置自己最喜愛的球隊,然後球隊隊標會出現在名字旁邊,比如這樣
以此為依據,我們來看看哪支球隊的球迷數量最多。
先看看國家隊,同樣地,這裡可以選擇的國家隊數量也是有限的。
顯然支持國足的朋友還是居多的,其次就是德國????和阿根廷????了,三喵軍團????這一屆的粉絲不行啊。
再看看歐洲五大聯賽
英超:
曼聯球迷最多,阿森納、利物浦、切爾西其次。
西甲:
西甲還用看???巴薩皇馬佔掉了97%...
德甲:
德甲也別看了吧...拜仁球迷佔了78%,多特佔了18%...其餘球隊xxx...
意甲:
儘管尤文圖斯剛實現了意甲七連冠,但粉絲最多的依然是AC米蘭。
法甲:
巴黎聖日耳曼沒有什麼話要說...
看了這些,就大概明白了,為什麼英超的比賽好看,倒不是說英超球隊多麼厲害,而是競爭力太大,前四甚至前六的球隊的實力都在伯仲之間,亂世英超實至名歸。
看完歐洲五大聯賽,那必須得關注一波中國足球超級聯賽。??
中超:
大連的球迷比上港多...上港的球迷比申花多...??
最後,將所有俱樂部的粉絲數量來比較一下。
下圖展示了Top 20的俱樂部,巴薩皇馬遙遙領先...
04
然後是對用戶名字的分析。
使用jieba分詞並去除一些無意義的結果後,得到了下面這個詞雲。
大家在起名字的時候還是以足球、梅西、巴薩居多啊。
梅西出現的頻率比C羅大不少,我覺得這是因為,梅西的粉絲一般就起名梅西或者Messi了,而C羅的粉絲可能會起名 C羅、克斯斯蒂亞諾 羅納爾多、CR7...稀釋掉了不少。
我問一個朋友為啥會有透露這個詞,原來是,一位不願透露姓名的xxx ......
05
最後,將各位懂球帝加入App的時間,畫成了如下直方圖
可以發現,以2015年中-2017年中加入的懂球帝居多,近一年加入的反而較少,我想大概是新加入的用戶們很少評論的緣故吧。
總結一下,這是我第一次大規模地爬取百萬級的數據,懂球帝App沒有反爬策略,還是挺輕鬆的。在這個過程中,抓包手機App的API 和 作圖分析數據 挺有意思的,相對比較無聊的是數據的爬取階段,等待時間比較長,而且可能會出現各種意想不到的情況。??
推薦閱讀: