0

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中的 a 抓取的内容时,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? }}

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

有什么建议么?

4

1 回答 1

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

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

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

于 2016-11-17T14:58:53.837 回答