code4craft / webmagic

A scalable web crawler framework for Java.
http://webmagic.io/
Apache License 2.0
11.37k stars 4.18k forks source link

主要是修改请求间隔、错误状态码重试。按我的理解所做的小修改。 #1168

Closed niuxiaozu closed 2 months ago

niuxiaozu commented 2 months ago

1、修改site.sleepTime的意义,sleep的模式为当前spider所有请求都间隔site.sleepTime。 2、修改download成功后对状态码的处理,如果状态码不被site.acceptStatCode接收的话就算失败,进行doCycleRetry重试逻辑。 3、stopWhenComplete,增加动态修改完成时停止方法。

sutra commented 2 months ago

sleepTime 就是纯粹的 sleep,没说是每个请求的时间分布。

niuxiaozu commented 2 months ago

不是修改bug,只是做了点调整。还是希望能考虑一下 1、关于线程sleep,因为我看到现在的sleepTime只在某个工作线程下载成功后sleep了一下,我不清楚其意义,我想的是为了防止网站频繁请求导致访问受限,限制对某个domain的访问频率。 2、状态码如果不对的情况下,目前打印一个日志就退出了,在step by step的处理时,容易中断,所以就想着将错误状态码也按失败处理,虽说在某些场景中状态码错误就直接不管这个请求了也算合理,但也可以通过把所有错误码添加到site.acceptStatCode中实现。 3、现在的代码中如果某个请求出错了,需要重试时在多工作线程情况下会由另一个工作线程立即执行重试,感觉retrySleepTime这个参数好像失效了,所以也调整了下,在需要执行doCycleRetry之前在当前工作线程sleep。

sutra commented 2 months ago

1、关于线程sleep,因为我看到现在的sleepTime只在某个工作线程下载成功后sleep了一下,我不清楚其意义,我想的是为了防止网站频繁请求导致访问受限,限制对某个domain的访问频率。

换个变量名吧,别使用 sleepTime。比如 requestInterval 之类的。

三个功能分开来提交,一个 PR 只包含一个修改。

niuxiaozu commented 2 months ago

好的,没提过pr,我分一下,感谢回复。

sutra commented 2 months ago

好的,没提过pr,我分一下,感谢回复。

拆成多个,每个 PR 只包含一个功能,那么没问题的就可以先合并进去,有疑问的继续讨论。

niuxiaozu commented 2 months ago

调整重试逻辑 :https://github.com/code4craft/webmagic/pull/1170 增加stopWhenComplate方法:https://github.com/code4craft/webmagic/pull/1169 至于sleepTime的问题,我想了想,还是不提了,当时我也只是感觉sleepTime像是设计为处理两个请求的间隔用的,所以才做的调整,但了解到这个参数并非如此,就不管这个了。