python爬微博
1. python爬蟲--微博評論--一鍵獲取所有評論
一鍵獲取微博所有評論的方法
首先,關注gzh獲取源代碼:文章地址:
python爬蟲--微博評論 (qq.com)
效果預覽如下:
步驟:打開微博查看評論,確保點擊「查看全部評論」,進入開發者模式,全局搜索評論關鍵字,下載評論文件。檢查頁面載入,發現隨著滾動頁面載入更多評論,此行為關鍵。
分析頁面源代碼,發現每個評論文件包含有ID、UID及max_id參數。ID和UID分別對應作者ID和文章ID,max_id參數控制評論載入。
通過觀察發現,前一個文件的max_id即為後一個文件的起始ID,以此類推。至此,已確定所有關鍵參數。
接下來編寫爬蟲代碼,分為兩步:第一步,訪問獲取ID、UID;第二步,根據ID和UID訪問評論文件,提取並保存評論。
第一步實現,訪問獲取ID、UID,第二步實現,訪問評論文件並提取評論至列表。使用for循環處理每個評論,最後將結果保存。
封裝函數,可輸入不同文章鏈接ID以獲取相應評論。
完成代碼後,實際運行以驗證效果,關注gzh獲取源代碼及更多學習資源。
源代碼及文章地址:
python爬蟲--微博評論 (qq.com)
2. 怎樣用python爬新浪微博大V所有數據
先上結論,通過公開的api如果想爬到某大v的所有數據,需要滿足以下兩個條件:
1、在你的爬蟲開始運行時,該大v的所有微博發布量沒有超過回溯查詢的上限,新浪是2000,twitter是3200。
2、爬蟲程序必須不間斷運行。
新浪微博的api基本完全照搬twitter,其中介面的參數特性與底層的Nosql密不可分,建議先看點Nosql資料庫的設計理念有助於更好的理解api設計。
一般來說,如果決定爬某個大v,第一步先試獲取該用戶的基本信息,中間會包含一條最新的status,記下其中的id號作為基準,命名為baseId。
介面中最重要的兩個參數:
since_id:返回ID比since_id大的微博(即比since_id時間晚的微博),默認為0。
max_id:返回ID小於或等於max_id的微博,默認為0。
出於各種原因,獲取statuses的介面,固定為按id降序排列(scan_index_forward=false),即最新的statuses返回在前。假設該微博第一天上線,就一個用戶,發了一百條,id是1到100。而你在該用戶發了第50條的時候開始運行的爬蟲,即baseId=50。
假設按每次獲取10條歷史數據遞歸,先將max_id設為baseId,獲取該用戶id為41-50的微博,再將max_id設為41重復循環,直到返回微博數量為1或0。這步沒有問題。
獲取用戶最新的statuses就有些蛋疼了,since_id=50,同樣獲取10條數據,返回的並不是id值為51-60的數據,而是100-91的數據。簡單說就是你沒法從since_id逐步更新到用戶當前status,而是得一口氣從用戶當前status更新到上次爬蟲運行時得到的最後一條status。假設你的爬蟲一個月才運行一次,該用戶在這期間發了2300條微博,根據限制你只能更新2000條,這其中最老的300條在你的系統內就會出現「斷檔」。
最後一條,以上只針對公開的api,stackoverflow上twitter
API可以申請許可權突破數量限制和更改排序機制,微博也應該有類似機制。
3. python爬取和分析新浪微博(一):scrapy構建新浪微博榜單、博主及微博信息爬蟲
爬蟲項目介紹
本項目基於Python的Scrapy框架,採用隨機用戶代理和IP代理等反爬技巧,將收集到的微博領域數據、各領域榜單博主信息和博主的微博信息分別存入MySQL資料庫的相應表格。
查看完整代碼請訪問GitHub:
爬蟲邏輯
2.1 獲取微博領域信息
首先,爬取V影響力榜上所有微博領域名稱及其對應的各領域微博榜單鏈接。
2.2 獲取各領域榜單博主信息
進入各領域排行榜頁面(如互聯網榜),抓取4月月榜排名前100的博主信息。
分析網頁得知,博主信息通過單獨請求json文件獲取。
請求的URL地址為:v6.bang.weibo.com/aj/we...
URL中__rnd欄位的值由請求時間戳生成。
使用POST請求,並在表單中包含type、date、domainId等欄位。
編寫請求代碼如下:
2.3 獲得博主個人主頁和發表微博信息
收集每個博主的昵稱、ID、粉絲數、關注數、微博數、性別、地址等信息後,進入博主的微博主頁,抓取最近60條微博信息(包括內容、發表日期、轉發/點贊/評論數等)。
請求博主主頁URL時需攜帶固定的cookie信息。
博主微博主頁分析發現,發表的微博內容通過單獨請求json文件獲取。
json文件的URL很長,包含domain、pl_name、page_id、script_uri等欄位。
請求方式為GET。
請求json文件後,將data值轉化為Scrapy的Selector子類,使用CSS或XPath選擇器獲取所需信息。
爬蟲代理設置
為了對抗微博的反爬策略,本項目使用隨機更換User-Agent和IP地址的方法。
3.1 隨機User-Agent
編寫RandomUserAgentMiddleware中間件,使用fake-useragent生成UserAgent實例,為每次請求隨機生成一個User-Agent。
具體代碼在GitHub上。
3.2 隨機IP
從蘑菇IP代理購買付費IP,生成API鏈接,處理返回的JSON文件提取IP信息,保存至MySQL資料庫。Scrapy每次請求時從資料庫隨機獲取一個有效IP。
通過變換IP地址發送請求,基本避免了被反爬。
爬取結果
非同步保存至MySQL資料庫,數據分別存入weibotopic、topicuser、weiboinfo三個表格。
weibotopic(38個領域):
topicuser(3648個用戶,有些領域榜單上可能不足100個用戶):
weiboinfo(115740條微博)
小結
以上介紹了基於V影響力榜單爬取新浪微博信息的爬蟲項目,代碼在GitHub上公開,歡迎查看、交流。
後續文章將對收集到的數據進行統計分析和可視化展示,期待進一步的探索。
4. 現在python微博爬蟲可以爬到用戶注冊地址嗎
現在python微博爬蟲不可租知族以爬到用戶注冊地址。爬蟲要實現的是爬取某個用戶的關注和粉絲的弊弊用戶公開基猛豎本信息,包括用戶昵稱、id、性別、所在地和其粉絲數量。