1. 程式人生 > >自從會了這招,我就再也不擔心我的爬蟲會被封了!搭建Cookies池

自從會了這招,我就再也不擔心我的爬蟲會被封了!搭建Cookies池

detail http containe TP bad pst pro ear tip

技術分享圖片

技術分享圖片

技術分享圖片

但是,這個接口在沒有登錄的情況下會有請求頻率檢測。如果一段時間內訪問太過頻繁,比如打開這個鏈接,一直不斷刷新,則會看到請求頻率過高的提示,如下圖所示。

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

一、本節目標

我們以新浪微博為例來實現一個Cookies池的搭建過程。Cookies池中保存了許多新浪微博賬號和登錄後的Cookies信息,並且Cookies池還需要定時檢測每個Cookies的有效性,如果某Cookies無效,那就刪除該Cookies並模擬登錄生成新的Cookies。同時Cookies池還需要一個非常重要的接口,即獲取隨機Cookies的接口,Cookies運行後,我們只需請求該接口,即可隨機獲得一個Cookies並用其爬取。

由此可見,Cookies池需要有自動生成Cookies、定時檢測Cookies、提供隨機Cookies等幾大核心功能。

二、準備工作

搭建之前肯定需要一些微博的賬號。需要安裝好Redis數據庫並使其正常運行。需要安裝Python的RedisPy、requests、Selelnium、Flask庫。另外,還需要安裝Chrome瀏覽器並配置好ChromeDriver。

三、Cookies池架構

Cookies的架構和代理池類似,同樣是4個核心模塊,如下圖所示。

技術分享圖片

技術分享圖片

四、Cookies池的實現

首先分別了解各個模塊的實現過程。

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

2. 生成模塊

生成模塊負責獲取各個賬號信息並模擬登錄,隨後生成Cookies並保存。我們首先獲取兩個Hash的信息,看看賬戶的Hash比Cookies的Hash多了哪些還沒有生成Cookies的賬號,然後將剩余的賬號遍歷,再去生成Cookies即可。

這裏主要邏輯就是找出那些還沒有對應Cookies的賬號,然後再逐個獲取Cookies,代碼如下:

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

3. 檢測模塊

我們現在可以用生成模塊來生成Cookies,但還是免不了Cookies失效的問題,例如時間太長導致Cookies失效,或者Cookies使用太頻繁導致無法正常請求網頁。如果遇到這樣的Cookies,我們肯定不能讓它繼續保存在數據庫裏。

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

4. 接口模塊

生成模塊和檢測模塊如果定時運行就可以完成Cookies實時檢測和更新。但是Cookies最終還是需要給爬蟲來用,同時一個Cookies池可供多個爬蟲使用,所以我們還需要定義一個Web接口,爬蟲訪問此接口便可以取到隨機的Cookies。我們采用Flask來實現接口的搭建,代碼如下所示:

技術分享圖片

我們同樣需要實現通用的配置來對接不同的站點,所以接口鏈接的第一個字段定義為站點名稱,第二個字段定義為獲取的方法,例如,/weibo/random是獲取微博的隨機Cookies,/zhihu/random是獲取知乎的隨機Cookies。

5. 調度模塊

最後,我們再加一個調度模塊讓這幾個模塊配合運行起來,主要的工作就是驅動幾個模塊定時運行,同時各個模塊需要在不同進程上運行,實現如下所示:

技術分享圖片

這裏用到了兩個重要的配置,即產生模塊類和測試模塊類的字典配置,如下所示:

技術分享圖片

Scheduler裏將字典進行遍歷,同時利用 eval() 動態新建各個類的對象,調用其入口run() 方法運行各個模塊。同時,各個模塊的多進程使用了multiprocessing中的Process類,調用其 start() 方法即可啟動各個進程。

另外,各個模塊還設有模塊開關,我們可以在配置文件中自由設置開關的開啟和關閉,如下所示:

技術分享圖片

技術分享圖片

以上所示是程序運行的控制臺輸出內容,我們從中可以看到各個模塊都正常啟動,測試模塊逐個測試Cookies,生成模塊獲取尚未生成Cookies的賬號的Cookies,各個模塊並行運行,互不幹擾。

我們可以訪問接口獲取隨機的Cookies,如下圖所示。

技術分享圖片

爬蟲只需要請求該接口就可以實現隨機Cookies的獲取。

五、本節代碼

技術分享圖片

歡迎大家關註我的博客:https://home.cnblogs.com/u/sm123456/

歡迎大家加入萬人交流學習群:125240963

自從會了這招,我就再也不擔心我的爬蟲會被封了!搭建Cookies池