
微博,作為當下主流的社交平臺之一,日活躍用戶高達2億多人。人們可以在微博上發(fā)表自己的感悟,自己的照片以及日常的生活內容。微博為廣大的用戶提供了更加多元化的社交平臺。相比于微信,許多小姐姐們更喜歡在微博上同大家分享自己日常生活中的照片。比如菜鳥哥,就非常喜歡冰冰小姐姐。今天就帶大家一起,手把手的抓取冰冰小姐姐的微博圖片,并保存到本地。一起來看看吧。
00.整體的思路:

01.微博主頁信息
對于微博網頁的抓取,很多小伙伴都是通過網絡抓包的方式,來獲取圖片的鏈接地址,從而獲取圖片。
通過抓包的方式來獲取圖片的鏈接,非常的麻煩,而且容易被反扒。其實我們可以通過微博的API接口來獲取用戶的微博的內容。例如,獲取微博用戶的基本數據,我們只需要知道用戶的微博。例如我們打開冰冰醬的網頁版微博(https://weibo.com/u/6512991534)。其中的6512991534就是微博id。我們可以打開她的網頁地址,返回的就是冰冰微博的主要信息內容:
由于數據是以Unicode的編碼顯示,而且雜亂無章。沒關系,我們通過將數據進行下載,然后進行整理。結果如下圖所示:

經過解析后的數據,可以清晰的看出,微博的主要信息包含了用戶的名稱,微博的頭像地址,以及性別,粉絲數量等重要信息。通過程序,我們同樣可以模仿瀏覽器來向接口請求結果,并解析數據。

上圖程序中,通過self.get_data函數來獲取網頁的json數據,并進行解析,獲取得到json_data數據。(28-29行)接下來,就是獲取json_data數據中的關鍵信息,包括微博的頭像地址,微博主頁網址等信息(31-41)。在返回的json_data數據中,包含著一項重要的內容:“containerid”。通過containerid信息,我們才能進行后續(xù)的微博詳情頁面的抓取。因此,我們要提取出containerid數值,并返回containerid(42-46)。當執(zhí)行上述的函數時,得到用戶微博的主要信息。結果如下:

上圖函數中,展示的是self.get_data函數。函數的主要作用就是向指定的網頁url請求數據。
函數中,通過設置ProxyHandler,來設置我們自己的http代理(18-20行)。函數通過urllib庫來獲取數據,然后將獲取得到的數據進行返回(21-22行)。
02.微博詳情頁抓取
上面的程序,提供的是用戶的微博主要內容信息,那么接下來,就是最重要的微博詳情的抓取,包括微博相冊以及發(fā)布的微博內容信息。
在函數get_weibo中,首先通過self.get_user_info 函數獲取得到了containerid的數值(第51行)。接下來在while循環(huán)中,利用containerid以及用戶的微博id數值以及微博的頁數來構造出網頁詳情的鏈接地址(第54行)。利用self.get_data函數來獲取網頁返回的json數據,并解析獲取得到cards字典(56-58行)。如果cards的長度大于0,表明該頁微博中有微博動態(tài)信息,接下來就可以按照字典的操作方式,來層層獲取數據,包括微博的文字內容,以及微博動態(tài)的點贊數,評論數等信息內容(60-71行)。
如果mblog中的“pics”值不為None,那么就說明,該條微博動態(tài)中包含圖片信息,大家就可以提取對應的圖片鏈接地址,并將圖片下載到本地文件夾內(72-80行)。
03.保存為相冊
最后,將提取到的文字信息,打印到終端當中。這里我們關注的是圖片的內容,而不是其他的文本信息,因此不需要將抓取到的文本信息進行保存等特殊的處理。運行上述函數,我們就可以又快又準的抓取冰冰小姐姐的微博相冊了。我們一起來看看抓取的結果吧。
如果你也是冰冰的fans,歡迎在留言區(qū)吱一聲哦,說說你的想法哦。我們月底會給經常來留言打卡的同學送書10本,記得常來指導工作哦!