国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python爬蟲代理IP池實(shí)現(xiàn)方法

2020-02-23 04:14:32
字體:
供稿:網(wǎng)友

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

1、問題

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

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

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

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

2、代理池設(shè)計(jì)

代理池由四部分組成:

ProxyGetter:
代理獲取接口,目前有5個(gè)免費(fèi)代理源,每調(diào)用一次就會(huì)抓取這個(gè)5個(gè)網(wǎng)站的最新代理放入DB,可自行添加額外的代理獲取接口;

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

Schedule:
計(jì)劃任務(wù)用戶定時(shí)去檢測(cè)DB中的代理可用性,刪除不可用的代理。同時(shí)也會(huì)主動(dòng)通過ProxyGetter去獲取最新代理放入DB;

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

設(shè)計(jì)

[HTML_REMOVED] 設(shè)計(jì)

3、代碼模塊

Python中高層次的數(shù)據(jù)結(jié)構(gòu),動(dòng)態(tài)類型和動(dòng)態(tài)綁定,使得它非常適合于快速應(yīng)用開發(fā),也適合于作為膠水語言連接已有的軟件部件。用Python來搞這個(gè)代理IP池也很簡單,代碼分為6個(gè)模塊:

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 通山县| 泰州市| 耒阳市| 塘沽区| 全椒县| 余庆县| 石家庄市| 南汇区| 玉溪市| 从江县| 米林县| 饶河县| 安溪县| 棋牌| 托里县| 垣曲县| 迁西县| 屏东市| 嘉峪关市| 利川市| 西乌珠穆沁旗| 合江县| 新乐市| 齐齐哈尔市| 门源| 黎城县| 志丹县| 大同县| 平塘县| 江城| 饶河县| 莫力| 双桥区| 合水县| 荔浦县| 大同市| 顺平县| 建宁县| 信丰县| 长兴县| 长寿区|