用 Python 写爬虫的时候,最让人头疼的莫过于 IP 被禁。免费代理虽多,但验证和调度写起来相当繁琐。
free-proxy 这个模块恰好解决了这个痛点,它能自动抓取、验证免费代理,并封装成简洁的 API 供你调用,让你把精力放回数据解析本身。
📦 快速安装与上手
工欲善其事,必先利其器。模块的安装只需一行命令,几秒内即可完成。装好后导入模块,获取一个代理列表,整个初始化过程非常轻量。
pip install free-proxyfrom free_proxy import FreeProxyproxy = FreeProxy(country_id=['US'], rand=True, timeout=1, https=True).get()print("获取到的可用代理:", proxy)
执行这段代码后,控制台会输出一个随机的高匿美国代理地址。
rand=True 保证每次拿到的 IP 都不一样,timeout=1 则筛掉了那些反应迟钝的节点,让你拿到的都是“精兵强将”。
🌍 按国别精准筛选
有时候业务需要特定地区的 IP,比如查看不同国家的电商定价。
下面的代码展示了如何只获取日本地区的代理。逻辑很简单,传入地区代码列表,模块内部就会帮你过滤。
jp_proxy = FreeProxy(country_id=['JP'], rand=True, timeout=1).get()print("日本节点的代理地址:", jp_proxy)
假如你同时需要美国和加拿大的节点,直接把参数改成 ['US', 'CA'] 就行。
拿到代理后,随手一个 requests.get 测试,返回的 IP 归属地确实指向目标国家,地域筛选非常精准。
🔁 获取批量代理池
单个代理不够用,需要维护一个小型代理池来应对高频采集任务。
通过循环调用,可以快速攒出一批可用地址。为了避免重复,每次调用前都重新实例化对象。
proxy_pool = set()whilelen(proxy_pool) < 5: ip = FreeProxy(rand=True, timeout=1, https=True).get() proxy_pool.add(ip)print("当前代理池总数:", len(proxy_pool))
这段代码运行后,一个包含 5 个不重复代理的集合就生成了。
实测中,这五个代理的响应速度都在 1 秒以内,直接放进队列里给 Scrapy 用,稳定性比随手网上搜来的代理高出一个量级。
⚙️ 配置请求伪装
拿到了代理,还得配合请求头伪装,不然很容易被反爬引擎识破。
把代理 IP 和常见的浏览器 User-Agent 拼在一起,就能组成一套基础的“隐形衣”。
import requestsheaders = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'}proxies = {'http': 'http://' + proxy, 'https': 'https://' + proxy}resp = requests.get('https://httpbin.org/ip', headers=headers, proxies=proxies, timeout=5)print("请求返回的 IP 地址:", resp.json()['origin'])
运行后,终端打印出的 IP 地址应当与你传入的代理完全一致。
如果返回超时,模块内部的自动轮换机制会让你在下一次 .get() 时拿到新地址,完全不用手动写重试逻辑,省心不少。
⚖️ 优缺对比与建议
和 Scrapy 的中间件相比,free-proxy 胜在开箱即用,零配置就能跑起来,特别适合小脚本和练手项目。
但它也不完美,免费代理的稳定性终究不如付费服务,处理高并发生产环境时偶尔会掉链子。
建议大家在个人学习、小型数据采集场景下优先用它;商业项目里,还是把它作为备用链路或者辅助验证工具更为稳妥。
总而言之,free-proxy 把“懒得造轮子”的梦想照进了现实。它把代理获取、验证、去重这一整套脏活累活打包得干净利落。
如果你也有私藏的代理妙用技巧,或是折腾过程中踩过什么坑,欢迎移步评论区唠一唠,咱们一起把这个工具用得更加出神入化。