開年表情包局部富有指南,盤它!_風聞
Alfred数据室-Alfred数据室官方账号-用数据看世界。微信公众号:Alfred数据室2019-04-02 19:06
作為一位不怎麼用微信聊天的數據猿,Alfred總是被Erica嘲笑表情包少之又少,用來用去都是那幾個。每每在需要鬥圖的時候,表情包總是捉襟見肘,左支右絀,未戰先敗。
當然,數據猿總是有自己的解決辦法的——我沒有表情包我還不能爬咋地?
(注:單純想要表情包的同學,請直接拉到最後。)
今天的小項目就是,爬取微博博主“別是個沙雕吧” 關於#沙雕表情包大賽#的微博評論圖片,裏面都是沙雕網友發的各種各樣的表情包。當然,你也可以用這個爬蟲爬取#最美側顏照大賽#裏面的小哥哥小姐妹、#曬醜手大賽#裏的各種醜手(有人有這個癖好嗎?Alfred沒有哈)。
(一)目 標
只需要給出某條微博的網頁鏈接(本項目爬取的鏈接是:https://weibo.com/2610874582/HdRqGwZNv),便能直接爬取該微博下面的所有評論圖片。
(二)爬取思路分析
爬蟲最重要的部分不是寫程序,而是整個爬取思路的分析。只要明白了數據是如何加載的,每一步的流程是怎麼樣的,程序便是水到渠成的事情。
由於微博在手機網頁端比較容易爬取,所以本次的爬取選在了手機網頁端(https://m.weibo.cn/)。
01電腦端鏈接轉為手機端鏈接
探索了一下發現,同一條微博,在電腦網頁端和手機網頁端的鏈接結構很不一樣:
我們容易拿到的鏈接,都是電腦網頁端的鏈接(9位的字母+數字),如何通過這個鏈接找到手機網頁端的微博id(16位的數字),從而構造手機端的爬取鏈接,是第一個需要解決的問題。
通過檢查電腦端的網頁源代碼,發現手機端的id就藏在“mblog&act=”之後,而且是唯一標識的,所以先請求電腦端鏈接,再找到“mblog&act=”的位置,自然就可以把手機端微博id拿到。
02評論數據抓包
第二步,由於需要爬取的表情包在微博的評論下面,所以需要對鏈接進行抓包分析,看評論數據是如何加載的。
打開谷歌瀏覽器無痕模式——右鍵“檢查”——Network,把Preserve log勾上,打開鏈接:https://m.weibo.cn/detail/4333036507864049, 選擇XHR,發現評論數據就在以“hotflow?id=4333”開頭的請求裏,而且是很工整的JSON格式,包括20條評論,我們需要的表情包圖片鏈接,就在評論數據裏。
03模擬登錄微博手機端
在Alfred往下滑動看數據是如何翻頁的時候,頁面跳轉到了微博手機端登錄頁,需要登錄之後才能獲取到更多的評論,所以,下一個需要解決的問題是模擬登錄微博。
模擬登錄的方法很簡單,我們先填寫自己的微博賬號和密碼,登錄之後便可以在所有請求中找到登錄的鏈接(https://passport.weibo.cn/sso/login),可以看到請求方式是POST,通過提交表單數據的形式登錄,我們的賬號和密碼就是這樣提交給服務器的。
所以,用requests庫的Session,然後post請求把請求頭和表單數據帶上,就OK了。
04破譯翻頁機制
登錄了之後,順利返回了第二頁評論的數據,鼠標越往下滑,返回的數據越多。觀察了前幾個評論數據的請求,發現它並不是通過一般的page參數來控制翻頁的,那它是怎麼翻頁的呢?
可以看到,從第二頁開始,請求鏈接多了一個參數“max_id”,如果知道這個max_id參數,便可以順利實現翻頁,可是這個參數藏在哪兒呢?
檢查了一遍,發現就藏在前一個請求的JSON數據裏,也就是説,第二頁的max_id,可以在第一頁請求回來的JSON數據裏找到。所以,只需要把這個找出來,就可以構造下一頁的請求了。
另外還有一個參數“max_id_type”(Alfred在這裏踩過坑),大家猜猜是幹嘛的? (Github代碼註釋裏有解答)
至此,我們其實把所需要的數據在流程上全部打通了。下一步需要做的,是從評論數據中提取出表情包圖片的鏈接。
(三)表情包鏈接提取和保存
這一步很簡單,因為評論數據都是保存在JSON裏面的,只需要用for循環就可以提取。鏈接可以保存在MongoDB裏(需要配置一下MongoDB),或者直接保存在本地的txt文件。當然你也可以不保存鏈接,提取出來之後直接下載圖片,但是,這不是一個好的工程習慣。
(四)下載圖片
首先讀入txt文件裏面的表情包鏈接,for循環下載就可以了。由於表情包的格式有png、jpg和gif等,所以保存的時候需要注意一下命名。
至此,#沙雕表情包大賽#微博下面的幾百個表情包就自動下載回來了,什麼樣的表情包都應有盡有。下一次鬥圖的時候,就問你們怕不怕?
其實,這期的爬蟲就是微博評論爬蟲的小拓展,只要更改一下爬取鏈接,你就可以用它爬各種各樣的評論圖片,比如説,Alfred就爬了#萌寵大賽#裏面的很多小可愛,以及#男孩子女裝大賽#裏面的女裝大佬,不説了……
1. 微信公眾號對話框回覆**“表情包”,可以獲取分享在Github的代碼鏈接(內附詳細的註釋和説明),以及近千張最具人氣的表情包下載鏈接**,讓你新的一年從表情包局部富有起來;
2. 如果你需要女裝大佬的圖片,可以悄悄在微信後台留言;
3. 歡迎任何形式的合作,合作請微信後台留言諮詢;
4. **《數據爬蟲一百式》**是新開的一個欄目,持續更新數據爬蟲項目,歡迎關注和轉發哦。
本文首發於微信公眾號“Alfred數據室”,轉載請聯繫原作者!