旋转刮擦代理

scrapy-rotating-proxies的Python项目详细描述


零碎的旋转代理

pypi版本 /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://crawlera.com/" rel="nofollow">https://crawlera.com/,可以 与scrapy集成(请参阅https://github.com/scrapy-plugins/scrapy-crawlera" rel="nofollow">https://github.com/scrapy-plugins/scrapy-crawlera) 并注意所有这些细节。

贡献

要运行测试,请安装tox并从源签出运行tox。


define hyperiongray

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Apache Flink外部Jar   创建和强制转换对象数组时发生java错误   Java,添加数组   具有相同包结构和类的java JAR   java Jenkins未能构建Maven项目   java为什么一个forloop比另一个更快,尽管它们做的“一样”?   servlets在将“/”站点迁移到Java EE包时处理contextpath引用   无法解析java MavReplugin:2.21或其某个依赖项   泛型如何编写比较器来泛化Java中的两种类型的对象?   java Android Emulator未在netbeans上加载   多线程Java使用线程对数组中的数字求和:在同步块中使用新变量作为锁:差异   java如何在JSP/servlet中设置<input>标记的值?