1. 程式人生 > >爬蟲老是被封IP?看我大Python搭建高匿代理池!封IP你覺得可能嗎

爬蟲老是被封IP?看我大Python搭建高匿代理池!封IP你覺得可能嗎

0x01 寫在前面

常聽到很多人抱怨自己的IP因爬蟲次數太多而被網站遮蔽,不得不頻繁使用各種代理IP,卻又因為網上的公開代理大部分都是不能使用,而又要花錢花精力去申請VIP代理,幾番波折又遭遮蔽。特此寫一篇如何利用Python搭建代理池的文章,以降低時間及精力成本,實現自動化獲取活躍代理IP的功能。

說明①:可建立一個爬蟲程式守護程式(Daemon),有此方面需要的小夥伴可自行谷歌,在此不多做介紹。

說明②:可建立一個對外代理資訊介面,無論你用NodeJS或者Flask/Django或者PHP來寫都沒關係,我會在未來的更新中加上這個功能,在這篇文章中也不多做介紹。

BASE_URL = "https://proxy-list.org/english/index.php?p="
#IP地址及埠的正則 Re_Pattern_IP = re.compile("(.*):") Re_Pattern_PORT = re.compile(":(.*)") #網站有11頁,所以迴圈11次獲取所有代理IP及埠 for startingURL_Param in range(1,11): HTML_ProxyPage = requests.get(BASE_URL+str(startingURL_Param)).content soup = bs(HTML_ProxyPage,"html.parser") for Raw_ProxyInfo in soup.find_all("ul"
,{"class":None}): #此網站有用Base64簡單對代理進行了加密,所以這裡對其解碼 ip_port = base64.b64decode(Raw_ProxyInfo.find("li",{"class":"proxy"}).text.replace("Proxy('","").replace("')","")) #接下來利用正則從網頁資料中提取我們需要的資訊 IP = re.findall(Re_Pattern_IP, ip_port)[0] PORT = re.findall(Re_Pattern_PORT, ip_port)[0] TYPE = Raw_ProxyInfo.find
("li",{"class":"https"}).text

接下來是一段簡易代理池框架類的程式碼,提供代理資料庫的新增、刪除、可連線性檢測、匿名性檢測:

class ProxyPool: 
 #初始化爬蟲池資料庫
 def __init__(self,ProxyPoolDB):
 self.ProxyPoolDB = ProxyPoolDB
 self.conn = sqlite3.connect(self.ProxyPoolDB, isolation_level=None)
 self.cursor = self.conn.cursor()
 self.TB_ProxyPool = "TB_ProxyPool"
 self.cursor.execute("CREATE TABLE IF NOT EXISTS "+self.TB_ProxyPool+"(ip TEXT UNIQUE, port INTEGER, protocol TEXT)")


 #新增代理IP進代理池的介面
 def addProxy(self, IP, PORT, PROTOCOL): 
 self.cursor.execute("INSERT OR IGNORE INTO " + self.TB_ProxyPool+"(ip, port, protocol) VALUES (?,?,?)", [IP,PORT,PROTOCOL])


 #檢查代理的匿名性及可連線性
 def testConnection(self, IP, PORT, PROTOCOL):
 proxies = { PROTOCOL: IP+":"+PORT }
 try:
 OrigionalIP = requests.get("http://icanhazip.com", timeout=REQ_TIMEOUT).content
 MaskedIP = requests.get("http://icanhazip.com", timeout=REQ_TIMEOUT, proxies=proxies).content
 if OrigionalIP != MaskedIP:
 return True
 else:
 return False
 except: 
 return False


 #刪除代理IP對應的資料庫記錄
 def delRecord(self, IP):
 self.cursor.execute("DELETE FROM "+self.TB_ProxyPool+" WHERE ip=?",(IP,))

 
 #下面是對代理池進行去“失效IP”的程式碼: 
 #迴圈代理池,逐行測試IP地址埠協議是否可用
 def cleanNonWorking(self):
 for info in self.cursor.execute("SELECT * FROM "+self.TB_ProxyPool).fetchall():
 IP = info[0]
 PORT = str(info[1])
 PROTOCOL = info[2].lower()
 isAnonymous = self.testConnection(IP,PORT,PROTOCOL)
 if isAnonymous == False:
 #這條代理的可用性失效了,從資料庫裡刪除
 self.delRecord(IP)


 #通過檢測icanhazip.com回顯來檢測可用性及匿名性
 def testConnection(self, IP, PORT, PROTOCOL):
 proxies = { PROTOCOL: IP+":"+PORT }
 try:
 OrigionalIP = requests.get("http://icanhazip.com", timeout=REQ_TIMEOUT).content
 MaskedIP = requests.get("http://icanhazip.com", timeout=REQ_TIMEOUT, proxies=proxies).content
 if OrigionalIP != MaskedIP:
 return True
 else:
 return False
 except: 
 return False

0x05 完整程式碼

放在此文章中的是代理池的核心程式碼,旨在提供各位讀者能夠自己實現的思路及參考。完整程式碼可在我的Github主頁中找到(ProxyPool),Win7 64位、Ubuntu 16.04及Kali下用Python 2.7測試可執行。

進群:125240963  即可獲取數十遍PDF書籍!

相關推薦

爬蟲老是IPPython搭建代理IP覺得可能

0x01 寫在前面常聽到很多人抱怨自己的IP因爬蟲次數太多而被網站遮蔽,不得不頻繁使用各種代理IP,卻又因為網上的公開代理大部分都是不能使用,而又要花錢花精力去申請VIP代理,幾番波折又遭遮蔽。特此寫一篇如何利用Python搭建代理池的文章,以降低時間及精力成本,實現自動化獲

Python搭建一個簡單的代理經理再也不用擔心IP

其實每次爬東西的時候,特怕IP被封,所以每次都要把時間延遲設定得長一點... 這次用Python搭建一個簡單的代理池。獲取代理IP,然後驗證其有效性。 不過結果好像不是很理想,為什麼西刺代理的高匿代理都能用??? 不是說免費代理不好使嗎?真的是黑人問號臉... / 01 / 代理獲取

爬蟲IP是最頭痛的事情從零搭建異步爬蟲代理怎麽

nic bfc sco nbsp 技術 最大值 sta 服務器壓力 p s 如何使用 安裝 Redis 項目數據庫使用了 Redis,Redis 是一個開源(BSD 許可)的,內存中的數據結構存儲系統,它可以用作數據庫、緩存和消息中間件。所以請確保運行環境已經正確安裝了

雙十一,作為使用者怎麼優雅的薅阿里雲羊毛

阿里雲雙11活動,我一分錢沒花,白得了199元現金! 從阿里雲官方網站進入看到,今年阿里雲不走滿返、滿減路線了,開啟了一個大型拼團活動。雲伺服器99.5元,歷史新低啊。開團組團拉新分200萬紅包,最後百團大戰再分100萬紅包。 我今年是這麼薅的,先開了一個團,

想學習爬蟲的小夥伴進來,獨特的風格分分鐘教python爬蟲

當年我在學習爬蟲的時候,看了很多大牛的回答! 但是他們的回答都很像學霸講解題目,跳步無數,然後留下一句“不就是這樣推嘛”,讓一眾小白菜鳥一臉懵逼。。作為一個0起步(之前連python都不會),目前總算掌握基礎,開始向上進階的菜鳥,深知其中的不易,所以我會在這個回答裡,儘可能全面、細節地分享給大家

哥,您這篇Java集合,還有機會評優

集合在我們日常開發使用的次數數不勝數,`ArrayList`/`LinkedList`/`HashMap`/`HashSet`······信手拈來,抬手就拿來用,在 IDE 上龍飛鳳舞,但是作為一名合格的優雅的程式猿,僅僅瞭解怎麼使用`API`是遠遠不夠的,如果在呼叫`API`時,知道它內部發生了什麼事情,就

如何阻止某個IP訪問的電腦-用本地安全策略限制某個IP

host win tin icmp 通訊協議 tina bytes 系統 建立 方法一:通過windows自帶的安全策略限制打開本地安全設置,點“IP安全策略,在本地機器”——>創建IP安全策略---->下一步---->名稱隨便寫,如輸入阻止,然後一直點下

爬蟲ip代理代理ip的必要性

對於爬蟲來說,在聽到ip代理的時候,聽得最多的莫過於透明代理、匿名代理、高匿代理這幾個詞了,那麼分別是什麼意思呢?互相之間有什麼樣的區別呢? 為什麼說爬蟲ip代理一定要使用高匿代理呢? 帶著這些問題,讓我們一起來揭開匿名級別的面紗。 第一高匿名:伺服器不知道你使用了代理ip和不知

python 爬蟲 獲取西刺網免費代理ip

import chardet import requests from scrapy.selector import Selector import random from telnetlib import Telnet ip_list = [] def g

打造社工字典生成器,在python面前誰敢保證自己的密碼安全?

最近比較忙,技術都沒怎麼學,更別說寫原創文章了。今天感覺有點時間,決定寫一篇黑客工具類文章。算是介紹,也算是簡單使用,因為這個工具並不難,但是卻非常實用。這款工具就是社工字典生成器——CUPP     介紹 CUPP這款黑客工具和CRUNCH有點不同,C

百度的反爬機制很容易破解的三分鐘解決他的反爬

這篇文章的主要目的還是破解JS引數加密,百度翻譯的JS過程並不是很複雜,非常適合新手練手。 首先,開啟百度翻譯,隨便輸點詞語,點選翻譯。 百度的反爬機制很容易破解的!你看我三分鐘解決他的反爬! 進群進群:943752371可以獲取Python各類入門學習資料! 這是我的微信公眾

聽歌音樂還要付費?Python批量下載

百度VIP音樂爬取 網頁分析 分析音樂的真實地址 url拼接 獲取所有資料 批量獲取singid 程式碼編寫 獲取所有的songid 根據songid獲取音樂的真實地址 儲存音樂檔案 無版權音樂稻香的爬取 網頁分析 目標站點:網頁

人生苦短,Python--分分鐘下載知乎美圖給

起 上次說了要爬知乎的圖片,於是花了一下午的時間去完成這件事,發現暫時接觸到的爬蟲總是逃脫不了一個規律: 模擬登陸 獲取真實網頁HTML原始碼 解析獲取到的網頁原始碼 獲取想要的資源(下載到某個資料夾或者輸出到表格中整合起來) 也許和我說的有一些出入,

python:多執行緒抓取西刺和快站 代理IP

  一開始是打算去抓取一些資料,但是總是訪問次數多了之後被封IP,所以做了一個專門做了個工具用來抓取在西刺和快站的高匿IP。   執行環境的話是在python3.5下執行的,需要requests庫   在製作的過程中也參考的以下網上其他人的做法,但是發現很大一部分都不是多執行緒去抓取有點浪費時間了,又或者

家裝輔材十祕密,吉材易達說的這些都知道

裝修時,業主最關心的可能就是傢俱、家裝主材等等,卻對於家裝輔材完全沒有認識,那麼家裝輔材交給了裝修公司,我們是否就不需要了解那麼多了呢?那麼跟隨小編一起來了解了解家裝輔材的十大祕密有哪些,再看看你是否需要了解家裝輔材吧! 輔材,也叫輔料。指裝修過程中的常用基礎

求求,下次面試別再問什麼是 Spring AOP 和代理

作者 | 倪升武 責編 | 胡巍巍 我們知道,Spring 中 AOP 是一大核心技術,也是面試中經常會被問到的問題,最近我在網上也看到很多面試題,其中和 Spring AOP 相關的就有不少,這篇文章主要來總結下相關的技術點,希望對大家有用

5python專案,如何上手去做,教零基礎上手到精通

這5大python專案,剛入門的看著有壓力,其實不然。github裡的能找到不讓你畏懼的方法(這個網站有中文翻譯),跟著大牛走很快就能完成。如果要真正自己完成的話,要自己花時間去打磨,舉一反三。等把這其中一個專案,敲完,再找其他的小專案,就小意思了。 其實有很多的小夥伴的是因為畏懼大型的

Python爬了12萬條影評,告訴《戰狼Ⅱ》都在說些啥

截止到 8 月 24 日,《戰狼Ⅱ》上映的第 29 天,它的票房已超 52 億人民幣,真正成為唯一一部挺進世界影史票房前 100 名的亞洲電影。 拋開爆炸的票房不說,電影還激起了觀眾各種情緒,甚至有人放狠話說:敢噴《戰狼Ⅱ》的,要麼是智障,要麼是公敵,就是這麼簡單粗暴。 大家對《

[轉]求求,下次面試別再問什麼是 Spring AOP 和代理

求求你,下次面試別再問我什麼是 Spring AOP 和代理了! 倪升武 CSDN 1周前 作者 | 倪升武 責編 | 胡巍巍 我們知道,Spring 中 AOP 是一大核心技術,也是面試中經常會被問到的問題,最近我在網上也看到很多面

可能是2018年IT界規模最的裁員事件了,作為程式設計師的慌了

這可能是2018年IT界規模最大的裁員事件了。近日,面對難看的財務報表,美國最大的通訊運營商、市值2200億美金的Verizon,遣散了4.4萬名老員工。 在國內,解決了80%就業的中小企業也遭遇了新一輪生存困境......社會很殘酷,追求穩定的人都被時代拋棄,有遠見的人,