代理功能
约 426 字大约 1 分钟
2025-01-15
说明
框架支持三种代理模式
- 静态代理
- 动态代理
- 隧道代理
静态代理
- 定义:使用固定的代理 IP 和端口。
- 适用场景:对反爬要求不高的站点或请求频率较低的任务。
配置示例
方式一
在请求体中手动添加
first_spider.py
yield hunterx.Requests(url='https://www.example.com/', proxy='http://127.0.0.1:1080', callback=self.parse, level=1)
方式二
在 settings.py
中统一添加
settings.py
# 代理ip地址
PROXY_URL = ''
动态代理
- 定义:从代理池动态获取可用代理。
- 适用场景:高频率爬取、需要频繁更换 IP。
配置示例
在 代理中间件
中动态添加 ip代理,同样也需要将你的代理api添加到 settings.py
中,并启用中间件
middleware.py
class ProxyMiddleware(Middleware):
@staticmethod
async def process_request(request):
proxy = None
request.IS_PROXY = True if request.url not in request.Agent_whitelist and request.IS_PROXY else False
if request.IS_PROXY and ((proxy == None) or (request.is_change)):
proxy = await asy_rand_choi_pool()
if request.IS_SAMEIP:
request.meta['proxy'] = proxy
request.task['meta']['proxy'] = proxy
return request
settings.py
# 代理ip地址
PROXY_URL = ''
# 自定义的中间件,可创建多个,数字越小优先级越高
MIDDLEWARES = {
'ProxyMiddleware': 100
}
隧道代理
- 定义:通过隧道代理(如 VPN 或 SOCKS5)转发请求。
- 适用场景:需要隐藏真实 IP、跨区域访问。
配置示例
与静态代理配置方式一致,隧道代理更方便简约的使用动态代理,但也会存在一定的局限性,如 ip请求链
使用场景
总结
用户可根据实际需求和场景灵活选择或组合代理模式,以在稳定性、效率和隐私性之间实现最佳平衡。