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.*");
JAVA爬虫Nutch、WebCollector的正则约束的更多相关文章
- JAVA爬虫 WebCollector
JAVA爬虫 WebCollector 爬虫简介: WebCollector是一个无须配置.便于二次开发的JAVA爬虫框架(内核),它提供精简的的API,只需少量代码即可实现一个功能强大的爬虫. 爬虫 ...
- Java分布式爬虫Nutch教程——导入Nutch工程,执行完整爬取
Java分布式爬虫Nutch教程--导入Nutch工程,执行完整爬取 by briefcopy · Published 2016年4月25日 · Updated 2016年12月11日 在使用本教程之 ...
- 基于Java的开源爬虫框架WebCollector的使用
一.WebCollector介绍 WebCollector是一个无须配置.便于二次开发的JAVA爬虫框架(内核),它提供精简的的API,只需少量代码即可实现一个功能强大的爬虫. WebCollecto ...
- 爬虫入门 手写一个Java爬虫
本文内容 涞源于 罗刚 老师的 书籍 << 自己动手写网络爬虫一书 >> ; 本文将介绍 1: 网络爬虫的是做什么的? 2: 手动写一个简单的网络爬虫; 1: 网络爬虫是做 ...
- java爬虫入门
本文内容 涞源于 罗刚 老师的 书籍 << 自己动手写网络爬虫一书 >> ; 本文将介绍 1: 网络爬虫的是做什么的? 2: 手动写一个简单的网络爬虫; 1: 网络爬虫是做 ...
- webmagic的设计机制及原理-如何开发一个Java爬虫
之前就有网友在博客里留言,觉得webmagic的实现比较有意思,想要借此研究一下爬虫.最近终于集中精力,花了三天时间,终于写完了这篇文章.之前垂直爬虫写了一年多,webmagic框架写了一个多月,这方 ...
- 推荐几个优秀的java爬虫项目
java爬虫项目 大型的: Nutch apache/nutch · GitHub 适合做搜索引擎,分布式爬虫是其中一个功能. Heritrix internetarchive/heritrix3 ...
- Java爬虫框架调研
Python中大的爬虫框架有scrapy(风格类似django),pyspider(国产python爬虫框架). 除了Python,Java中也有许多爬虫框架. nutch apache下的开源爬虫程 ...
- webmagic的设计机制及原理-如何开发一个Java爬虫 转
此文章是webmagic 0.1.0版的设计手册,后续版本的入门及用户手册请看这里:https://github.com/code4craft/webmagic/blob/master/user-ma ...
随机推荐
- 3ds Max制作妄想中的外星人形象
来源:CG游 作者:FedericoScarbini 使用软件:3ds Max, Photoshop, ZBrush 简介 我认为每一个人都曾经在他的人生中的某些时刻妄想着关于外星人的事情;我猜这是很 ...
- css实现步骤条
实现效果 html <ul class="steps"> <li class="active">申请完成</li> < ...
- axios的坑
1.axios默认发送application/json 格式 https://www.cnblogs.com/qdcnbj/p/8143155.html 资料: https://www.npmjs.c ...
- POJ 1742 Coins(多重背包?)
题解 一个自然的思路是对于每一个物品做一次01背包 然后T飞了. 试着用二进制拆分,还是T了. 单调队列,对不起,懒,不想写. 我们这样想.设dp[i]代表i这个面值前几种硬币是否能凑到 然后对于每一 ...
- [ZJOI2015]幻想乡战略游戏(点分树)
题意自己看... 思路 没想到今(昨)天刷着刷着点分治的水题,就刷出来了一个点分树... 然后就疯狂地找题解,代码,最后终于把它给弄懂了. 点分树——动态点分治,对于此题来说,我们设u为当前的补给站位 ...
- BZOJ 4033[HAOI2015] 树上染色(树形DP)
4033: [HAOI2015]树上染色 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 3188 Solved: 1366[Submit][Stat ...
- BZOJ 3129 [SDOI2013]方程 (拓展Lucas)
题目大意:给定一个方程$X_{1}+X_{2}+X_{3}+X_{4}+...+X_{n}=M$,$\forall X_{i}<=A_{i} (i<=n1)$ $\forall X_{i} ...
- 常见VPS buy地址
***,也是最适合新手使用的: https://bwh1.net/ (支持支付宝) vultr,以下是我的分享链接: https://www.vultr.com/(支持支付宝) SugarHosts: ...
- 【codeforces 553C】Love Triangles
[题目链接]:http://codeforces.com/problemset/problem/553/C [题意] 给你n个点,m条边; 每种边有2两种类型; 让你补充剩下的边,构造一个完全图; 使 ...
- OpenStack-API开发
介绍两种OpenStack-API(Java版)--jcoulds && openstack4j Jclouds 1.介绍 jclouds -该API提供云计算环境的可移植抽象层以及云 ...