如何用Python搭建匿名代理池?搭建匿名代理池的方法
本篇文章给大家带来的内容是介绍如何用Python搭建匿名代理池?搭建匿名代理池的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助。
常听到很多人抱怨自己的IP因爬虫次数太多而被网站屏蔽,不得不频繁使用各种代理IP,却又因为网上的公开代理大部分都是不能使用,而又要花钱花精力去申请VIP代理,几番波折又遭屏蔽。特此写一篇如何利用Python搭建代理池的文章,以降低时间及精力成本,实现自动化获取活跃代理IP的功能。
运作原理
一、 网站代理获取
1. 爬免费代理网站的IP列表测试是否可用及是否是高匿
2. 若都是,则放进数据库,否则丢弃。
3. 重复第2步
二、 保证失效的代理能被尽快从代理池中挑出
1. 从爬虫数据库获取IP
2. 测试IP的可用性和匿名性
3. 如果可用且匿名,则保留,否则丢弃。
4. 重复第1步
说明①:可建立一个爬虫程序守护程序(Daemon),有此方面需要的小伙伴可自行谷歌,在此不多做介绍。
说明②:可建立一个对外代理信息接口,无论你用NodeJS或者Flask/Django或者PHP来写都没关系,在此也不多做介绍。
实现:
建议库: requests, BeautifulSoup, re, sqlite3。
其中,用requests库获取代理网站页面,用BeautifulSoup和re两库来进行代理信息获取,用sqlite3来对这些信息进行存取。
如果必要(如代理网站有反爬虫策略时),可用PhantomJS替代requests,或用相应库进行数据清理(如base64解码)。
下面简单展示一下各部分的代码:
首先是选择多个能爬取代理且不容易被屏蔽IP的网站,此处以proxy-list.org为例:
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
反思
这个项目是我当年用Python练手写的,以现在的程度再来回顾,逻辑不够严谨,各类功能太过耦合,不少段落需要重写,因为代码是在校园网内所跑,所以还需要考虑到网络连接的稳定性,这就造成部分代码之间的混乱关系。
通过icanhazip.com来检测代理匿名性的方法或许有效,但却忽略了X-Forwarded-For的HTTP头,所以有很大风险,必须改进。
验证代理池内代理的有效性,需要多线程,目前的方案效率太低。
完整代码
放在此文章中的是代理池的核心代码,旨在提供各位读者能够自己实现的思路及参考,Ubuntu 16.04及Kali下用Python 2.7测试可运行。
Atas ialah kandungan terperinci 如何用Python搭建匿名代理池?搭建匿名代理池的方法. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Python dan JavaScript mempunyai kelebihan dan kekurangan mereka sendiri dari segi komuniti, perpustakaan dan sumber. 1) Komuniti Python mesra dan sesuai untuk pemula, tetapi sumber pembangunan depan tidak kaya dengan JavaScript. 2) Python berkuasa dalam bidang sains data dan perpustakaan pembelajaran mesin, sementara JavaScript lebih baik dalam perpustakaan pembangunan dan kerangka pembangunan depan. 3) Kedua -duanya mempunyai sumber pembelajaran yang kaya, tetapi Python sesuai untuk memulakan dengan dokumen rasmi, sementara JavaScript lebih baik dengan MDNWebDocs. Pilihan harus berdasarkan keperluan projek dan kepentingan peribadi.

Dalam kod VS, anda boleh menjalankan program di terminal melalui langkah -langkah berikut: Sediakan kod dan buka terminal bersepadu untuk memastikan bahawa direktori kod selaras dengan direktori kerja terminal. Pilih arahan Run mengikut bahasa pengaturcaraan (seperti python python your_file_name.py) untuk memeriksa sama ada ia berjalan dengan jayanya dan menyelesaikan kesilapan. Gunakan debugger untuk meningkatkan kecekapan debug.

Kod VS boleh digunakan untuk menulis Python dan menyediakan banyak ciri yang menjadikannya alat yang ideal untuk membangunkan aplikasi python. Ia membolehkan pengguna untuk: memasang sambungan python untuk mendapatkan fungsi seperti penyempurnaan kod, penonjolan sintaks, dan debugging. Gunakan debugger untuk mengesan kod langkah demi langkah, cari dan selesaikan kesilapan. Mengintegrasikan Git untuk Kawalan Versi. Gunakan alat pemformatan kod untuk mengekalkan konsistensi kod. Gunakan alat linting untuk melihat masalah yang berpotensi lebih awal.

Sambungan kod VS menimbulkan risiko yang berniat jahat, seperti menyembunyikan kod jahat, mengeksploitasi kelemahan, dan melancap sebagai sambungan yang sah. Kaedah untuk mengenal pasti sambungan yang berniat jahat termasuk: memeriksa penerbit, membaca komen, memeriksa kod, dan memasang dengan berhati -hati. Langkah -langkah keselamatan juga termasuk: kesedaran keselamatan, tabiat yang baik, kemas kini tetap dan perisian antivirus.

Kod VS boleh dijalankan pada Windows 8, tetapi pengalaman mungkin tidak hebat. Mula -mula pastikan sistem telah dikemas kini ke patch terkini, kemudian muat turun pakej pemasangan kod VS yang sepadan dengan seni bina sistem dan pasangnya seperti yang diminta. Selepas pemasangan, sedar bahawa beberapa sambungan mungkin tidak sesuai dengan Windows 8 dan perlu mencari sambungan alternatif atau menggunakan sistem Windows yang lebih baru dalam mesin maya. Pasang sambungan yang diperlukan untuk memeriksa sama ada ia berfungsi dengan betul. Walaupun kod VS boleh dilaksanakan pada Windows 8, disyorkan untuk menaik taraf ke sistem Windows yang lebih baru untuk pengalaman dan keselamatan pembangunan yang lebih baik.

Python cemerlang dalam automasi, skrip, dan pengurusan tugas. 1) Automasi: Sandaran fail direalisasikan melalui perpustakaan standard seperti OS dan Shutil. 2) Penulisan Skrip: Gunakan Perpustakaan Psutil untuk memantau sumber sistem. 3) Pengurusan Tugas: Gunakan perpustakaan jadual untuk menjadualkan tugas. Kemudahan penggunaan Python dan sokongan perpustakaan yang kaya menjadikannya alat pilihan di kawasan ini.

VS Kod adalah nama penuh Visual Studio Code, yang merupakan editor kod dan persekitaran pembangunan yang dibangunkan oleh Microsoft. Ia menyokong pelbagai bahasa pengaturcaraan dan menyediakan penonjolan sintaks, penyiapan automatik kod, coretan kod dan arahan pintar untuk meningkatkan kecekapan pembangunan. Melalui ekosistem lanjutan yang kaya, pengguna boleh menambah sambungan kepada keperluan dan bahasa tertentu, seperti debuggers, alat pemformatan kod, dan integrasi Git. VS Kod juga termasuk debugger intuitif yang membantu dengan cepat mencari dan menyelesaikan pepijat dalam kod anda.

Ya, kod vs boleh menjalankan kod python. Untuk menjalankan Python dengan cekap dalam kod VS, lengkapkan langkah -langkah berikut: Pasang penterjemah Python dan konfigurasikan pembolehubah persekitaran. Pasang pelanjutan python dalam kod vs. Jalankan kod Python dalam terminal Vs Code melalui baris arahan. Gunakan keupayaan debugging VS dan pemformatan kod untuk meningkatkan kecekapan pembangunan. Mengamalkan tabiat pengaturcaraan yang baik dan gunakan alat analisis prestasi untuk mengoptimumkan prestasi kod.
