爬取網站總是被封?大神教你搭建Cookies池,以後遠離IP被封

来源:https://www.cnblogs.com/Python6359/archive/2018/07/12/9302302.html
-Advertisement-
Play Games

摘要 本文作者:崔慶才 GitHub地址:https://github.com/Python3WebSpider/CookiesPool 小編推薦一本崔大大寫的網路爬蟲的書籍《Python3網路爬蟲開發實戰》 Python學習交流群:125240963即可獲取 很多時候,在爬取沒有登錄的情況下,我們 ...


爬取網站總是被封?大神教你搭建Cookies池,以後遠離IP被封

 

摘要

本文作者:崔慶才

GitHub地址:https://github.com/Python3WebSpider/CookiesPool

小編推薦一本崔大大寫的網路爬蟲的書籍《Python3網路爬蟲開發實戰》

Python學習交流群:125240963即可獲取

很多時候,在爬取沒有登錄的情況下,我們也可以訪問一部分頁面或請求一些介面,因為畢竟網站本身需要做SEO,不會對所有頁面都設置登錄限制。

但是,不登錄直接爬取會有一些弊端,弊端主要有以下兩點。

  1. 設置了登錄限制的頁面無法爬取。比如論壇,博客等等
  2. 如果沒有登錄請求頻繁就很容易被限制或者IP直接被封

下麵我們就第二種情況做一個簡單的實驗。以微博為例,我們先找到一個Ajax介面,例如新浪財經官方微博的信息介面

如果用瀏覽器直接訪問,返回的數據是JSON格式,如下圖所示:

爬取網站總是被封?大神教你搭建Cookies池,以後遠離IP被封

 

但是如果頻繁訪問的話:

爬取網站總是被封?大神教你搭建Cookies池,以後遠離IP被封

 

登錄微博賬號之後重新打開此鏈接,則頁面正常顯示介面的結果,而未登錄的頁面仍然顯示請求過於頻繁,如下圖所示:

爬取網站總是被封?大神教你搭建Cookies池,以後遠離IP被封

 

我們以新浪微博為例來實現一個Cookies池的搭建過程。

準備工作

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

Cookies池架構

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

爬取網站總是被封?大神教你搭建Cookies池,以後遠離IP被封

 

Cookies池架構的基本模塊分為4塊:存儲模塊、生成模塊、檢測模塊、介面模塊。

爬取網站總是被封?大神教你搭建Cookies池,以後遠離IP被封

 

Cookies池的實現

存儲模塊

需要存儲的內容無非就是賬號信息和Cookies信息。

建立兩個Hash,結構分別如下圖所示。

爬取網站總是被封?大神教你搭建Cookies池,以後遠離IP被封

 

爬取網站總是被封?大神教你搭建Cookies池,以後遠離IP被封

 

Hash的Key就是賬號,Value對應著密碼或者Cookies。

接下來我們創建一個存儲模塊類,用以提供一些Hash的基本操作,代碼如下:

爬取網站總是被封?大神教你搭建Cookies池,以後遠離IP被封

 

生成模塊

生成模塊負責獲取各個賬號信息並模擬登錄,隨後生成Cookies並保存。

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

爬取網站總是被封?大神教你搭建Cookies池,以後遠離IP被封

 

因為我們對接的是新浪微博,前面我們已經破解了新浪微博的四宮格驗證碼,在這裡我們直接對接過來即可,不過現在需要加一個獲取Cookies的方法,並針對不同的情況返回不同的結果,邏輯如下所示:

爬取網站總是被封?大神教你搭建Cookies池,以後遠離IP被封

 

這裡返回結果的類型是字典,並且附有狀態碼status,在生成模塊里我們可以根據不同的狀態碼做不同的處理。例如

狀態碼為1的情況:表示成功獲取Cookies,我們只需要將Cookies保存到資料庫即可。

狀態碼為2的情況:代表用戶名或密碼錯誤,那麼我們就應該把當前資料庫中存儲的賬號信息刪除。

狀態碼為3的情況:代表登錄失敗的一些錯誤,此時不能判斷是否用戶名或密碼錯誤,也不能成功獲取Cookies,那麼簡單提示再進行下一個處理即可。

代碼實現如下所示:

爬取網站總是被封?大神教你搭建Cookies池,以後遠離IP被封

 

檢測模塊

檢測模塊需要做的就是檢測Cookies失效,然後將其從數據中移除。

我們還需要增加一個定時檢測模塊,它負責遍歷池中的所有Cookies,同時設置好對應的檢測鏈接,我們用一個個Cookies去請求這個鏈接。

為了實現通用可擴展性,我們首先定義一個檢測器的父類,聲明一些通用組件,實現如下所示:

爬取網站總是被封?大神教你搭建Cookies池,以後遠離IP被封

 

如檢測微博的就可以定義為WeiboValidTester,實現其獨有的test()方法來檢測微博的Cookies是否合法,然後做相應的處理,所以在這裡我們還需要再加一個子類來繼承這個ValidTester,重寫其test()方法,實現如下:

爬取網站總是被封?大神教你搭建Cookies池,以後遠離IP被封

 

介面模塊

爬取網站總是被封?大神教你搭建Cookies池,以後遠離IP被封

 

調度模塊

爬取網站總是被封?大神教你搭建Cookies池,以後遠離IP被封

 

運行效果

三個進程全部開啟:

爬取網站總是被封?大神教你搭建Cookies池,以後遠離IP被封

 

Python學習交流群:125240963領取小編精心準備的海量Python學習資料


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 簡介 之前公司用的是Consul進行服務發現以及服務管理,自己一直以來只是用一下,但是沒有具體的深入,覺得學習不可以這樣,所以稍微研究了一下。 網上有很多關於Consul的介紹和對比,我這裡也不獻醜了,大家搜索的時候可能會經常看到這麼一個表格,此表格採摘自:https://luyiisme.gith ...
  • Dubbo是Alibaba開源的分散式服務框架,它最大的特點是按照分層的方式來架構,使用這種方式可以使各個層之間解耦合(或者最大限度地松耦合)。從服務模型的角度來看,Dubbo採用的是一種非常簡單的模型,要麼是提供方提供服務,要麼是消費方消費服務,所以基於這一點可以抽象出服務提供方(Provider ...
  • 環境 CentOS 6/7 x64 Python:2 .7.6 Etcd: 3.2.18 Confd:0 .16.0 Nginx: 1.12.1 效果演示 一,拓撲圖: 二、涉及軟體 ETD: 。分散式KV存儲系統,一般用於共用配置和服務註冊與發現是ETOS存儲格式類似於文件系統,以根“/”開始下麵 ...
  • 前提:搭建好redis集群環境,搭建方式請看:https://www.cnblogs.com/xymBlog/p/9300574.html 1. 新建工程,pom.xml文件中添加redis支持 <dependency> <groupId>org.springframework.boot</grou ...
  • 版權聲明:未經博主允許不得轉載 前言: 學習微信小程式應該不怎麼難吧~下麵我來記錄一下學習筆記,在學微信小程式的時候,如果你有 的基礎,那麼你就很快地上手掌握的。下麵提供微信小程式官方地址:https://developers.weixin.qq.com/miniprogram/dev/framew ...
  • eclipse創建gradle多模塊有兩種方式 第一種方式: 第一步:創建多個獨立gradle項目: 第二步: 編輯父模塊gradle-multi 的settings.gradle文件: 這種方式和官方給出的多模塊管理配置有點差別,多了設置項目的projectDir。怎麼樣能做到官方配置 inclu ...
  • Python 3.7.0 集合常用方法 ...
  • Java web筆記(更新ing) 一、HTTP協議 HTTP(超文本傳輸協議),它是一種主流B/S架構中應用的通信協議。具有以下特點: 1、無狀態 服務端不會記錄客戶端每次提交的請求,伺服器一旦相應客戶端之後,就會結束本次的通信過程。客戶端下一次的請求是一個新的 連接,和上一次通信沒有任何關係。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...