<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何讓爬蟲更簡單的使用這些代理?

馬哥Linux運維 ? 來源:未知 ? 作者:李倩 ? 2018-06-04 17:03 ? 次閱讀

爬蟲代理IP池

公司做分布式深網爬蟲,搭建了一套穩定的代理池服務,為上千個爬蟲提供有效的代理,保證各個爬蟲拿到的都是對應網站有效的代理IP,從而保證爬蟲快速穩定的運行,當然在公司做的東西不能開源出來。不過呢,閑暇時間手癢,所以就想利用一些免費的資源搞一個簡單的代理池服務。

1、問題

代理IP從何而來?剛自學爬蟲的時候沒有代理IP就去西刺、快代理之類有免費代理的網站去爬,還是有個別代理能用。當然,如果你有更好的代理接口也可以自己接入。免費代理的采集也很簡單,無非就是:訪問頁面頁面 —> 正則/xpath提取 —> 保存

如何保證代理質量?可以肯定免費的代理IP大部分都是不能用的,不然別人為什么還提供付費的(不過事實是很多代理商的付費IP也不穩定,也有很多是不能用)。所以采集回來的代理IP不能直接使用,可以寫檢測程序不斷的去用這些代理訪問一個穩定的網站,看是否可以正常使用。這個過程可以使用多線程或異步的方式,因為檢測代理是個很慢的過程。

采集回來的代理如何存儲?這里不得不推薦一個高性能支持多種數據結構的NoSQL數據庫SSDB,用于代理Redis。支持隊列、hash、set、k-v對,支持T級別數據。是做分布式爬蟲很好中間存儲工具。

如何讓爬蟲更簡單的使用這些代理?答案肯定是做成服務咯,python有這么多的web框架,隨便拿一個來寫個api供爬蟲調用。這樣有很多好處,比如:當爬蟲發現代理不能使用可以主動通過api去delete代理IP,當爬蟲發現代理池IP不夠用時可以主動去refresh代理池。這樣比檢測程序更加靠譜。

2、代理池設計

代理池由四部分組成:

ProxyGetter:代理獲取接口,目前有5個免費代理源,每調用一次就會抓取這個5個網站的最新代理放入DB,可自行添加額外的代理獲取接口;

DB:用于存放代理IP,現在暫時只支持SSDB。至于為什么選擇SSDB,大家可以參考這篇文章,個人覺得SSDB是個不錯的Redis替代方案,如果你沒有用過SSDB,安裝起來也很簡單,可以參考這里;

Schedule:計劃任務用戶定時去檢測DB中的代理可用性,刪除不可用的代理。同時也會主動通過ProxyGetter去獲取最新代理放入DB;

ProxyApi:代理池的外部接口,由于現在這么代理池功能比較簡單,花兩個小時看了下Flask,愉快的決定用Flask搞定。功能是給爬蟲提供get/delete/refresh等接口,方便爬蟲直接使用。

3、代碼模塊

Python中高層次的數據結構,動態類型和動態綁定,使得它非常適合于快速應用開發,也適合于作為膠水語言連接已有的軟件部件。用Python來搞這個代理IP池也很簡單,代碼分為6個模塊:

Api:api接口相關代碼,目前api是由Flask實現,代碼也非常簡單??蛻舳苏埱髠鹘oFlask,Flask調用ProxyManager中的實現,包括get/delete/refresh/get_all;

DB:數據庫相關代碼,目前數據庫是采用SSDB。代碼用工廠模式實現,方便日后擴展其他類型數據庫;

Manager:get/delete/refresh/get_all等接口的具體實現類,目前代理池只負責管理proxy,日后可能會有更多功能,比如代理和爬蟲的綁定,代理和賬號的綁定等等;

ProxyGetter:代理獲取的相關代碼,目前抓取了快代理、代理66、有代理、西刺代理、guobanjia這個五個網站的免費代理,經測試這個5個網站每天更新的可用代理只有六七十個,當然也支持自己擴展代理接口;

Schedule:定時任務相關代碼,現在只是實現定時去刷新代碼,并驗證可用代理,采用多進程方式;

Util:存放一些公共的模塊方法或函數,包含GetConfig:讀取配置文件config.ini的類,ConfigParse: 集成重寫ConfigParser的類,使其對大小寫敏感,Singleton:實現單例,LazyProperty:實現類屬性惰性計算。等等;

其他文件:配置文件:Config.ini,數據庫配置和代理獲取接口配置,可以在GetFreeProxy中添加新的代理獲取方法,并在Config.ini中注冊即可使用;

4、安裝

下載代碼:

git clone git@github.com:jhao104/proxy_pool.git或者直接到https://github.com/jhao104/proxy_pool 下載zip文件

安裝依賴:

pip install -r requirements.txt

啟動:

需要分別啟動定時任務和api到Config.ini中配置你的SSDB到Schedule目錄下:>>>python ProxyRefreshSchedule.py到Api目錄下:>>>python ProxyApi.py

5、使用

定時任務啟動后,會通過代理獲取方法fetch所有代理放入數據庫并驗證。此后默認每20分鐘會重復執行一次。定時任務啟動大概一兩分鐘后,便可在SSDB中看到刷新出來的可用的代理:

啟動ProxyApi.py后即可在瀏覽器中使用接口獲取代理,一下是瀏覽器中的截圖:index頁面:

get頁面:

get_all頁面:

爬蟲中使用,如果要在爬蟲代碼中使用的話, 可以將此api封裝成函數直接使用,例如:

import requestsdef get_proxy(): return requests.get("http://127.0.0.1:5000/get/").contentdef delete_proxy(proxy): requests.get("http://127.0.0.1:5000/delete/?proxy={}".format(proxy))# your spider codedef spider(): # .... requests.get('https://www.example.com', proxies={"http": "http://{}".format(get_proxy)}) # ....

6、最后

時間倉促,功能和代碼都比較簡陋,以后有時間再改進。喜歡的在github上給個star。感謝!

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 代碼
    +關注

    關注

    30

    文章

    4589

    瀏覽量

    67222
  • python
    +關注

    關注

    52

    文章

    4700

    瀏覽量

    83647
  • 爬蟲
    +關注

    關注

    0

    文章

    77

    瀏覽量

    6599

原文標題:Python爬蟲代理池

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Python數據爬蟲學習內容

    。3.掌握一些常用的反爬蟲技巧。使用代理IP池、抓包、驗證碼的OCR處理等處理方式即可以解決大部分網站的反爬蟲策略。4.了解分布式存儲分布式這個東西,聽起來很恐怖,但其實就是利用多線程的原理
    發表于 05-09 17:25

    爬蟲可以采集哪些數據

    質的內容; 抓取房產網站買賣信息,分析房價變化趨勢、做不同區域的房價分析;爬取招聘網站職位信息,分析各行業人才需求情況及薪資水平。   二、爬蟲借用什么工具可以提高效率   1.換http代理——億牛云
    發表于 10-15 17:25

    什么語言適合寫爬蟲

    和框架實際上也要花費不少時間。比如我接觸的 Scrapy,配環境就配了兩天,對于里面復雜的結構更是云里霧里,任何爬蟲都可以只使用幾個簡單的庫來實現,雖然耗費了很多時間,但是對整個 HTTP 流程有了
    發表于 01-14 13:51

    什么語言適合寫爬蟲

    和框架實際上也要花費不少時間。比如我接觸的 Scrapy,配環境就配了兩天,對于里面復雜的結構更是云里霧里,任何爬蟲都可以只使用幾個簡單的庫來實現,雖然耗費了很多時間,但是對整個 HTTP 流程有了
    發表于 02-03 13:22

    爬蟲使用http代理的目的

    。通常一些爬蟲開發者為了能夠正常的采集數據,會選擇減慢采集速度或者是去網上找一些免費的代理ip,但是網上很多的免費ip都不可用,可用的也很可能不穩定,因此怎么樣在不侵犯對方利益的前提下正常的采集
    發表于 02-04 12:37

    網絡爬蟲之關于爬蟲http代理的常見使用方式

    網絡鏈接,代理平臺自動實現毫秒級代理IP切換,保證了網絡穩定性和速度,避免爬蟲客戶在代理IP策略優化上投入精力。這種方式適用于專做爬蟲的用戶
    發表于 04-26 17:43

    使用爬蟲代理錯誤問題解決方案

    的時候也會遇到各種問題。爬蟲代理HTTP狀態碼問題解決方案:代理使用失敗對方截圖看看代理代碼,代理
    發表于 08-21 17:28

    網絡爬蟲nodejs爬蟲代理配置

    。就算驗證碼通過了,也不會采集到數據,這也就是所謂的反爬蟲策略。所以這種情況下,越來越多的網絡爬蟲會利用代理IP去進行采集。目標網站限制了一個IP,可以換一個代理IP繼續進行業務采集。
    發表于 09-01 17:23

    Golang爬蟲語言接入代理?

    都是可以寫出一個爬蟲系統的。無論用什么爬蟲語言框架,長期使用一個IP去采集數據,肯定會收到限制。這種時候就需要使用爬蟲代理去解決問題。golang
    發表于 09-09 17:41

    什么是爬蟲?

    什么是爬蟲?爬蟲的價值?最簡單的python爬蟲爬蟲基本架構
    發表于 11-05 06:13

    Python爬蟲速成指南讓你快速的學會寫一個最簡單爬蟲

    本文主要內容:以最短的時間寫一個最簡單爬蟲,可以抓取論壇的帖子標題和帖子內容。 本文受眾:沒寫過爬蟲的萌新。
    的頭像 發表于 06-10 09:57 ?6908次閱讀
    Python<b class='flag-5'>爬蟲</b>速成指南讓你快速的學會寫一個最<b class='flag-5'>簡單</b>的<b class='flag-5'>爬蟲</b>

    如何維護爬蟲程序中的代理ip庫?

    數據。是做分布式爬蟲很好中間存儲工具。如何讓爬蟲簡單的使用這些代理?答案肯定是做成服務咯,python有這么多的web框架,隨便拿一個來寫
    發表于 12-21 10:53 ?266次閱讀

    高匿動態爬蟲代理ip怎么選擇?

    爬蟲采集的工程師們對高匿動態爬蟲代理ip肯定不陌生,也接觸過不少爬蟲代理ip的提供商家,那么對于爬蟲
    發表于 12-24 09:41 ?673次閱讀

    Python爬蟲:工作者常用的動態IP代理

    爬蟲工作者應該經常要與代理ip工具打交道,根據不同的抓取網站,大家要調用不同類型的動態ip代理。
    的頭像 發表于 06-28 16:29 ?3203次閱讀

    Python爬蟲:安全級別高的代理ip爬蟲

    現在是大數據的時代,無論是哪一個行業,對于數據都是有必要了解的,特別是代理ip在爬蟲中的使用。
    的頭像 發表于 06-28 16:29 ?2700次閱讀
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>