Web crawler 在StormCrawler中根据URL的优先级对其进行爬网

Web crawler 在StormCrawler中根据URL的优先级对其进行爬网,web-crawler,stormcrawler,Web Crawler,Stormcrawler,我正在基于StormCrawler项目开发一个爬虫程序。我需要根据URL的优先级对其进行爬网。例如,我有两种优先级:高优先级和低优先级。我想在低优先级URL之前尽快抓取高优先级URL。我需要在爬虫程序中处理上述问题的方法。如何在Apache Storm和StormCrawler中处理这一要求?使用Elasticsearch作为后端,您可以将喷口配置为按所需字段对bucket中的URL进行排序。字段,因此您应该在元数据中存储一个值,0表示高,1表示低,并在conf es.status.bucket

我正在基于StormCrawler项目开发一个爬虫程序。我需要根据URL的优先级对其进行爬网。例如,我有两种优先级:高优先级和低优先级。我想在低优先级URL之前尽快抓取高优先级URL。我需要在爬虫程序中处理上述问题的方法。如何在Apache Storm和StormCrawler中处理这一要求?

使用Elasticsearch作为后端,您可以将喷口配置为按所需字段对bucket中的URL进行排序。字段,因此您应该在元数据中存储一个值,0表示高,1表示低,并在conf es.status.bucket.sort.field中指定密钥名称。(请注意,高as值和低as值也会起作用)

中的默认值为

es.status.bucket.sort.field:

  • “下一个日期”
  • “url”
您应该保留nextFetchDate,以便具有相同优先级的URL按其排序,例如

es.status.bucket.sort.field:

  • “元数据。优先级”
  • “下一个日期”
  • “url”

请注意,这不会影响桶的排序方式,只会影响桶内的顺序。

非常感谢Nioche先生。你的方法真的很有趣。有没有办法根据优先级来控制爬虫程序中元组的处理顺序?在某些情况下,在我们从喷口添加高优先级元组之前,可能已经发出了许多低优先级元组。此外,我们正在使用Apache Solr对爬虫程序结果进行索引并提供URL。Apache Solr后端是否有类似的方法?我假设您的意思是,低端和高端可能属于同一个主机,高端可能会卡在获取程序的内部队列中。如果您将每个bucket的URL数量保持在较低的水平,那么这应该不是问题。您还可以有2个fetcherbolt,并添加一个自定义螺栓,以根据元组的优先级值将元组重定向到其中一个元组。SOLR模块位于ES模块的后面,自定义排序当前不可用。这应该不会太难实现,如果您愿意,这将是对项目的宝贵贡献。