【问题标题】:Using Stormcrawler for crawling specific subdirectories使用 Stormcrawler 爬取特定子目录
【发布时间】:2020-09-09 13:24:34
【问题描述】:

我希望能够抓取给定网站的非常具体的子目录。

例如: 在网站www.world.com 上可能有多个子目录/world/bye。这些反过来可能包含多个页面/world/new 等。假设这些页面本身包含指向可能不在同一子目录中的其他页面的链接。 (/world/new 有一个指向/bye/new 的链接)。

我想要完成的是抓取/world/下每个页面的内容,并且只抓取那些页面。

忽略任何传出链接是否是个好主意,除非它也属于同一个子目录?我觉得很多页面都无法访问,因为它不会直接链接。例如/world/new/ 有一个链接/bye/new,而/world/next 又有一个链接到/world/next。这将导致爬虫无法到达/next 页面。 (如果我理解正确的话)。

另一种方法是爬取整个网站,然后根据 URL 后爬取过滤掉内容,这会使作业本身比它需要的大得多。

Storm 爬虫是否有任何配置可用于简化此操作?或者也许有更好的方法来解决这个问题?

谢谢。

【问题讨论】:

    标签: web-crawler stormcrawler


    【解决方案1】:

    您已在问题中描述了两种可能的方法。最简单的方法是使用 URL 过滤器并将其限制在您感兴趣的站点区域,但正如您所指出的,您可能会错过一些内容。替代方案确实更昂贵,因为您必须爬取整个站点,然后您可以在索引步骤中进行过滤;为此,您可以添加一个简单的解析过滤器,以在元数据中为感兴趣的部分中 的 URL 创建一个键/值,并将其用作 indexer.md.filter 的值.

    当然,如果站点提供站点地图,您会提前知道其中包含的所有 URL,在这种情况下,您可以单独依赖 URL 过滤器。

    【讨论】:

    • 感谢朱利安的回复!可悲的是,站点地图不是一个可靠的选择。我想我们会在索引步骤中使用过滤器。
    • 嗨 Julian,与上述问题相关,有没有办法在您到达某个 URL 时停止抓取,例如一旦爬虫到达 world/new/*,它就不应该再深入了。我知道这可以通过设置最大深度来完成,但深度有时会有所不同。如果world/new/ 下的页面是我的目标,那么我进一步爬网并跟踪这些页面中的链接将毫无意义。有没有使用 SC 的优雅方法?
    • 您可以编写一个自定义 URL 过滤器来阻止任何不在 world/new 中的 URL,但前提是您在 world/new 中?由于您要添加元数据以标记 world/new 中的 url 以作为索引的一部分进行过滤,因此您可以使用带有元数据目标范围的 FastURLFilter(请参阅github.com/DigitalPebble/storm-crawler/wiki/URLFilters)。如果元数据是在过滤步骤之前创建的,那将是优雅的,但不一定是这种情况。
    猜你喜欢
    • 1970-01-01
    • 2020-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-26
    • 2020-05-21
    • 1970-01-01
    • 2018-04-03
    相关资源
    最近更新 更多