Anemone Crawler skip_links_like没有服从

时间:2016-10-19 14:21:11

标签: ruby anemone

我正在使用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)$)/)

然而,当查看puts page.url块中on_every_page do |page|抓取的内容时,我发现它仍在抓取所有语言变体。

我甚至试图加入此

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? }}

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

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

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

或只是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).*