爬虫抓取速度自适应问题

2016-05-18 19:17:44 +08:00
 SlipStupig
之前都是抓取大型网站,现在抓取一些小型网站,出现把对方给抓死了(并发数 100 多吧),有什么办法能让抓取速度能够自适应,比如:对方是淘宝,开足马力去抓,如果对方是个小网站,能自动测出一个最合适的请求速度去抓取
6454 次点击
所在节点    Python
47 条回复
binux
2016-05-19 02:39:17 +08:00
@SlipStupig
如果是这样
首先,你的系统必须得支持分站点压力控制吧。
然后抓之前,先看看对方站点有多少 IP ,查一下站点排名,流量,然后就能定一个差不多的抓取压力了。
xiamx
2016-05-19 06:21:41 +08:00
也可以从 TCP congestion control 算法寻找灵感
dphdjy
2016-05-19 06:55:09 +08:00
能把别人抓死,太缺德了!!不看协议吗?
遇到这种人,我一般直接把数据库扔给他。。。
lianyue
2016-05-19 07:31:44 +08:00
看 Alexa 排名
crysislinux
2016-05-19 07:48:23 +08:00
我一般是有个 client 数组,抓取成功率高就增加 client 的数量,成功率低就减少
tuutoo
2016-05-19 08:20:17 +08:00
每个网站设置一个 sleep 值,设定数据超时的值 比如 1 分钟 就给这 sleep 值+30 秒,直到不出现超时情况。
tuutoo
2016-05-19 08:20:53 +08:00
遇到超时时就加网站对应 sleep 值。
tscat
2016-05-19 08:27:02 +08:00
我觉得楼上有人说你能礼貌点。。。应该是说,对网站礼貌点吧。。
onion83
2016-05-19 09:24:13 +08:00
可以模拟一下退火算法,从服务器响应速度动态调整抓取频率,以前我有看过相关文章,可惜可以找不到了....
anyforever
2016-05-19 10:51:50 +08:00
天天研究抓站的,我都觉得很恶心,跟小偷有什么区别?
SlipStupig
2016-05-19 11:52:28 +08:00
@anyforever 今天才发现 google 和百度是靠抢劫起家的啊
SlipStupig
2016-05-19 12:04:34 +08:00
@tuutoo 第一次抓取是未知的,如果对方能承受,速度就明显下降了,如果是这样预设值的方式的话,不如设置级别去减少
SlipStupig
2016-05-19 13:09:49 +08:00
@onion83
@xiamx 感谢两位,我好好研究一下
fivesmallq
2016-05-19 13:40:12 +08:00
多个队列随机投放,拿到 url 根据 host 一致性 hash 抓取
SlipStupig
2016-05-19 13:40:47 +08:00
@fivesmallq 这样能控制速度?
fivesmallq
2016-05-19 13:46:43 +08:00
不好意思,没看清楚, redis 里存放每个 host 对应的等待时间,抓一次,睡眠几秒这样。 然后每次抓取的时候,记录响应时间,到晚上 12 点算一下平均数,第一次直接存放,之后和之前的对比,如果响应时间变长,等待时间就加,否则减,等待时间的变化可能是 1,2,4,8 这样
SlipStupig
2016-05-19 14:12:57 +08:00
@fivesmallq 抓取一次等几秒那就不会出现一个抓取自适应的问题,我等足够长的时间就行,问题是我每天都要抓取大量新的网站,之前我是完全不知道的,也就是我每次抓取一个新站点基本上都在等,这样会导致抓取特别慢。
按照你的方法,我还多了一个新挑战,我假设一个非常乐观的情况,当我收录网站在 10 万级别的时候,假设我每个站点的快照内容是 100 个 URL ,那么我得存 1000 万这样的响应值,然后分批计算他们的平均响应值....这个成本有点高啊!
fivesmallq
2016-05-19 14:22:57 +08:00
@SlipStupig 只是一个思路而已,你可以自己扩展,新网站你可以设定一个比较低的初始值,响应值你也可以分阶段计算啊。自己再多想想,完善下。
fcicq
2016-05-19 14:34:22 +08:00
别说并发 100, 对同一个 IP 每秒 10 个请求以上你就是个正规爬虫很多网站站长都不愿意. 楼主如果不能给人家的网站送流量去, 就老实的 10 秒间隔抓一页, 每天 5000 个页面封顶比较好. 先基本解决页面的排名问题再正反馈的加速抓取.
SlipStupig
2016-05-19 15:22:55 +08:00
@fcicq 觉得可行

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/279630

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX