在Python网络请求中,HTTP代理是突破访问限制、隐藏真实IP和实现分布式采集的核心工具。本文将从基础配置到高级策略,系统梳理代理使用方法及反反爬技巧。
一、基础代理配置****
1. requests库快速实现
通过proxies参数直接指定代理地址,支持HTTP/HTTPS协议:
python
| import requests | |
|---|---|
| proxies = { | |
| "http": "http://123.123.123.123:8080", | |
| "https": "http://123.123.123.123:8080" | |
| } | |
| response = requests.get("example.com", proxies=proxies) |
若代理需认证,格式为http://username:password@ip:port。
2. urllib标准库实现
通过ProxyHandler和Opener实现全局代理:
python
| from urllib.request import ProxyHandler, build_opener, install_opener | |
|---|---|
| proxy = ProxyHandler({"http": "http://123.123.123.123:8080"}) | |
| opener = build_opener(proxy) | |
| install_opener(opener) # 后续所有urlopen请求自动使用代理 | |
| response = opener.open("example.com") |
二、代理池与动态切换****
1. 代理验证机制
通过测试请求筛选有效代理,避免无效IP浪费资源:
python
| def check_proxy(proxy): | |
|---|---|
| try: | |
| response = requests.get("httpbin.org/ip", proxies={"http": proxy}, timeout=5) | |
| return response.status_code == 200 | |
| except: | |
| return False |
2. 动态代理池
结合随机选择实现IP轮换,降低被封风险:
python
| import random | |
|---|---|
| proxy_pool = ["http://ip1:port", "http://ip2:port"] | |
| current_proxy = random.choice(proxy_pool) | |
| response = requests.get(url, proxies={"http": current_proxy}) |
三、反反爬高级策略****
1. 请求头伪装
配合fake_useragent库动态生成User-Agent,模拟真实浏览器行为:
python
| from fake_useragent import UserAgent | |
|---|---|
| ua = UserAgent() | |
| headers = {"User-Agent": ua.random} | |
| requests.get(url, proxies=proxies, headers=headers) |
2. 访问频率控制
通过随机延迟避免高频请求触发反爬:
python
| import time | |
|---|---|
| import random | |
| time.sleep(random.uniform(1, 3)) # 随机等待1-3秒 |
四、异常处理与优化****
1. 重试机制
对瞬态错误(如429、5XX)实施指数退避重试:
python
| from requests.exceptions import ProxyError | |
|---|---|
| def retry_request(url, max_retries=3): | |
| for _ in range(max_retries): | |
| try: | |
| return requests.get(url, proxies=proxies, timeout=10) | |
| except ProxyError: | |
| time.sleep(2 ** _) # 指数退避 | |
| return None |
2. 性能优化
· 异步请求:使用aiohttp库实现高并发代理请求。
· 代理缓存:通过Redis缓存有效代理,减少重复验证开销。
五、合规使用建议****
1. 遵守robots.txt协议,避免对目标服务器造成过大压力。
2. 选择高匿代理,确保目标网站无法识别代理行为。
3. 控制采集频率,建议单个IP每秒不超过1次请求。
通过以上方法,开发者可灵活应对IP封禁、提升数据采集效率,同时降低法律风险。实际项目中,建议结合免费代理测试与付费服务,构建稳定可靠的代理体系。