正则表达式,用于过滤具有多个&符号“&”的网址

时间:2014-06-02 19:28:46

标签: java regex nutch

我正在使用网络抓取工具(称为 Nutch ),当我将一堆网址加入其中时,它会抓取网页。我设置了某些正则表达式过滤器来控制特定域和特定过滤器的爬网程序。

# skip URLs containing a back slash

-[\\]    

# skip URLS containing more than 6 levels

-^http://([a-zA-Z.-]+)/(?:[^/]+/){6,}.*$

# crawl only domain abc

+^http://www.abc.xx.yyy.zzz/pubs/([a-z]+)

问题:在特定域内,我的抓取工具正在抓取所有搜索表单网址,其中包含我不想要的所有分页和查询参数。例如:

http://www.abc.xx.yyy.zzz/pubs/biblio_results.asp?Library=ABC&SubjectScope=keyword&SubjectMode=contains&SubjectText=abc_archive&URLs=yes&Order=year&SortOrder=DESC&Abstracts=no

我不知道如何设置正则表达式让我的抓取工具忽略任何此类网址,例如上面有多个"&"登录其URL路径。

另外,在构建搜索引擎时忽略此类URL是个好主意吗?

3 个答案:

答案 0 :(得分:3)

在字符串锚^

的头部之后插入此否定前瞻
(?![^&]*&){2}

解释正则表达式

(?!                      # look ahead to see if there is not (2
                         # times):
  [^&]*                  #   any character except: '&' (0 or more
                         #   times (matching the most amount
                         #   possible))
  &                      #   '&'
){2}                     # end of look-ahead

答案 1 :(得分:3)

Nutch配置中的行应该是

-&.*&

这告诉Nutch跳过任何包含两个或更多&个字符以及任意数量字符的内容。

忽略此类网址是否一个好主意取决于搜索引擎的目的,以及您正在搜索的域内网址的性质。如果不理解问题域,就无法回答问题的最后一句话。

答案 2 :(得分:1)

由于您似乎匹配满足每种情况的网址,然后根据这些网址进行过滤,因此匹配包含2& s的网址相当简单。

(&.*&)+

这将匹配包含至少2个&符号序列的任何内容