JAVA爬虫Nutch、WebCollector的正则约束

爬虫爬取时,须要约束爬取的范围。

基本全部的爬虫都是通过正則表達式来完毕这个约束。

最简单的,正则:

http://www.xinhuanet.com/.*

代表"http://www.xinhuanet.com/"后加随意个随意字符(能够是0个)。

通过这个正则能够约束爬虫的爬取范围,可是这个正则并非表示爬取新华网全部的网页。

新华网并非仅仅有www.xinhuanet.com这一个域名,还有非常多子域名,类似:news.xinhuanet.com

这个时候我们须要定义这样一个正则:

http://([a-z0-9]*\.)*xinhuanet.com/

这样就能够限制爬取新华网全部的网页了。

每种爬虫的正则约束系统都有一些差别,这里拿Nutch、WebCollector两家爬虫的正则系统做对照:

Nutch官网:http://nutch.apache.org/

WebCollector官网:http://crawlscript.github.io/WebCollector/

1.Nutch:

nutch的正则约束是依赖一个配置文件 conf/regex-urlfilter.txt 来实现的。

比如:

+^http://www.xinhuanet.com/
+^http://news.xinhuanet.com/
-^http://blog.xinhuanet.com/

nutch的正则约束原则是:

1)逐行扫描,对每一行进行例如以下操作:

去掉正则前面的加号或减号。获取正则式。看待爬取网页的url中是否包括当前正则的模式。假设包括。看正则前的符合。假设为+,则当前url无需过滤。返回当前url,假设为-,则当前url须要过滤。返回null。假设待爬取网页url中不包括当前正则的模式,则跳过(继续下一行操作)。

2)假设扫描到文件结尾,都没有返回:

返回null。

有2个地方须要注意:

1)nutch的正则过滤时,採用的匹配函数式Patterm.matcher。而不是Patterm.matches。

Patterm.mather在匹配时。仅仅要找到待爬取网页的url的子串和正则匹配,就通过。

Patterm.matcher要求待爬取网页的url和regex全然匹配。比如:

待爬取网页的网址是  http://www.xinhuanet.com/index.html

正则是^http://([a-z0-9]*\.)*xinhuanet.com

这个正则用Patterm.matcher和网页url能够匹配。由于网页url的字串http://www.xinhuanet.com和正则能匹配。

可是用Patterm.matches就不能匹配。

正则须要改成^http://([a-z0-9]*\.)*xinhuanet.com.*才干够和网页的URL匹配。

也就是说nutch的正则事实上是和找url中是否有字串符合正则。所以做nutch的正则配置文件时。要在http前增加^符号,假设正则没有加^符号,比如+http://www.xinhuanet.com ,以下网址也是能够匹配的:

http://www.abc.com/index.php?name=http://www.xinhuanet.com

2)nutch正则过滤时,是逐行扫描,一旦扫描到匹配行就返回结果。所以正则式的顺序非常重要。比如能够通过以下的配置文件来完毕全网爬取(须要过滤图片等文件为不爬取):

-\.(gif|GIF|jpg|JPG|ico|ICO|css|sit|eps|wmf|zip|ppt|mpg|xls|gz|rpm|tgz|mov|MOV|exe)$
+.

先扫描第一行,遇到gif、JPG等文件,会匹配正则。因为前面符号是-,所以返回null,url被过滤。

假设当前url不正确应gif、JPG等文件,会继续扫描第二行,第二行能够匹配随意字符串。因为前面符号是+。所以返回当前url。当前url被接受。

2.WebCollector:

WebCollector的正则约束是直接通过程序指定的:

BreadthCrawler crawler=new BreadthCrawler();
.....
.....
crawler.addRegex("+http://www\\.xinhuanet\\.com/.*");
crawler.addRegex("-http://www\\.xinhuanet\\.com/special/.*");
crawler.addRegex("-http://www\\.xinhuanet\\.com/info/.*");

WebCollector中正则有两种。正例正则,和反例正则。

url要被接受。须要符合以下2个条件。

1.至少符合一条正例正则。

2.不能符合随意一条反例正则。

正例正则以+开头,反例正则以-开头(假设前面不加符号,默认是正例正则)。

上面代码中,http://www.xinhuanet.com/auto/index.html就能够被接受。由于它符合一条正例http://www.xinhuanet.com/.* ,不符合随意一条反例正则(http://www.xinhuanet.com/special/.*和http://www.xinhuanet.com/info/.*)。

必须给出至少一条正例正则,才干够进行爬取,假设没有正例正则,不能符合上面的条件一。

WebCollector中正则匹配採用的是Patterm.matches。要求正则与URL全然匹配。

假设上面代码中你的正则写成+http://www.xinhuanet.com/,而不是+http://www.xinhuanet.com/.*,那么仅仅有网页http://www.xinhuanet.com/能够被接受,网页http://www.xinhuanet.com/index.html就不能被接收。

以下给出一个样例,爬取新华网的news.xinhuanet.com子域名。过滤掉gif和jpg图像:

BreadthCrawler crawler=new BreadthCrawler();
.....
.....
crawler.addRegex("+http://news\\.xinhuanet\\.com/.*");
crawler.addRegex("-.*gif.*");
crawler.addRegex("-.*jpg.*");
时间: 2024-11-08 12:43:32

JAVA爬虫Nutch、WebCollector的正则约束的相关文章

JAVA爬虫WebCollector教程列表

JAVA爬虫WebCollector教程列表 入门教程: WebCollector入门教程(中文版) 用WebCollector对指定URL进行爬取和解析 JAVA爬虫Nutch.WebCollector的正则约束 实例: 用WebCollector制作一个爬取<知乎>并进行问题精准抽取的爬虫(JAVA) 内核: 利用WebCollector爬虫内核定制自己的爬虫--任务生成器Generator 利用WebCollector爬虫内核定制自己的爬虫--抓取器Fetcher

JAVA爬虫 WebCollector

爬虫简介: WebCollector是一个无须配置.便于二次开发的JAVA爬虫框架(内核),它提供精简的的API,只需少量代码即可实现一个功能强大的爬虫. 爬虫内核: WebCollector致力于维护一个稳定.可扩的爬虫内核,便于开发者进行灵活的二次开发.内核具有很强的扩展性,用户可以在内核基础上开发自己想要的爬虫.源码中集成了Jsoup,可进行精准的网页解析. 量级: WebCollector最常用的爬取器BreadthCrawler使用2^24的布隆过滤器进行URL管理,可处理2^24量级

Java分布式爬虫Nutch教程——导入Nutch工程,执行完整爬取

Java分布式爬虫Nutch教程--导入Nutch工程,执行完整爬取 by briefcopy · Published 2016年4月25日 · Updated 2016年12月11日 在使用本教程之前,需要满足条件: 1)有一台Linux或Linux虚拟机 2)安装JDK(推荐1.7) 3)安装Apache Ant 下载Nutch源码: 推荐使用Nutch 1.9,官方下载地址:http://mirrors.hust.edu.cn/apache/nutch/1.9/apache-nutch-1

爬虫入门 手写一个Java爬虫

本文内容 涞源于  罗刚 老师的 书籍 << 自己动手写网络爬虫一书 >> ; 本文将介绍 1: 网络爬虫的是做什么的?  2: 手动写一个简单的网络爬虫; 1: 网络爬虫是做什么的?  他的主要工作就是 跟据指定的url地址 去发送请求,获得响应, 然后解析响应 , 一方面从响应中查找出想要查找的数据,另一方面从响应中解析出新的URL路径, 然后继续访问,继续解析;继续查找需要的数据和继续解析出新的URL路径  . 这就是网络爬虫主要干的工作.  下面是流程图: 通过上面的流程图

webmagic的设计机制及原理-如何开发一个Java爬虫 转

此文章是webmagic 0.1.0版的设计手册,后续版本的入门及用户手册请看这里:https://github.com/code4craft/webmagic/blob/master/user-manual.md 之前就有网友在博客里留言,觉得webmagic的实现比较有意思,想要借此研究一下爬虫.最近终于集中精力,花了三天时间,终于写完了这篇文章.之前垂直爬虫写了一年多,webmagic框架写了一个多月,这方面倒是有一些心得,希望对读者有帮助. webmagic的目标 一般来说,一个爬虫包括

关于Java爬虫的研究

起因 最近突然发了羊癫疯,对爬虫十分感兴趣,开始想写几个爬虫练练手,于是,洗手开搞. 像我这种懒人,对爬虫了解个大概之后就开始偷懒了,开始找框架了,Google关键字“Java 爬虫”,第一个搜索结果就是 高票回答推荐的几款爬虫框架:nutch.Heritrix.crawler4j.WebCollector和WebMagic,果断选择了WebMagic,支持国人作品嘛(肯定是中文文档啊) 下手 使用Maven添加框架到项目中,在poxm.xml文件中添加以下依赖.国内的Maven库居然没有Web

Java爬虫框架调研

Python中大的爬虫框架有scrapy(风格类似django),pyspider(国产python爬虫框架). 除了Python,Java中也有许多爬虫框架. nutch apache下的开源爬虫程序,功能丰富,文档完整.有数据抓取解析以及存储的模块 heritrix 比较成熟 地址:internetarchive/heritrix3 · GitHub很早就有了,经历过很多次更新,使用的人比较多,功能齐全,文档完整,网上的资料也多.有自己的web管理控制台,包含了一个HTTP 服务器.操作者可

Java爬虫实战(二):抓取一个视频网站上2015年所有电影的下载链接

前言:这是Java爬虫实战的第二篇文章,在第一篇文章仅仅只是抓取目标网站的链接的基础上,进一步提高难度,抓取目标页面上我们所需要的内容并保存在数据库中.这里的测试案例选用了一个我常用的电影下载网站(http://www.80s.la/).本来是想抓取网站上的所有电影的下载链接,后来感觉需要的时间太长,因此改成了抓取2015年电影的下载链接. 注:文末有我抓取到的整个列表的下载链接(包括:电影名称和迅雷下载链接) 一 原理简介 其实原理都跟第一篇文章差不多,不同的是鉴于这个网站的分类列表实在太多,

Java 爬虫工具Jsoup解析

Jsoup是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址.HTML 文本内容.它提供了一套非常省力的 API,可通过 DOM,CSS 以及类似于 jQuery 的操作方法来取出和操作数据. jsoup 的主要功能如下: 1. 从一个 URL,文件或字符串中解析 HTML: 2. 使用 DOM 或 CSS 选择器来查找.取出数据: 3. 可操作 HTML 元素.属性.文本: jsoup 是基于 MIT 协议发布的,可放心使用于商业项目. jsoup 可以从包括字符串.URL