一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何讓爬蟲(chóng)更簡(jiǎn)單的使用這些代理?

馬哥Linux運(yùn)維 ? 來(lái)源:未知 ? 作者:李倩 ? 2018-06-04 17:03 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

爬蟲(chóng)代理IP池

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

1、問(wèn)題

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

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

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

如何讓爬蟲(chóng)更簡(jiǎn)單的使用這些代理?答案肯定是做成服務(wù)咯,python有這么多的web框架,隨便拿一個(gè)來(lái)寫(xiě)個(gè)api供爬蟲(chóng)調(diào)用。這樣有很多好處,比如:當(dāng)爬蟲(chóng)發(fā)現(xiàn)代理不能使用可以主動(dòng)通過(guò)api去delete代理IP,當(dāng)爬蟲(chó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è)人覺(jué)得SSDB是個(gè)不錯(cuò)的Redis替代方案,如果你沒(méi)有用過(guò)SSDB,安裝起來(lái)也很簡(jiǎn)單,可以參考這里;

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

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

3、代碼模塊

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

Api:api接口相關(guān)代碼,目前api是由Flask實(shí)現(xiàn),代碼也非常簡(jiǎn)單。客戶(hù)端請(qǐng)求傳給Flask,F(xiàn)lask調(diào)用ProxyManager中的實(shí)現(xiàn),包括get/delete/refresh/get_all;

DB:數(shù)據(jù)庫(kù)相關(guān)代碼,目前數(shù)據(jù)庫(kù)是采用SSDB。代碼用工廠模式實(shí)現(xiàn),方便日后擴(kuò)展其他類(lèi)型數(shù)據(jù)庫(kù);

Manager:get/delete/refresh/get_all等接口的具體實(shí)現(xiàn)類(lèi),目前代理池只負(fù)責(zé)管理proxy,日后可能會(huì)有更多功能,比如代理和爬蟲(chóng)的綁定,代理和賬號(hào)的綁定等等;

ProxyGetter:代理獲取的相關(guān)代碼,目前抓取了快代理、代理66、有代理、西刺代理、guobanjia這個(gè)五個(gè)網(wǎng)站的免費(fèi)代理,經(jīng)測(cè)試這個(gè)5個(gè)網(wǎng)站每天更新的可用代理只有六七十個(gè),當(dāng)然也支持自己擴(kuò)展代理接口;

Schedule:定時(shí)任務(wù)相關(guān)代碼,現(xiàn)在只是實(shí)現(xiàn)定時(shí)去刷新代碼,并驗(yàn)證可用代理,采用多進(jìn)程方式;

Util:存放一些公共的模塊方法或函數(shù),包含GetConfig:讀取配置文件config.ini的類(lèi),ConfigParse: 集成重寫(xiě)ConfigParser的類(lèi),使其對(duì)大小寫(xiě)敏感,Singleton:實(shí)現(xiàn)單例,LazyProperty:實(shí)現(xiàn)類(lèi)屬性惰性計(jì)算。等等;

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

4、安裝

下載代碼:

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

安裝依賴(lài):

pip install -r requirements.txt

啟動(dòng):

需要分別啟動(dòng)定時(shí)任務(wù)和api到Config.ini中配置你的SSDB到Schedule目錄下:>>>python ProxyRefreshSchedule.py到Api目錄下:>>>python ProxyApi.py

5、使用

定時(shí)任務(wù)啟動(dòng)后,會(huì)通過(guò)代理獲取方法fetch所有代理放入數(shù)據(jù)庫(kù)并驗(yàn)證。此后默認(rèn)每20分鐘會(huì)重復(fù)執(zhí)行一次。定時(shí)任務(wù)啟動(dòng)大概一兩分鐘后,便可在SSDB中看到刷新出來(lái)的可用的代理:

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

get頁(yè)面:

get_all頁(yè)面:

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

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、最后

時(shí)間倉(cāng)促,功能和代碼都比較簡(jiǎn)陋,以后有時(shí)間再改進(jìn)。喜歡的在github上給個(gè)star。感謝!

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4900

    瀏覽量

    70762
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4827

    瀏覽量

    86784
  • 爬蟲(chóng)
    +關(guān)注

    關(guān)注

    0

    文章

    83

    瀏覽量

    7511

原文標(biāo)題:Python爬蟲(chóng)代理池

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    什么語(yǔ)言適合寫(xiě)爬蟲(chóng)

    和框架實(shí)際上也要花費(fèi)不少時(shí)間。比如我接觸的 Scrapy,配環(huán)境就配了兩天,對(duì)于里面復(fù)雜的結(jié)構(gòu)更是云里霧里,任何爬蟲(chóng)都可以只使用幾個(gè)簡(jiǎn)單的庫(kù)來(lái)實(shí)現(xiàn),雖然耗費(fèi)了很多時(shí)間,但是對(duì)整個(gè) HTTP 流程有了
    發(fā)表于 01-14 13:51

    什么語(yǔ)言適合寫(xiě)爬蟲(chóng)

    和框架實(shí)際上也要花費(fèi)不少時(shí)間。比如我接觸的 Scrapy,配環(huán)境就配了兩天,對(duì)于里面復(fù)雜的結(jié)構(gòu)更是云里霧里,任何爬蟲(chóng)都可以只使用幾個(gè)簡(jiǎn)單的庫(kù)來(lái)實(shí)現(xiàn),雖然耗費(fèi)了很多時(shí)間,但是對(duì)整個(gè) HTTP 流程有了
    發(fā)表于 02-03 13:22

    爬蟲(chóng)使用http代理的目的

    。通常一些爬蟲(chóng)開(kāi)發(fā)者為了能夠正常的采集數(shù)據(jù),會(huì)選擇減慢采集速度或者是去網(wǎng)上找一些免費(fèi)的代理ip,但是網(wǎng)上很多的免費(fèi)ip都不可用,可用的也很可能不穩(wěn)定,因此怎么樣在不侵犯對(duì)方利益的前提下正常的采集
    發(fā)表于 02-04 12:37

    網(wǎng)絡(luò)爬蟲(chóng)之關(guān)于爬蟲(chóng)http代理的常見(jiàn)使用方式

    網(wǎng)絡(luò)鏈接,代理平臺(tái)自動(dòng)實(shí)現(xiàn)毫秒級(jí)代理IP切換,保證了網(wǎng)絡(luò)穩(wěn)定性和速度,避免爬蟲(chóng)客戶(hù)在代理IP策略?xún)?yōu)化上投入精力。這種方式適用于專(zhuān)做爬蟲(chóng)的用戶(hù)
    發(fā)表于 04-26 17:43

    使用爬蟲(chóng)代理錯(cuò)誤問(wèn)題解決方案

    的時(shí)候也會(huì)遇到各種問(wèn)題。爬蟲(chóng)代理HTTP狀態(tài)碼問(wèn)題解決方案:代理使用失敗對(duì)方截圖看看代理代碼,代理
    發(fā)表于 08-21 17:28

    網(wǎng)絡(luò)爬蟲(chóng)nodejs爬蟲(chóng)代理配置

    。就算驗(yàn)證碼通過(guò)了,也不會(huì)采集到數(shù)據(jù),這也就是所謂的反爬蟲(chóng)策略。所以這種情況下,越來(lái)越多的網(wǎng)絡(luò)爬蟲(chóng)會(huì)利用代理IP去進(jìn)行采集。目標(biāo)網(wǎng)站限制了一個(gè)IP,可以換一個(gè)代理IP繼續(xù)進(jìn)行業(yè)務(wù)采集。
    發(fā)表于 09-01 17:23

    Golang爬蟲(chóng)語(yǔ)言接入代理?

    都是可以寫(xiě)出一個(gè)爬蟲(chóng)系統(tǒng)的。無(wú)論用什么爬蟲(chóng)語(yǔ)言框架,長(zhǎng)期使用一個(gè)IP去采集數(shù)據(jù),肯定會(huì)收到限制。這種時(shí)候就需要使用爬蟲(chóng)代理去解決問(wèn)題。golang
    發(fā)表于 09-09 17:41

    Python爬蟲(chóng)速成指南你快速的學(xué)會(huì)寫(xiě)一個(gè)最簡(jiǎn)單爬蟲(chóng)

    本文主要內(nèi)容:以最短的時(shí)間寫(xiě)一個(gè)最簡(jiǎn)單爬蟲(chóng),可以抓取論壇的帖子標(biāo)題和帖子內(nèi)容。 本文受眾:沒(méi)寫(xiě)過(guò)爬蟲(chóng)的萌新。
    的頭像 發(fā)表于 06-10 09:57 ?7325次閱讀
    Python<b class='flag-5'>爬蟲(chóng)</b>速成指南<b class='flag-5'>讓</b>你快速的學(xué)會(huì)寫(xiě)一個(gè)最<b class='flag-5'>簡(jiǎn)單</b>的<b class='flag-5'>爬蟲(chóng)</b>

    如何維護(hù)爬蟲(chóng)程序中的代理ip庫(kù)?

    數(shù)據(jù)。是做分布式爬蟲(chóng)很好中間存儲(chǔ)工具。如何爬蟲(chóng)簡(jiǎn)單的使用這些
    發(fā)表于 12-21 10:53 ?422次閱讀

    高匿動(dòng)態(tài)爬蟲(chóng)代理ip怎么選擇?

    爬蟲(chóng)采集的工程師們對(duì)高匿動(dòng)態(tài)爬蟲(chóng)代理ip肯定不陌生,也接觸過(guò)不少爬蟲(chóng)代理ip的提供商家,那么對(duì)于爬蟲(chóng)
    發(fā)表于 12-24 09:41 ?854次閱讀

    Python爬蟲(chóng):工作者常用的動(dòng)態(tài)IP代理

    爬蟲(chóng)工作者應(yīng)該經(jīng)常要與代理ip工具打交道,根據(jù)不同的抓取網(wǎng)站,大家要調(diào)用不同類(lèi)型的動(dòng)態(tài)ip代理
    的頭像 發(fā)表于 06-28 16:29 ?3577次閱讀

    Python爬蟲(chóng):安全級(jí)別高的代理ip爬蟲(chóng)

    現(xiàn)在是大數(shù)據(jù)的時(shí)代,無(wú)論是哪一個(gè)行業(yè),對(duì)于數(shù)據(jù)都是有必要了解的,特別是代理ip在爬蟲(chóng)中的使用。
    的頭像 發(fā)表于 06-28 16:29 ?3017次閱讀

    python實(shí)現(xiàn)簡(jiǎn)單爬蟲(chóng)的資料說(shuō)明

    本文檔的主要內(nèi)容詳細(xì)介紹的是python實(shí)現(xiàn)簡(jiǎn)單爬蟲(chóng)的資料說(shuō)明。
    發(fā)表于 11-02 17:53 ?21次下載
    python實(shí)現(xiàn)<b class='flag-5'>簡(jiǎn)單</b><b class='flag-5'>爬蟲(chóng)</b>的資料說(shuō)明

    利用Python編寫(xiě)簡(jiǎn)單網(wǎng)絡(luò)爬蟲(chóng)實(shí)例

    利用 Python編寫(xiě)簡(jiǎn)單網(wǎng)絡(luò)爬蟲(chóng)實(shí)例2 實(shí)驗(yàn)環(huán)境python版本:3.3.5(2.7下報(bào)錯(cuò)
    發(fā)表于 02-24 11:05 ?14次下載

    詳細(xì)解讀爬蟲(chóng)多開(kāi)代理IP的用途,以及如何配置!

    爬蟲(chóng)多開(kāi)代理IP是一種在爬蟲(chóng)開(kāi)發(fā)中常用的技術(shù)策略,主要用于提高數(shù)據(jù)采集效率、避免IP被封禁以及獲取地域特定的數(shù)據(jù)。
    的頭像 發(fā)表于 09-14 07:55 ?814次閱讀