Python 爬蟲-新浪微博

新浪微博爬取

前言

  現在這個數據時代,要做點數據研究,少不了爬蟲。畢竟自己沒有可以研究的數據呀。本篇文章已爬取新浪微博爲實例驅動,講解爬蟲。主要有微博文章爬取,評論爬取,用戶信息爬取(用戶名稱,所在地,以及性別)。這個項目其實主要是用戶爬取文本做情感分析的,爲此付出了不少時間,來研究和優化這個項目。三者的爬取是三個獨立的模塊。數據存儲採用Mysql數據庫,orm框架使用sqlarlchemy框架。

基本環境

  • requests庫:一個http請求庫
  • selenium庫:一個自動化測試工具
  • re庫:正則

前提條件

  由於微博反爬蟲比較的厲害,我們就需要繞過反爬蟲的機制,這個機制一般都是登錄(獲取比較多的信息,新浪首先就會要求你登錄)、降低qps(每秒的請求次數)、修改用戶代理,修改ip代理、多帳號,通過這些手段來有效防止被反爬蟲,加大爬取效率。

開始前的概述

  微博有三個站點,分別是:
老式移動端:https://weibo.cn/
在這裏插入圖片描述
pc端:https://weibo.com/
在這裏插入圖片描述
移動端:https://m.weibo.cn/
在這裏插入圖片描述
這三個站點各有優缺點。老式移動端的數據比較的容易獲取,qps較高,主要是和ip相關,選用此站點記得使用代理,缺點就是數據獲得不容易解析,數據都是在後臺就渲染到html中,有些東西是直接獲取不到的,例如,評論及其回覆,就不是那麼好解析。pc端 的數據也容易獲取,qps未注意,數據是渲染在頁面中的,但是我驚奇地發現,可以用js返回請求的json數據,也是比較的好解析。數據基本上都是包裝在js中的,需要js解析工具,才能夠拿到整齊的數據。移動端的數據就好說了,返回數據json格式,這個東西就像是自己的後臺一樣,哈哈。不過qps比較低,建議使用ip代理,用戶代理池。

登錄

  無論是哪個站點,都需要登錄,這是個繞不開的話題。登錄同樣有三個站點,但是都是可以互相共用的,應該是三套sso系統,注意: 都是微博的登錄,新浪站點的登錄未測試。我就選擇比較容易操作的平臺了:https://passport.weibo.cn/signin/login
在這裏插入圖片描述
這個站點登錄相對來說比較容易一點,一般沒有驗證之類的,當然這是處在用戶正常的情況下,比如,在經常登錄的地點使用,沒有特別的安全設置,在這個設備上有多次登錄。

微博博文爬取

  首先爬取了微博才能夠爬取評論和用戶所在地。我的目標是獲得有關鍵字的微博,所以我就需要搜索,微博的搜索入口有點多,後面或羅列出來。我就選擇了容易爬取的站點,移動端主頁的搜索。
在這裏插入圖片描述
這麼簡潔的搜索,其缺點也是很容看出的。沒有其他的限制,大概100頁的數據,每頁大概10條微博,有時候會多一點,但是都是摻雜了其他的東西,例如廣告,近期的熱點微博等等。一般說來,返回數據條目中的card_type = 9 纔是我們想要的。通過這個接口爬取大量數據,需要不斷爬取,因爲這個接口返回的數據都是近期的內容
在這裏插入圖片描述

url:https://m.weibo.cn/api/container/getIndex?containerid=100103type%3D1%26q%3D%E7%96%AB%E6%83%85&page_type=searchall&page=2
// 看不懂是不是?沒關係,這個是參數經過url編碼之後的url,看了下面這個圖片,你就知道。

在這裏插入圖片描述
其中的參數就不言而喻了。conainerid是經過url編碼的。解析就更加簡單了,json格式,直接取就ok。
但是要注意一點,有的微博很長,他是經過長文本存儲的,經過了處理。
返回結果簡要說明:
在這裏插入圖片描述

評論爬取

  我的策略是從數據庫中獲得微博id,然後構造請求url。

用戶爬取

  策略是從數據庫中獲得用戶id,然後構造請求url。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章