我正在使用一个网络爬虫(称为Nutch),当我把一堆urls输入到它中时,它会爬行网络。我设置了某些正则表达式过滤器来控制爬虫到特定的域和特定的过滤器。
# 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]+)crawler :在特定的域中,我的爬虫正在用我不想要的所有分页和查询参数爬行所有搜索表单urls。例子如下:
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路径中有多个"&“号。
顺便提一句,在构建搜索引擎时忽略这样的URL是个好主意吗?
发布于 2014-06-02 19:32:30
您在Nutch配置中的行应该是
-&.*&这告诉Nutch跳过两个或多个&字符的任何内容,以及任意数量之间的字符。
忽略这些URL是否是个好主意,取决于搜索引擎的用途,以及您正在搜索的域中URL的性质。如果不了解问题域,就不可能回答问题的最后一句。
发布于 2014-06-02 19:32:18
在字符串锚头^后面插入这种负前瞻
(?![^&]*&){2}解释Regex
(?! # 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发布于 2014-06-02 19:31:39
因为您似乎在匹配符合每种情况的URL,然后通过这些URL进行过滤,所以匹配包含2 &s的URL相当简单。
(&.*&)+,它将匹配包含至少2个符号的序列的任何内容。
https://stackoverflow.com/questions/24001821
复制相似问题