1. 程式人生 > >爬蟲例項 利用Ajax爬取微博資料

爬蟲例項 利用Ajax爬取微博資料

隨著代理IP技術的普及,爬蟲的使用也變得簡單起來,許多企業和個人都開始用爬蟲技術來抓取資料。那麼今天就來分享一個爬蟲例項,幫助你們更好的理解爬蟲。下面我們用程式模擬Ajax請求,將我的前10頁微博全部爬取下來。
首先,定義一個方法來獲取每次請求的結果。在請求時,page是一個可變引數,所以我們將它作為方法的引數傳遞進來,相關程式碼如下:
爬蟲例項 利用Ajax爬取微博資料
首先,這裡定義了base_url來表示請求的URL的前半部分。接下來,構造引數字典,其中type、value和containerid是固定引數,page是可變引數。接下來,呼叫urlencode()方法將引數轉化為URL的GET請求引數,即類似於type=uid&value=2830678474&containerid=1076032830678474&page=2這樣的形式。隨後,base_url與引數拼合形成一個新的URL。接著,我們用requests請求這個連結,加入headers引數。然後判斷響應的狀態碼,如果是200,則直接呼叫json()方法將內容解析為JSON返回,否則不返回任何資訊。如果出現異常,則捕獲並輸出其異常資訊。

隨後,我們需要定義一個解析方法,用來從結果中提取想要的資訊,比如這次想儲存微博的id、正文、贊數、評論數和轉發數這幾個內容,那麼可以先遍歷cards,然後獲取mblog中的各個資訊,賦值為一個新的字典返回即可:
爬蟲例項 利用Ajax爬取微博資料
這裡我們藉助pyquery將正文中的HTML標籤去掉。
最後,遍歷一下page,一共10頁,將提取到的結果列印輸出即可:
爬蟲例項 利用Ajax爬取微博資料
另外,我們還可以加一個方法將結果儲存到MongoDB資料庫:
爬蟲例項 利用Ajax爬取微博資料
這樣所有功能就實現完成了。執行程式後,樣例輸出結果如下:
爬蟲例項 利用Ajax爬取微博資料
檢視一下MongoDB,相應的資料也被儲存到MongoDB,如下圖所示。
爬蟲例項 利用Ajax爬取微博資料
這樣,我們就順利通過分析Ajax並編寫爬蟲爬取下來了微博列表。通過這個例項,我們主要學會了怎樣去分析Ajax請求,怎樣用程式來模擬抓取Ajax請求。