代理使用说明
代理使用有三种方式
- 使用框架内置代理池
- 自定义代理池
- 请求中直接指定
方式1. 使用框架内置代理池
配置代理
在配置文件中配置代理提取接口
# 设置代理
PROXY_EXTRACT_API = None # 代理提取API ,返回的代理分割符为\r\n
PROXY_ENABLE = True
PROXY_MAX_FAILED_TIMES = 5 # 代理最大失败次数,超过则不使用,自动删除
要求API返回的代理格式为使用 /r/n 分隔:
ip:port
ip:port
ip:port
这样feapder在请求时会自动随机使用上面的代理请求了
管理代理
删除代理(默认是请求异常连续5次,再删除代理)
例如在发生异常时删除代理
import feapder
class TestProxy(feapder.AirSpider):
def start_requests(self):
yield feapder.Request("https://www.baidu.com")
def parse(self, request, response):
print(response)
def exception_request(self, request, response):
request.del_proxy()
方式2. 自定义代理池
编写代理池:例如在你的项目下创建个my_proxypool.py,实现下面的函数
from feapder.network.proxy_pool import BaseProxyPool
class MyProxyPool(BaseProxyPool):
def get_proxy(self):
"""
获取代理
Returns:
{"http": "xxx", "https": "xxx"}
"""
pass
def del_proxy(self, proxy):
"""
@summary: 删除代理
---------
@param proxy: xxx
"""
pass
修改setting的代理配置
PROXY_POOL = "my_proxypool.MyProxyPool" # 代理池
将编写好的代理池配置进来,值为类的模块路径,需要指定到具体的类名
方式3. 不使用代理池,直接给请求指定代理
直接给request.proxies赋值即可,例如在下载中间件里使用
import feapder
class TestProxy(feapder.AirSpider):
def start_requests(self):
yield feapder.Request("https://www.baidu.com")
def download_midware(self, request):
# 这里使用代理使用即可
request.proxies = {"https": "https://ip:port", "http": "http://ip:port"}
return request
def parse(self, request, response):
print(response)