【问题标题】:Re-crawl pages based on pubDate/lastBuildDate in RSS feed根据 RSS feed 中的 pubDate/lastBuildDate 重新抓取页面
【发布时间】:2019-12-10 19:40:17
【问题描述】:

我正在建立一个基于 Stormcrawler (v1.13) 和 Elasticsearch 的网络搜索。我已将 Stormcrawler 配置为每 24 小时重新抓取索引页面。此外,该网站有一个 RSS 提要,其中包含最近发布或更新的页面,每 10 分钟抓取一次。这适用于检测新页面。不过,我也想在短时间内重新抓取已更改的页面(例如,当标题更改时)。

解析 RSS 提要时,发现的 URL 将发送到调度程序,状态为 DISCOVERED 和来自 RSS 提要的一些额外元数据(即feed.publishedDate)。

我最初的想法是在文档被标记为FETCHED 时(使用自定义索引器螺栓)将元数据indexedDate 添加到status 索引中。这将是页面最后一次被索引的时间戳。然后我将实现一个自定义调度程序,它检查feed.publishedDate(来自RSS 提要中的DISCOVERED 条目)是否比已经存储在status 索引中的相应条目的indexedDate 更新。如果是这样,它将下一个获取日期设置为当前时间,以便尽快重新获取。

问题是我找不到访问索引页面和发现的 RSS 条目的好方法,所以我可以比较日期。有没有其他推荐的方法可以实现我想要的?

这是我的crawler.flux-file 中的一些代码:

...

bolts:

...

  - id: "feed"
    className: "com.digitalpebble.stormcrawler.bolt.FeedParserBolt"
    parallelism: 1

...

streams:
  - from: "spout"
    to: "partitioner"
    grouping:
      type: SHUFFLE

  - from: "spout"
    to: "status_metrics"
    grouping:
      type: SHUFFLE     

  - from: "partitioner"
    to: "fetcher"
    grouping:
      type: FIELDS
      args: ["key"]

  - from: "fetcher"
    to: "sitemap"
    grouping:
      type: LOCAL_OR_SHUFFLE

  - from: "sitemap"
    to: "feed"
    grouping:
      type: LOCAL_OR_SHUFFLE

  - from: "feed"
    to: "parse"
    grouping:
      type: LOCAL_OR_SHUFFLE

  - from: "parse"
    to: "index"
    grouping:
      type: LOCAL_OR_SHUFFLE
...

【问题讨论】:

    标签: web-crawler stormcrawler


    【解决方案1】:

    这是一个很好的问题,谢谢你的提问!

    如果有一个自定义 URL 过滤器来检查一个 URL 是否已经有一个比发布日期更短的索引日期,如果是,则将其状态更改为 FETCHED?这样文档将覆盖 ES 中现有的文档,并且不会被状态更新器 Bolt 中的缓存丢弃。

    您可以在其元数据中为其提供 scheduler.delay.mins=0,以便调度程序将其值设置为现在。

    缺点是您可能需要将查询批处理到 ES,这会引入一些延迟。

    另一种方法是编写您自己的状态更新器 Bolt,不使用任何缓存,并将upserts 写入 ES,以便在必要时修改下一个获取日期。这可能需要一个脚本。

    你怎么看?

    【讨论】:

    • 非常感谢您的意见,朱利安!关于您的第一个建议:URL 过滤器针对 RSS 提要中找到的每个 URL 运行,但我只能从提要本身(通过 sourceMetadata)访问元数据 - 而不是每个 RSS 条目的元数据(由 @987654323 提取@) feed.publishedDate 所在的位置。还是我误会了什么?我想第二种方法可以工作,虽然禁用缓存感觉有点糟糕:/
    • 你是绝对正确的,很抱歉造成混乱。您可以通过在状态更新器螺栓之前在状态流上添加自定义螺栓来实现它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-01
    相关资源
    最近更新 更多