Scrapy 框架插件之 IP 代理池

圖片來自 unsplash

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

1 特點(diǎn)

該插件適用的程序是基于 Scrapy 框架編寫的爬蟲程序询微。插件通過爬取免費(fèi)代理地址,然后過濾掉無效 IP 代理后存放到 Mysql 數(shù)據(jù)庫狂巢。另外撑毛,它會每 10 分鐘輪詢數(shù)據(jù)庫中的 IP 代理數(shù)量。如果代理地址因?yàn)檫B接失敗次數(shù)超過 3 次被刪除唧领,從而導(dǎo)致代理不夠藻雌,它會后臺重新爬取新的 IP 代理。

2 收集的代理網(wǎng)站

  • 無憂代理(data5u)
  • ip181 代理
  • 快代理
  • 西刺代理

3 項(xiàng)目說明

  • startrun.py
    項(xiàng)目的主入口斩个。它負(fù)責(zé)啟動 Scrapy 爬蟲和代理池胯杭。

  • your_scrapy_project
    該目錄下主要存放兩個文件:config.pysettings.py。config.py 是代理池的項(xiàng)目配置信息受啥。而 settings.py 是你的 Scrapy 爬蟲項(xiàng)目的配置參考代碼做个。

  • ProxyPoolWorker.py
    ProxyPoolWorker.py 是 IP代理池模塊的管理類,負(fù)責(zé)啟動和維護(hù) IP 代理池滚局。

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

  • proxyModel.py
    proxyModel.pymodel 包下。它是 IP 代理對象類丑孩。

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

  • scrapy
    scrapy 目錄是一些 Scrapy 框架的自定義中間件仗岖。RandomUserAgentMiddleware.py 是為 HTTP 請求隨機(jī)設(shè)置個 User-agent逃延。middlewares.py 有兩個職責(zé)。一是為 HTTP 請求隨機(jī)設(shè)置個 IP 代理轧拄。二是負(fù)責(zé)捕獲并處理 HTTP 異常請求揽祥。

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

4 使用方法

4.1 安裝依賴

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

  • requests
  • apscheduler
  • pymysql

4.2 修改配置

  1. startrun.py 放到你的 Scrapy 項(xiàng)目的主目錄下拄丰。例如你項(xiàng)目名為 demo,那么你需要放到 demo 的目錄下俐末。

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

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

# 默認(rèn)使用 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,
    }

5 寫在最后

本項(xiàng)目目前是第一版恢准,可能有些不完善的地方。如果你有寶貴的完善建議或者有更多的代理網(wǎng)站甫题,可以反饋給我馁筐。我會持續(xù)完善本項(xiàng)目。最后坠非,本項(xiàng)目也在 github 上開源了敏沉。傳送門


上篇閱讀:Python 實(shí)現(xiàn)識別弱圖片驗(yàn)證碼
推薦閱讀:Python定時(shí)任務(wù)(下)


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市炎码,隨后出現(xiàn)的幾起案子盟迟,更是在濱河造成了極大的恐慌,老刑警劉巖潦闲,帶你破解...
    沈念sama閱讀 221,430評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件攒菠,死亡現(xiàn)場離奇詭異,居然都是意外死亡歉闰,警方通過查閱死者的電腦和手機(jī)辖众,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評論 3 398
  • 文/潘曉璐 我一進(jìn)店門卓起,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人凹炸,你說我怎么就攤上這事戏阅。” “怎么了啤它?”我有些...
    開封第一講書人閱讀 167,834評論 0 360
  • 文/不壞的土叔 我叫張陵奕筐,是天一觀的道長。 經(jīng)常有香客問我变骡,道長离赫,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,543評論 1 296
  • 正文 為了忘掉前任锣光,我火速辦了婚禮笆怠,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘誊爹。我一直安慰自己蹬刷,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,547評論 6 397
  • 文/花漫 我一把揭開白布频丘。 她就那樣靜靜地躺著办成,像睡著了一般。 火紅的嫁衣襯著肌膚如雪搂漠。 梳的紋絲不亂的頭發(fā)上迂卢,一...
    開封第一講書人閱讀 52,196評論 1 308
  • 那天,我揣著相機(jī)與錄音桐汤,去河邊找鬼而克。 笑死,一個胖子當(dāng)著我的面吹牛怔毛,可吹牛的內(nèi)容都是我干的员萍。 我是一名探鬼主播,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼拣度,長吁一口氣:“原來是場噩夢啊……” “哼碎绎!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起抗果,我...
    開封第一講書人閱讀 39,671評論 0 276
  • 序言:老撾萬榮一對情侶失蹤筋帖,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后冤馏,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體日麸,經(jīng)...
    沈念sama閱讀 46,221評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,303評論 3 340
  • 正文 我和宋清朗相戀三年逮光,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了代箭。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片辕录。...
    茶點(diǎn)故事閱讀 40,444評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖梢卸,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情副女,我是刑警寧澤蛤高,帶...
    沈念sama閱讀 36,134評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站碑幅,受9級特大地震影響戴陡,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜沟涨,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,810評論 3 333
  • 文/蒙蒙 一恤批、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧裹赴,春花似錦喜庞、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,285評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至睛竣,卻和暖如春晰房,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背射沟。 一陣腳步聲響...
    開封第一講書人閱讀 33,399評論 1 272
  • 我被黑心中介騙來泰國打工殊者, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人验夯。 一個月前我還...
    沈念sama閱讀 48,837評論 3 376
  • 正文 我出身青樓猖吴,卻偏偏與公主長得像,于是被迫代替她去往敵國和親簿姨。 傳聞我的和親對象是個殘疾皇子距误,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,455評論 2 359

推薦閱讀更多精彩內(nèi)容

  • Python版本管理:pyenv和pyenv-virtualenvScrapy爬蟲入門教程一 安裝和基本使用Scr...
    inke閱讀 60,253評論 6 99
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,275評論 25 707
  • “一千字”第七天 今天確實(shí)很累,一直把頭埋在枕頭和書本的空隙間扁位。但還是忍不住寫點(diǎn)什么准潭。 我決定這個禮拜天就開始我最...
    深居石頭里的野豬閱讀 194評論 0 1
  • 日期 8月2日 早 “叮~ 队虺穑~” 他猛然睜開眼睛刑然,下意識看了墻上的鐘表,時(shí)針準(zhǔn)時(shí)停在7點(diǎn)整暇务,似乎他剛起...
    文山已幾閱讀 228評論 0 1
  • 其實(shí)自己已經(jīng)很久沒有靜下心來去看完一本書泼掠,現(xiàn)在就連看一些文章都沒有耐心了怔软,看到哪個標(biāo)題比較吸引就點(diǎn)進(jìn)去,看不到幾行...
    紅藍(lán)本閱讀 230評論 2 2