作者回复: 非常好的问题,我们的文章都是一篇篇设计文档,用来指导开发实践的,所以阅读文章的过程,就是不断思考每个设计点如何落地实现的过程,通过这种方式强化知识水平,提高实践能力。 大家探讨这样的问题是学习这个专栏的最好方式。 回到正题,我的想法是:太多URL的队列写回到待下载URL集合。 还有,这又涉及到如何判断队列不平衡?大家有什么方法?
作者回复: 1 是的 2 压测 3 不理会没关系,但是爬来的数据就没法用来做公开搜索引擎 4 不知道 5 可以啊,URL调度器产生的URL快慢就可以控制,也依赖下载服务器的处理能力 6 会删除,一般不会丢弃,将来还要分析用的 7 爬虫就是一个HTTP client,各种语言都可以。python多是因为Python在数据处理领域用的多,用到爬虫的地方也多。实际上大规模爬虫开发的重头是下载HTML后的处理过程,Java或者C++的处理能力更强 8 是个文件 9 用HDFS存储 10 域名,多个域名可以合用一个队列。集合中的域名是有限的,列举的完
作者回复: 是的,少量重复对性能和结果的影响都可以忽略
作者回复: 确实,搜索引擎和内容网站是共生关系,互为依赖,主动推送是一种不错的合作模式。 谢谢分享,学习了~~
作者回复: 域名队列就是解决这个问题的,会把特别热门的域名放在一个单独队列,这个队列即使数据特别多,每次也只会被域名队列选择器轮询一个URL,而域名队列有几百个,这个域名只占下载任务几百分之一。
作者回复: TPS和平均响应时间以及并发数相关,响应时间由目标网站控制,爬虫可以大概计算一个平均时间;并发数由爬虫线程数控制,是开发者可以决定的。 限流是用来控制用户请求并发数的,爬虫的场景没有用户请求,不需要用限流。
作者回复: 应该是会漏掉数据,布隆过滤器判断为重复,实际未重复,也就是漏掉数据。你的理解是对的。
作者回复: 如果每个域名一个域名队列,那么轮询的时候一定会有很多空队列,事实上还是保证了优先级权重。 另外,系统也会定期合并空队列,以提高性能,降低资源浪费,但是最终还是能保证优先级权重。
作者回复: 网站内容更新一般都会使用新的URL。
作者回复: 这个专栏我们主要关注是如何对系统进行抽象,也就是如何设计