【问题标题】:Anemone Crawler skip_links_like not obeyed海葵爬行者skip_links_like不服从
【发布时间】:2016-10-19 14:21:10
【问题描述】:

我正在使用 Anemone 抓取一个大型网站,更糟糕的是,该网站在几个不同的语言版本上具有相同的内容。

主要语言有domain.com/,其他语言有domain.com/de/domain.com/es/,所以我决定在抓取中排除这些语言,如下所示:

crawler = Anemone::Core.new('http://domain.com', opts = {skip_query_strings: true})
crawler.skip_links_like(/(.+com\/(fi|de|it|no|se|en-bm|dk|fr|ie|en-nz|es|int).*)|(\.(jpg|pdf|png|jpeg)$)/)

但是,当查看通过 on_every_page do |page| 块中的 puts page.url 抓取的内容时,我可以看到它仍在抓取所有许多语言变体。

我什至尝试过包含这个

crawler.focus_crawl{|page| page.links.reject{|i| !i.to_s.match(/(.+com\/(fi|de|it|no|se|en-bm|dk|fr|ie|en-nz|es|int).*)|(\.(jpg|pdf|png|jpeg)$)/).nil? }}

从要抓取的页面列表中的下一个考虑的内容中删除语言链接。

有什么建议吗?

【问题讨论】:

    标签: ruby anemone


    【解决方案1】:

    原来skip_links_like 方法采用 URI 而不是 URL,这意味着您只能匹配顶级 domian 之后的部分,所以不要这样:

    crawler.skip_links_like(/(.+com\/(fi|de|it|no|se|en-bm|dk|fr|ie|en-nz|es|int).*)|(\.(jpg|pdf|png|jpeg)$)/)
    

    我不得不使用这个:

    crawler.skip_links_like(/(^\/(fi|de|it|no|se|en-bm|dk|fr|ie|en-nz|es|int).*)|(\.(jpg|pdf|png|jpeg)$)/)
    

    或只是正则表达式的差异:

    错误:.+com\/(fi|de|it|no|se|en-bm|dk|fr|ie|en-nz|es|int).*

    对:^\/(fi|de|it|no|se|en-bm|dk|fr|ie|en-nz|es|int).*

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-19
      • 1970-01-01
      • 2021-08-07
      • 1970-01-01
      • 2018-04-20
      相关资源
      最近更新 更多