旋转刮擦代理
scrapy-rotating-proxies的Python项目详细描述
零碎的旋转代理
/a>这个包提供了一个使用旋转代理的中间件, 检查它们是否活动并调整爬行速度。
许可证是麻省理工学院的。
安装
pip install scrapy-rotating-proxies
用法
添加带有代理列表的旋转代理列表选项。py:
ROTATING_PROXY_LIST = [ 'proxy1.com:8000', 'proxy2.com:8031', # ... ]
作为替代方案,您可以指定一个 旋转代理列表路径 选项 对于带有代理的文件路径,每行一个:
ROTATING_PROXY_LIST_PATH = '/my/path/proxies.txt'
旋转代理列表路径优先于旋转代理列表路径 如果两个选项都存在。
然后将旋转代理中间件添加到下载程序中间件:
DOWNLOADER_MIDDLEWARES = { # ... 'rotating_proxies.middlewares.RotatingProxyMiddleware': 610, 'rotating_proxies.middlewares.BanDetectionMiddleware': 620, # ... }
在此之后,所有请求都将使用来自 旋转代理列表 / 旋转代理列表路径
元中设置了"代理"的请求不由处理 零碎的旋转代理。禁用请求集的代理 请求。meta['proxy'] =无 ;要显式设置代理,请使用 请求.meta['proxy'] = "<;我的代理地址"
并发性
默认情况下,所有默认的scrapy并发选项( 下载延迟 , authThrottle\u… , 每个域的并发请求变为 启用RotatingProxyMiddleware时代理请求的每个代理。 例如,如果将每个域的并发请求设置为2,则 Spider将最多与每个代理建立2个并发连接, 不考虑请求URL域。
定制
零碎的旋转代理 跟踪工作代理和非工作代理, 并不时重新检查不工作。
检测不工作的代理是特定于站点的。 默认情况下, 零碎的旋转代理使用一个简单的启发式方法: 如果响应状态代码不是200,则响应正文为空,或者 出现异常,则认为代理已死亡。
可以通过将路径传递给 旋转代理策略中的自定义带宽策略 选项,例如:
# settings.py ROTATING_PROXY_BAN_POLICY = 'myproject.policy.MyBanPolicy'
策略必须是具有 response\u ban的类 异常是方法。这些方法可以返回true (检测到禁令)、错误(不是禁令)或无(未知)。很方便 子类化和修改默认bandetectionpolicy:
# myproject/policy.py from rotating_proxies.policy import BanDetectionPolicy class MyPolicy(BanDetectionPolicy): def response_is_ban(self, request, response): # use default rules, but also consider HTTP 200 responses # a ban if there is 'captcha' word in response body. ban = super(MyPolicy, self).response_is_ban(request, response) ban = ban or b'captcha' in response.body return ban def exception_is_ban(self, request, exception): # override method completely: don't take exceptions in account return None
除了创建策略,您还可以实现 response\u ban 异常是蜘蛛方法,例如:
class MySpider(scrapy.Spider): # ... def response_is_ban(self, request, response): return b'banned' in response.body def exception_is_ban(self, request, exception): return None
必须纠正这些规则,因为 请求一个d一个坏的代理应该是不同的:如果它是一个应该责备的代理 使用其他代理重试请求是有意义的。
非工作代理可能在一段时间后重新变为活动代理。 稀疏旋转代理对这些代理使用随机指数退避 检查-第一次检查很快就会进行,如果仍然失败,则下一次检查是 进一步延迟等。使用 旋转代理退出库来调整 初始延迟(默认为随机,从0到5分钟)。随机化的 指数退避的上限是 旋转代理退避的上限
设置
旋转代理列表 -可供选择的代理列表;
旋转代理列表路径 -具有代理列表的文件的路径;
rotating_proxy_logstats_interval -以秒为单位的统计日志记录间隔, 默认为30;
旋转代理关闭蜘蛛 -如果为真,蜘蛛将停止 没有活着的代理人。如果为false(默认),则在没有 活动代理重新检查所有死机代理。
旋转代理页重试次数 -重试次数 使用其他代理下载页面。经过这么多次的重试 失败被认为是页面失败,而不是代理失败。 这样想吧:每一个不恰当的禁令都会让你付出代价 旋转代理页重试次数 活动代理。默认值:5。
可以使用 max_proxies_to_try request.meta key-例如,可以使用更高的 如果您确定某些页应该正常工作,则它们的值。
旋转代理退避基数 -基数退避时间,以秒为单位。 默认值为300(即5分钟)。
旋转代理退出上限 -退出时间上限,以秒为单位。 默认值为3600(即60分钟)。
旋转代理禁止策略 -禁止检测策略的路径。 默认值为 "旋转代理.policy.bandetectionpolicy"
FAQ
问:在哪里可以获得代理列表?如何编写和维护禁令规则?
答:由你来寻找代理人并维持适当的禁令规则。
对于网站,
贡献
- 源代码:https://github.com/teamhg-memex/scrapy-rotating-proxies" rel="nofollow">https://github.com/teamhg-memex/scrapy-rotating-proxies
- 错误跟踪器: https://github.com/teamhg-memex/scrapy-rotating-proxies/issues
要运行测试,请安装tox并从源签出运行tox。