proxy_pool icon indicating copy to clipboard operation
proxy_pool copied to clipboard

两点优化建议

Open lazyxiaoming opened this issue 5 years ago • 5 comments

优化建议

  1. 代理有效性检查逻辑:经过长期的使用过程中观察分析,我认为原始的有效性检查逻辑过于strict,有效代理池内的代理数量仅仅维持在3-5个。由于网络及代理本身具有一定的不稳定性,不希望优质代理在一次检查失败后被清除,我将有效性检查逻辑修改为:if status or proxy_obj.fail_count / proxy_obj.check_count < 0.1:,即当本次检查失败时判断失败次数是否小于检查次数的10%(依赖于我在使用过程中实时更新fail_count以及check_count)
  2. 代理调度逻辑:在使用过程中发现,当有效代理池为空时,这会导致在下一个原始代理抓取周期内,都将面临无代理可用的情况。我的修改:在代理有效性检查任务执行时,若发现有效代理池为空,立即发起一个新的原始代理抓取任务

优化收益

  1. 有效代理池内的数量由3-5个增长到100个左右,并且大部分代理均稳定抓取了10W+甚至100W+次,极大地增加了爬虫系统的爬取量级。 image
  2. 空等待现象不再复现。

lazyxiaoming avatar Oct 21 '20 08:10 lazyxiaoming

是更改了哪部分代码呢 方便贴出来吗 大佬

vbigbang avatar Oct 23 '20 19:10 vbigbang

第一点的话 有个MAX_FAIL_COUNT的配置项目,允许最大失败次数,默认是0, 可以改高一些。 第二点可以优化,不错的建议 @lazyxiaoming

jhao104 avatar Oct 26 '20 01:10 jhao104

是更改了哪部分代码呢 方便贴出来吗 大佬

代码见#519

lazyxiaoming avatar Nov 13 '20 08:11 lazyxiaoming

第二点真的非常有用,强烈建议合并 在爬取的目标网站有单位时间内请求次数限制的时候,如果用多线程爬虫,随机抓取一个ip作代理,可能用完之后得删掉,不然其他线程也用这个ip,迅速的就会超限制,但这样经常会导致删的速度比获取的速度还要快,如果不及时重新加载过一会就没有可用的了

Alexhaoge avatar Jan 01 '21 08:01 Alexhaoge

这个策略好

woshihoujinxin avatar Jan 03 '21 12:01 woshihoujinxin