#開發工具
**Python版本:**3.6.4
相關模塊:
argparse模塊;
requests模塊;
jieba模塊;
wordcloud模塊;
以及一些Python自帶的模塊。
新浪微博相關文件
關注並轉發後私信回覆“新浪微博”獲取。
#環境搭建
安裝Python並添加到環境變量,pip安裝需要的相關模塊即可。
#原理簡介
一. 爬蟲目標
爬取某條微博底下的評論數據。
二. 模擬登錄
爬像新浪微博這樣的大網站,不用想就知道不登錄肯定是爬不了多少數據的(事實就是不登錄的話只能爬第一頁的評論數據)。
這裏爲方便起見,我們選擇用微博的移動端接口進行模擬登錄。即:
https://passport.weibo.cn/signin/login?entry=mweibo&res=wel&wm=3349&r=https%3A%2F%2Fm.weibo.cn%2F
界面如下:
簡單抓包可以發現登錄鏈接爲:
https://passport.weibo.cn/sso/login
登錄需要post的數據包括:
於是我們就可以愉快地寫模擬登錄微博移動端的代碼啦~具體代碼實現如下:
三. 評論數據爬取
這裏我們以爬取胡歌的最後一條微博的評論數據爲例。
移動端界面:
PC端界面:
由於我們模擬登錄的是移動端,所以我們只能從移動端爬取微博的評論數據。
移動端簡單抓包可以發現只要請求下圖這個鏈接就能獲取這條微博的第一頁評論數據了:
其中,id和mid是相同的,就是該評論頁鏈接橙色加粗的部分:
https://m.weibo.cn/detail/4341031648799308
獲得的評論數據如下:
那麼第二頁呢?其實也很簡單,可以發現只要請求下圖這個鏈接就能獲取這條微博的第二頁評論數據了:
其實就是比第一頁多了兩個參數,這兩個參數其實就藏在返回的第一頁評論數據裏:
以此類推,第n頁所需的max_id和max_id_type參數就藏在返回的第n-1頁評論數據裏。
可以發現,當該頁返回的max_id爲0時,表示該頁是該條微博底下評論的最後一頁。
於是,我們就可以爬到該條微博下方的所有評論數據啦!(QAQ當然前提是網站沒有其他的反爬措施,這個顯然不太可能。)
那麼PC端的微博評論頁鏈接能不能轉換爲對應的移動端微博評論頁鏈接呢?畢竟我們在電腦上一般都用的PC端接口登錄然後看微博啊!
當然可以!
在胡歌最後一條微博評論頁的PC端界面,我發現了這個:
注意:請求微博PC端的鏈接時,需要加cookie信息,經測試,只需要加cookie裏的SUB參數就行了,詳見相關文件中的源代碼。
這不就是mid嘛,於是PC端的微博評論頁鏈接就可以很容易地轉換爲對應的移動端微博評論頁鏈接了。
所以微博評論數據抓取部分的代碼就可以很輕鬆地寫出來啦:
OK,大功告成完整源代碼詳見相關文件
#使用說明
在終端運行weiboComments.py文件,命令格式如下:
例如:
python weiboComments.py -u 用戶名 -p 密碼 -m 10(即評論數據最多抓10頁) -l 某條微博的評論頁鏈接 -t pc(輸入pc/phone,用於說明是PC還是移動端的微博評論頁鏈接)。
簡單運行一下,截個圖:
數據保存在當前文件夾內,文件名爲:
comments_當前時間戳.pkl。
注意:
爲避免給微博服務器帶來不必要的壓力,每爬一頁我都設置了較長的停頓時間。
數據可視化
隨手畫個前十頁評論的詞雲吧,其他數據懶得分析了:
源代碼見相關文件中的vis.py文件。
更多
新浪微博相關文件
關注並轉發後私信回覆“豆瓣國產”獲取。