海葵爬行者skip_links_like不服从



我正在使用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? }}

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

有什么建议吗?

原来skip_links_like方法接受uri而不是url,这意味着您只能匹配顶级域名之后的部分,所以不是这样:

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)$)/)

或者仅仅是REGEX差异:

错误:.+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).*

相关内容

  • 没有找到相关文章

最新更新