1. 程式人生 > >我用Python一鍵儲存了半佛老師所有的騷氣表情包

我用Python一鍵儲存了半佛老師所有的騷氣表情包

本文首發於公眾號「Python知識圈」,如需轉載,請在公眾號聯絡作者授權。

2019年發現兩個有意思而且內容比較硬核的公眾號。都是同一個人運營的,我們都叫他半佛老師,現實中的職業是風控,公眾號內容涉及揭祕灰產的一些坑和硬核科普。文章內容硬核外,再配上大量的沙雕表情包。讓整個文章非常有趣。不到一年,兩個公眾號,每篇文章都有10w+ 的閱讀量。19 年年底。半佛老師入駐了 B 站。製作的 B 站視訊文案上也和公眾號文章一樣硬核,配上大量的沙雕表情包。讓看視訊的讀者有時候看著表情包在那裡傻笑(包括我),目前 B 站 327 萬粉,相當的硬核。

就這樣,每天有大量的讀者在半佛老師的公眾號和 B 站之間來回橫向跳動。

說了這麼多,今天這篇文章不是給半佛老師打廣告的。我僅僅只是我饞他的表情包了。所以今天我用爬蟲批量的儲存半佛老師公眾號文章裡面所有的沙雕表情包。

週末在 B 站發了一個儲存半佛老師的騷表情包的視訊,目前播放量 12萬,8000+點贊,大家可以點選文末「閱讀原文」直達視訊頁面。

半佛老師有兩個公眾號。據我觀察,仙人jump 公眾號的表情包相對來說多一些。所以今天就以這個公眾號為目標。來批量儲存裡面的沙雕圖片或者表情包。

單篇文章表情包爬取

首先。我們要學會爬取一篇文章裡面所有的表情包或者圖片。比如我們指定一篇文章,開啟文章,檢視頁面原始碼。

通過簡單查詢,我們就可以看到。文章的圖片都在date-src後面。

我們用正則表示式去提取這些連結。所有的連結都提取出來,以列表的形式返回。

然後我們需要寫一個下載圖片的方法。

這樣我們用一個for迴圈就可以把這篇文章裡面所有的表情包或者圖片全部下載下來了。

所有文章表情包爬取

接下來第2步。我們是需要儲存一個公眾號所有文章裡面所有的表情包或者圖片,所以這一步我們需要獲取這個公眾號所有文章的連結地址。之前我也寫過一篇文章,將一個公眾號裡面所有文章的連結和標題全部爬取下來:拒絕低效!Python教你爬蟲公眾號文章和連結

我們通過 Charles 抓包,直接抓取電腦 PC 端公眾號。

我們通過上滑公眾號歷史文章,在抓取的連結裡面我們可以看到請求和具體的返回資料。它的返回是以 Json 資訊的形式。文章的連結就在 Json 資訊裡面。

這個 Json 看不全,我們複製到線上 json 解析工具裡轉換一下。

分析請求資料我們發現。連結裡面除了 offset 是變化的,其他都是不變的。

用 requests 庫請求連結的話,我們是需要給出 headers 資訊和 cookies 資訊的,笨辦法的話,我們可以手動在請求頭 Headers 裡面找,然後複製過來。這裡教大家一個非常簡單的方法,我們直接右鍵,選擇 Copy Curl Request。

複製完之後,我們放在轉換地址裡面。

https://curl.trillworks.com/

在左邊貼上剛才複製的 curl request,下面的語言預設是 Python。右邊就會同步轉換為 Python requests。

我們把右邊的 Python requests 直接複製到編輯器裡面就可以了。內容包括 hearders 資訊和 cookies 資訊,還有對應的引數,這樣就避免我們對 cookies 和 headers 一個個去粘複製貼上。這樣是不是比較方便和簡單!

這裡有個地方注意下,複製過來的 params 裡面有兩個值需要去掉,offset 和 count。

因為 offset 我需要把它做成動態的,我把它們放在了開頭的基礎連結裡。

通過 requests 庫請求我們就可以獲取返回的 Json 資訊。然後我們提取 Json 資訊裡面的文章連結,為了全部獲取所有文章。offset 值我們需要放在 range 裡面,以 10 的步數往上增長, offset 最大值是多少呢?我們可以通過抓包獲取,把公眾號文章一直上滑到底,也就是滑動公眾號的第 1 篇文章,我們點選這個請求,就可以看到裡面的offset值。

把這個值放在 range 值裡。

這樣的話,這個公眾號所有的文章連結,我都以列表的形式返回。返回給之前第 1 步操作的爬取單篇文章所有圖片。通過兩個迴圈,公眾號下面所有文章裡面的所有表情包或者圖片都可以批量下載下來。

這樣,雖然我沒有半佛老師任何的文案,但是我有他硬核而且沙雕的表情包。

總結下:

1、執行程式碼前抓包通過 Copy Curl Request 到轉換工具裡獲取 headers、cookies、和 params 替換掉我程式碼中的 headers 相關資訊,並把 params 中 offset 和 count 去掉。

2、程式碼請求里加了代理ip proxy,如果執行報 pxoxy 相關的錯,請自行去西刺代理ip更換一個(https://www.xicidaili.com/)免費的。

3、點選閱讀原文直達這個專案的 B 站視訊版,目前 12萬播放量了,有賬號的夥伴來個三連加關注啊。

在本公眾號後臺回覆「表情包」獲取本文所有的程式碼。
歡迎關注公眾號「Python知識圈」,公眾號後臺回覆關鍵字,獲取更多幹貨。

回覆「英語」:送你英語 7000 單詞速記法,親測非常有效。

回覆「程式設計」:免費獲贈2019最新程式設計資料,認真學完BAT offer 拿到手軟。

回覆「賺錢」:領取簡單可實操的 36 個賺錢的小專案,每天多賺100塊零花錢。