:param size: 代理池大小 -1 为不限制 :param proxy_source_url: 代理文件地址 支持列表 :param proxy_instance: 提供代理的实例 :param reset_interval: 代理池重置间隔 最小间隔 :param reset_interval_max: 代理池重置间隔 最大间隔 默认2分钟 :param check_valid: 是否在获取代理时进行检测有效性 :param local_proxy_file_ca
(self, **kwargs)
| 373 | """代理池""" |
| 374 | |
| 375 | def __init__(self, **kwargs): |
| 376 | """ |
| 377 | :param size: 代理池大小 -1 为不限制 |
| 378 | :param proxy_source_url: 代理文件地址 支持列表 |
| 379 | :param proxy_instance: 提供代理的实例 |
| 380 | :param reset_interval: 代理池重置间隔 最小间隔 |
| 381 | :param reset_interval_max: 代理池重置间隔 最大间隔 默认2分钟 |
| 382 | :param check_valid: 是否在获取代理时进行检测有效性 |
| 383 | :param local_proxy_file_cache_timeout: 本地缓存的代理文件超时时间 |
| 384 | :param logger: 日志处理器 默认 log.get_logger() |
| 385 | :param kwargs: 其他的参数 |
| 386 | """ |
| 387 | kwargs.setdefault("size", -1) |
| 388 | kwargs.setdefault("proxy_source_url", setting.PROXY_EXTRACT_API) |
| 389 | |
| 390 | super(ProxyPool, self).__init__(**kwargs) |
| 391 | # 队列最大长度 |
| 392 | self.max_queue_size = kwargs.get("size", -1) |
| 393 | # 实际代理数量 |
| 394 | self.real_max_proxy_count = 1000 |
| 395 | # 代理可用最大次数 |
| 396 | # 代理获取地址 http://localhost/proxy.txt |
| 397 | self.proxy_source_url = kwargs.get("proxy_source_url", []) |
| 398 | if not isinstance(self.proxy_source_url, list): |
| 399 | self.proxy_source_url = [self.proxy_source_url] |
| 400 | self.proxy_source_url = [x for x in self.proxy_source_url if x] |
| 401 | self.proxy_source_url = list(set(self.proxy_source_url)) |
| 402 | kwargs.update({"proxy_source_url": self.proxy_source_url}) |
| 403 | # 处理日志 |
| 404 | self.logger = kwargs.get("logger") or log |
| 405 | kwargs["logger"] = self.logger |
| 406 | if not self.proxy_source_url: |
| 407 | self.logger.warn("need set proxy_source_url or proxy_instance") |
| 408 | |
| 409 | # 代理池重置间隔 |
| 410 | self.reset_interval = kwargs.get("reset_interval", 5) |
| 411 | # 强制重置一下代理 添加新的代理进来 防止一直使用旧的被封的代理 |
| 412 | self.reset_interval_max = kwargs.get("reset_interval_max", 180) |
| 413 | # 是否监测代理有效性 |
| 414 | self.check_valid = kwargs.get("check_valid", True) |
| 415 | |
| 416 | # 代理队列 |
| 417 | self.proxy_queue = None |
| 418 | # {代理id: ProxyItem, ...} |
| 419 | self.proxy_dict = {} |
| 420 | # 失效代理队列 |
| 421 | self.invalid_proxy_dict = {} |
| 422 | |
| 423 | self.kwargs = kwargs |
| 424 | |
| 425 | # 重置代理池锁 |
| 426 | self.reset_lock = None |
| 427 | # 重置时间 |
| 428 | self.last_reset_time = 0 |
| 429 | # 重置的太快了 计数 |
| 430 | self.reset_fast_count = 0 |
| 431 | # 计数 获取代理重试3次仍然失败 次数 |
| 432 | self.no_valid_proxy_times = 0 |