本文首發於公眾號「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塊零花錢。