proxy_pool
proxy_pool copied to clipboard
两点优化建议
优化建议
- 代理有效性检查逻辑:经过长期的使用过程中观察分析,我认为原始的有效性检查逻辑过于strict,有效代理池内的代理数量仅仅维持在3-5个。由于网络及代理本身具有一定的不稳定性,不希望优质代理在一次检查失败后被清除,我将有效性检查逻辑修改为:
if status or proxy_obj.fail_count / proxy_obj.check_count < 0.1:,即当本次检查失败时判断失败次数是否小于检查次数的10%(依赖于我在使用过程中实时更新fail_count以及check_count) - 代理调度逻辑:在使用过程中发现,当有效代理池为空时,这会导致在下一个原始代理抓取周期内,都将面临无代理可用的情况。我的修改:在代理有效性检查任务执行时,若发现有效代理池为空,立即发起一个新的原始代理抓取任务
优化收益
- 有效代理池内的数量由3-5个增长到100个左右,并且大部分代理均稳定抓取了10W+甚至100W+次,极大地增加了爬虫系统的爬取量级。
- 空等待现象不再复现。
是更改了哪部分代码呢 方便贴出来吗 大佬
第一点的话 有个MAX_FAIL_COUNT的配置项目,允许最大失败次数,默认是0, 可以改高一些。 第二点可以优化,不错的建议
@lazyxiaoming
是更改了哪部分代码呢 方便贴出来吗 大佬
代码见#519
第二点真的非常有用,强烈建议合并 在爬取的目标网站有单位时间内请求次数限制的时候,如果用多线程爬虫,随机抓取一个ip作代理,可能用完之后得删掉,不然其他线程也用这个ip,迅速的就会超限制,但这样经常会导致删的速度比获取的速度还要快,如果不及时重新加载过一会就没有可用的了
这个策略好