免费代理IP采集与筛选:Python自动化获取可用代理

发布时间:2026/7/11 14:03:54
免费代理IP采集与筛选:Python自动化获取可用代理 玩爬虫、做数据采集、进行网络测试的时候免费代理IP绝对是解决IP限流、被封禁问题的神器但手动找代理、一个个验证有效性真的太费时间了而且网上大部分免费代理都存在失效、延迟高、匿名性差的问题踩坑率超高。今天就带大家用Python全自动采集智能筛选批量校验免费代理IP一键搞定可用代理池全程不用手动操作新手也能直接跑通一、项目能干什么自动爬取国内主流免费代理站的HTTP/HTTPS代理IP智能筛选自动过滤失效、高延迟、低垃圾匿名代理批量校验代理可用性精准留下能直接用的存活代理自动IP去重避免重复代理浪费运行资源输出标准格式代理直接套用到爬虫、网络请求脚本中二、简单环境配置整个项目基于Python3开发只需要安装三个必备第三方库打开终端输入下面命令一键安装即可pip install requests lxml aiohttp简单说下每个库的作用不用深究安装就完事requests用来请求代理网站抓取原始IP数据lxml解析网页源码精准提取IP、端口、代理类型aiohttp异步批量校验代理速度比同步快好几倍三、代理IP自动采集模块我们本次选用西刺代理、66免费代理两个国内稳定的免费代理平台针对性适配爬取规则自动抓取公开的代理数据。采集逻辑超简单模拟浏览器访问网站 → 获取网页源码 → 解析提取代理数据 → 初步过滤无效代理。import requests from lxml import etree import re # 模拟浏览器请求头防止被网站直接拦截 HEADERS { User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 } # 存放原始采集到的代理数据 proxy_list [] # 1. 西刺代理采集HTTP/HTTPS def crawl_xici_proxy(): url https://www.xicidaili.com/nn/ try: res requests.get(url, headersHEADERS, timeout10) res.encoding utf-8 html etree.HTML(res.text) # 解析代理表格数据 tr_list html.xpath(//table[idip_list]//tr[position()1]) for tr in tr_list: ip tr.xpath(./td[2]/text())[0].strip() port tr.xpath(./td[3]/text())[0].strip() proxy_type tr.xpath(./td[6]/text())[0].strip().upper() # 只保留常用的HTTP/HTTPS代理 if proxy_type in [HTTP, HTTPS]: proxy_list.append({ ip: ip, port: port, type: proxy_type, proxy: f{ip}:{port} }) except Exception as e: print(f西刺代理采集失败{str(e)}) # 2. 66免费代理采集www.66daili.com def crawl_66_proxy(): url http://www.66daili.com/ try: res requests.get(url, headersHEADERS, timeout10) res.encoding utf-8 html etree.HTML(res.text) tr_list html.xpath(//table//tr[position()1]) for tr in tr_list: # 适配66代理网页表格字段规则 ip tr.xpath(./td[1]/text())[0].strip() port tr.xpath(./td[2]/text())[0].strip() proxy_type tr.xpath(./td[4]/text())[0].strip().upper() if proxy_type in [HTTP, HTTPS]: proxy_list.append({ ip: ip, port: port, type: proxy_type, proxy: f{ip}:{port} }) except Exception as e: print(f66免费代理采集失败{str(e)}) # 批量采集 自动去重 def crawl_all_proxy(): crawl_xici_proxy() crawl_66_proxy() # 去除重复的代理IP避免无效校验 unique_proxy [] seen set() for proxy in proxy_list: if proxy[proxy] not in seen: seen.add(proxy[proxy]) unique_proxy.append(proxy) print(f采集完成去重后原始代理数量{len(unique_proxy)}) return unique_proxy四、代理筛选 可用性批量校验刚采集下来的原始代理大部分都是失效的、延迟超高的根本没法直接用这里我们用异步校验的方式快速筛查出能用的代理效率拉满。筛选标准很实用请求超时不超过5秒、接口请求成功、只保留正规HTTP/HTTPS代理。import aiohttp import asyncio # 代理超时阈值可自行调整 TIMEOUT 5 # 存放最终可用的代理 usable_proxy [] # 异步校验单个代理是否可用 async def check_proxy(session, proxy_info): proxy proxy_info[proxy] proxy_type proxy_info[type] # 稳定的公共测试接口 test_url http://httpbin.org/get try: # 通过代理发起请求验证可用性 async with session.get( urltest_url, proxyf{proxy_type.lower()}://{proxy}, timeoutaiohttp.ClientTimeout(totalTIMEOUT) ) as response: if response.status 200: print(f可用代理{proxy}) usable_proxy.append(proxy_info) except Exception: # 超时、连接失败、报错都直接判定为无效代理 pass # 批量并发校验所有代理 async def batch_check_proxy(proxy_data): # 限制并发数防止电脑卡顿、被网站封禁 async with aiohttp.ClientSession(connectoraiohttp.TCPConnector(limit100)) as session: tasks [check_proxy(session, item) for item in proxy_data] await asyncio.gather(*tasks) return usable_proxy # 统一筛选入口 def filter_usable_proxy(): raw_proxy crawl_all_proxy() asyncio.run(batch_check_proxy(raw_proxy)) print(f\n筛选完成可用代理数量{len(usable_proxy)}) return usable_proxy五、完整可直接运行代码给大家整合了全套代码复制粘贴就能直接运行一站式完成采集、去重、校验、筛选全过程import requests from lxml import etree import aiohttp import asyncio # 全局请求配置 HEADERS { User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 } TIMEOUT 5 proxy_list [] usable_proxy [] # 采集模块-西刺代理 def crawl_xici_proxy(): url https://www.xicidaili.com/nn/ try: res requests.get(url, headersHEADERS, timeout10) res.encoding utf-8 html etree.HTML(res.text) tr_list html.xpath(//table[idip_list]//tr[position()1]) for tr in tr_list: ip tr.xpath(./td[2]/text())[0].strip() port tr.xpath(./td[3]/text())[0].strip() proxy_type tr.xpath(./td[6]/text())[0].strip().upper() if proxy_type in [HTTP, HTTPS]: proxy_list.append({ ip: ip, port: port, type: proxy_type, proxy: f{ip}:{port} }) except Exception as e: print(f西刺代理采集失败{str(e)}) # 采集模块-66免费代理 def crawl_66_proxy(): url http://www.66daili.com/ try: res requests.get(url, headersHEADERS, timeout10) res.encoding utf-8 html etree.HTML(res.text) tr_list html.xpath(//table//tr[position()1]) for tr in tr_list: ip tr.xpath(./td[1]/text())[0].strip() port tr.xpath(./td[2]/text())[0].strip() proxy_type tr.xpath(./td[4]/text())[0].strip().upper() if proxy_type in [HTTP, HTTPS]: proxy_list.append({ ip: ip, port: port, type: proxy_type, proxy: f{ip}:{port} }) except Exception as e: print(f66免费代理采集失败{str(e)}) # 采集去重核心函数 def crawl_all_proxy(): crawl_xici_proxy() crawl_66_proxy() unique_proxy [] seen set() for proxy in proxy_list: if proxy[proxy] not in seen: seen.add(proxy[proxy]) unique_proxy.append(proxy) print(f采集完成去重后原始代理数量{len(unique_proxy)}) return unique_proxy # 异步校验单个代理 async def check_proxy(session, proxy_info): proxy proxy_info[proxy] proxy_type proxy_info[type] test_url http://httpbin.org/get try: async with session.get( urltest_url, proxyf{proxy_type.lower()}://{proxy}, timeoutaiohttp.ClientTimeout(totalTIMEOUT) ) as response: if response.status 200: usable_proxy.append(proxy_info) except Exception: pass # 批量校验所有代理 async def batch_check_proxy(proxy_data): async with aiohttp.ClientSession(connectoraiohttp.TCPConnector(limit100)) as session: tasks [check_proxy(session, item) for item in proxy_data] await asyncio.gather(*tasks) # 主函数获取最终可用代理列表 def get_usable_proxies(): raw_proxy crawl_all_proxy() if not raw_proxy: print(未采集到任何代理IP) return [] asyncio.run(batch_check_proxy(raw_proxy)) print(f\n✅ 筛选完成可用代理总数{len(usable_proxy)}) # 输出纯代理字符串直接即用 proxy_str_list [item[proxy] for item in usable_proxy] print(可用代理列表) for p in proxy_str_list: print(p) return proxy_str_list # 程序入口 if __name__ __main__: get_usable_proxies()六、超简单使用教程1. 直接运行直接运行整个脚本就行程序会自动走完「采集→去重→校验→筛选」全部流程最后直接打印出所有可用的 ip:port 格式代理。2. 自定义参数微调超时时间默认5秒想要极速代理可以改成3秒想兼容慢速代理可以调到8秒并发数量电脑配置一般的话把 limit 从100改成50避免运行卡顿新增代理源照着现有代码格式就能轻松添加其他免费代理网站的采集规则3. 爬虫项目调用示例脚本返回的代理列表可以直接用到你的爬虫代码里随机取用超方便proxies_list get_usable_proxies() # 随机挑选一个代理使用 import random if proxies_list: proxy random.choice(proxies_list) proxies { http: fhttp://{proxy}, https: fhttps://{proxy} } res requests.get(https://www.baidu.com, proxiesproxies, headersHEADERS) print(res.status_code)七、进阶优化小技巧1. 提升代理存活率多站点校验除了httpbin新增百度等多个测试接口避免单边可用的虚假代理定时更新设置定时任务定期重新采集筛选实时更新可用代理池过滤低匿名代理新增匿名等级判断只保留高匿名代理防止暴露本机真实IP2. 解决采集被拦截问题添加随机延时采集网页时加1-3秒随机等待避免访问频率太高被网站封禁IP多源采集多整合几个代理网站增加采集基数可用代理会更多3. 代理持久化保存可以把筛选好的可用代理保存到本地TXT文件不用每次都重新采集校验随取随用# 将可用代理保存到本地txt文件 def save_proxy_to_txt(proxies, pathusable_proxy.txt): with open(path, w, encodingutf-8) as f: for p in proxies: f.write(p \n) print(f代理已保存至 {path})八、温馨提示免费代理的稳定性比较一般只适合日常测试、轻量数据采集使用商用场景建议选择付费代理池部分免费代理会有地域限制、限速情况批量使用前可以简单二次校验请合规使用代理IP仅用于合法网络操作不要用于违规场景