97久久综合亚洲色HEZYO,曰韩无码二三区中文字幕,免费超爽大片黄,国产女人爽的流水毛片

網(wǎng)站logo
×

首頁 > 最新資訊 > Scrapy 框架插件之 IP 代理池

Scrapy 框架插件之 IP 代理池

發(fā)布時間 2019-09-09


       現(xiàn)在很多網(wǎng)站都是對單個 IP 地址有訪問次數(shù)限制,如果你在短時間內(nèi)訪問過于頻繁。該網(wǎng)站會封掉你 IP,讓你在一段時間內(nèi)無法正常該網(wǎng)站。突破反爬蟲機制的一個重要舉措就是代理 IP。擁有龐大穩(wěn)定的 IP 代理,在爬蟲工作中將起到重要的作用,但是從成本的角度來說,一般穩(wěn)定的 IP 池都很貴。因此,流冠代理尋找了為 Scrapy 爬蟲的免費 IP 代理池插件。

1 特點

        該插件適用的程序是基于 Scrapy 框架編寫的爬蟲程序。插件通過爬取免費代理地址,然后過濾掉無效 IP 代理后存放到 Mysql 數(shù)據(jù)庫。另外,它會每 10 分鐘輪詢數(shù)據(jù)庫中的 IP 代理數(shù)量。如果代理地址因為連接失敗次數(shù)超過 3 次被刪除,從而導致代理不夠,它會后臺重新爬取新的 IP 代理。

2 項目說明

  • startrun.py
    項目的主入口。它負責啟動 Scrapy 爬蟲和代理池。

  • your_scrapy_project
    該目錄下主要存放兩個文件:config.py 和 settings.py。config.py 是代理池的項目配置信息。而 settings.py 是你的 Scrapy 爬蟲項目的配置參考代碼。

  • ProxyPoolWorker.py
    ProxyPoolWorker.py 是 IP代理池模塊的管理類,負責啟動和維護 IP 代理池。

  • proxyDBManager.py
    proxyDBManager.py 位于 dbManager 包下。它是數(shù)據(jù)庫操作類。主要工作是創(chuàng)建數(shù)據(jù)庫表、往數(shù)據(jù)庫中插入 IP 代理、查詢數(shù)據(jù)庫中剩余的 IP 代理總數(shù)、從數(shù)據(jù)庫中隨機查詢一個 IP 代理、對連接超時或失敗的 IP 代理做處理。

  • proxyModel.py
    proxyModel.py 在 model 包下。它是 IP 代理對象類。

  • requestEnginer.py
    requestEnginer.py 位于 requester 目錄下。requestEnginer 是整個爬蟲代理池的網(wǎng)絡(luò)引擎。它采用 Session 的形式來發(fā)起 HTTP 請求。同時,它還負責驗證代理地址有效性, 達到過濾掉無用 IP 代理的目的。

  • scrapy
    scrapy 目錄是一些 Scrapy 框架的自定義中間件。RandomUserAgentMiddleware.py 是為 HTTP 請求隨機設(shè)置個 User-agent。middlewares.py 有兩個職責。一是為 HTTP 請求隨機設(shè)置個 IP 代理。二是負責捕獲并處理 HTTP 異常請求。

  • spiders
    該包主要是爬取各大代理網(wǎng)站的爬蟲。

3 使用方法

3.1 安裝依賴

使用本插件,你需要通過 pip 安裝以下依賴:

  • requests
  • apscheduler
  • pymysql

3.2 修改配置

  1. 將 startrun.py 放到你的 Scrapy 項目的主目錄下。例如你項目名為 demo,那么你需要放到 demo 的目錄下。

  2. 修改 config.py 里面的 Mysql 相關(guān)配置信息。然后將其放到你的 Scrapy 項目的二級目錄下。假如你項目名為 demo,那么你需要放到 demo /demo 的目錄下。

  3. 參考 setting.py,修改你的 Scrapy 項目中的 setting.py 文件。主要是在你項目中增加以下代碼:

# 默認使用 IP 代理池
if IF_USE_PROXY:
    DOWNLOADER_MIDDLEWARES = {
        # 第二行的填寫規(guī)則
        #  yourproject.myMiddlewares(文件名).middleware類

        # 設(shè)置 User-Agent
        'scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware': None,
        'proxyPool.scrapy.RandomUserAgentMiddleware.RandomUserAgentMiddleware': 400,

        # 設(shè)置代理
        'scrapy.contrib.downloadermiddleware.httpproxy.HttpProxyMiddleware': None,
        'proxyPool.scrapy.middlewares.ProxyMiddleware': 100,

        # 設(shè)置自定義捕獲異常中間層
        'proxyPool.scrapy.middlewares.CatchExceptionMiddleware': 105,
    }