• 开心小毛
    置顶
    2022-03-14
    想请问一下 ,如果“下载优先级队列”之间产生负载的不平衡怎么处理,比如说优先级为2的URL太多,以至于系统里其他的队列太空,队列2却太长被覆盖。

    作者回复: 非常好的问题,我们的文章都是一篇篇设计文档,用来指导开发实践的,所以阅读文章的过程,就是不断思考每个设计点如何落地实现的过程,通过这种方式强化知识水平,提高实践能力。 大家探讨这样的问题是学习这个专栏的最好方式。 回到正题,我的想法是:太多URL的队列写回到待下载URL集合。 还有,这又涉及到如何判断队列不平衡?大家有什么方法?

    共 5 条评论
    4
  • peter
    2022-02-23
    请教老师几个问题啊: Q1:“可扩展”与“可伸缩”的区别是什么? “可扩展”是指软件开发方面,“可伸缩”是指部署方面,即增删机器方面,对吗? Q2:怎么知道目标服务器的负载能力? Q3:爬虫如果不理会robots.txt,会怎么处理? Robots.txt中禁止爬取,是从技术的角度爬虫无法爬取吗?还是说技术上爬虫仍然可以爬取,但可能会被起诉? Q4:HDFS出现之前,百度将爬取的网页存在什么系统? 百度比HDFS出现的早,没有HDFS的时候网页是怎么存储的? Q5:爬虫的爬取速度是可以控制的吗? Q6:一个URL被正常处理完后,会从“待下载 URL 集合”中删除吗? 如果会删除,删除后该URL会被丢弃还是保存到某个地方? Q7:爬虫用什么开发?好像python居多,用Java可以吗? Q8:“待下载 URL 集合”,用Java开发的话用什么JDK的哪种集合? 或者,虽然名字叫“集合”,但其实只是往文件中追加记录? Q9:“待下载 URL 集合”,取出一个,添加多个,那这个文件岂不是越来越大,很快就会超出文件大小?(产生的多,处理的少,积压越来愈多) Q10:“域名队列映射表”,根据具体域名还是域名类型来判断?互联网域名可太多了啊,怎么也列举不完啊。
    展开

    作者回复: 1 是的 2 压测 3 不理会没关系,但是爬来的数据就没法用来做公开搜索引擎 4 不知道 5 可以啊,URL调度器产生的URL快慢就可以控制,也依赖下载服务器的处理能力 6 会删除,一般不会丢弃,将来还要分析用的 7 爬虫就是一个HTTP client,各种语言都可以。python多是因为Python在数据处理领域用的多,用到爬虫的地方也多。实际上大规模爬虫开发的重头是下载HTML后的处理过程,Java或者C++的处理能力更强 8 是个文件 9 用HDFS存储 10 域名,多个域名可以合用一个队列。集合中的域名是有限的,列举的完

    
    13
  • legendcq
    2022-02-26
    老师,如果用布隆过滤器去重,如何处理false positive的情况,是允许一定比例的重复数据吗?

    作者回复: 是的,少量重复对性能和结果的影响都可以忽略

    共 4 条评论
    6
  • ABC
    2022-03-18
    好几年前用Python写过一些爬虫,都是比较简单的。在搜索引擎这个方面,除了搜索引擎主动爬取网页,有的网站还会主动推送新内容给搜索引擎,比如国内某些新闻网站在某度基本是分钟级收录。

    作者回复: 确实,搜索引擎和内容网站是共生关系,互为依赖,主动推送是一种不错的合作模式。 谢谢分享,学习了~~

    
    5
  • 门窗小二
    2022-02-24
    老师,如果是热门网站,会不会造成这个队列的数据特别多严重倾斜,极端情况下,下载服务都在处理这个网站的数据,增加目标网站的负载同时增加自身ip被目标加入黑名单的风险?换句话说可以对热点网站处理存在对应限流策略?

    作者回复: 域名队列就是解决这个问题的,会把特别热门的域名放在一个单独队列,这个队列即使数据特别多,每次也只会被域名队列选择器轮询一个URL,而域名队列有几百个,这个域名只占下载任务几百分之一。

    共 3 条评论
    3
  • singularity of sp...
    2022-04-28
    想请问一下TPS如何控制,也即如何保证TPS在预估的800左右,而不会在某些突发情况下冲破峰值(比如在系统刚刚运行时),是采用类似漏桶、令牌桶这样的限流算法嘛?

    作者回复: TPS和平均响应时间以及并发数相关,响应时间由目标网站控制,爬虫可以大概计算一个平均时间;并发数由爬虫线程数控制,是开发者可以决定的。 限流是用来控制用户请求并发数的,爬虫的场景没有用户请求,不需要用限流。

    
    1
  • Geek_38ba97
    2023-05-15 来自中国台湾
    请教老师个很困惑的问题 我很困惑为什么資料多說布隆过滤器只會重複crawl一些頁面?而不是会漏抓取某些页面? 为什么它不会丢失抓取某些页面? 例如,考虑一个已初始化的全 0 布隆过滤器位数组 step1:查询urlA返回false,所以存储urlA,抓取urlA。 step2:查询urlB返回false,所以存储urlB,抓取urlB。 step3:如果查询urlC时返回true,系统会认为urlC可能已经存在于集合中,所以不会存储urlC,也不会抓取urlC。 因此,urlC 就漏抓了。 以上是我的疑惑。 我理解有什么不对的地方吗?十分感謝

    作者回复: 应该是会漏掉数据,布隆过滤器判断为重复,实际未重复,也就是漏掉数据。你的理解是对的。

    共 2 条评论
    
  • 太空牛仔
    2022-03-25
    下载优先级队列的数据都会流转到域名队列中,域名队列是通过轮询的方式发放给下载服务器,那不就失去了优先队列的优先权重吗?

    作者回复: 如果每个域名一个域名队列,那么轮询的时候一定会有很多空队列,事实上还是保证了优先级权重。 另外,系统也会定期合并空队列,以提高性能,降低资源浪费,但是最终还是能保证优先级权重。

    
    
  • Leader
    2022-03-06
    请问老师,如果网站内容有更新怎么办?如果重新爬取,跟去重算法冲突了怎么办?感觉去重算法这一块设计里讲的还是不够完整。

    作者回复: 网站内容更新一般都会使用新的URL。

    共 4 条评论
    
  • dll
    2022-02-25
    老师,有没有一些配套的demo code能够参考借鉴一下呢

    作者回复: 这个专栏我们主要关注是如何对系统进行抽象,也就是如何设计

    
    