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.*");
转载于:https://www.cnblogs.com/clnchanpin/p/6984599.html
JAVA爬虫Nutch、WebCollector的正则约束相关推荐
- 基于Crawler4j的Java爬虫实践
基于Crawler4j的Java爬虫实践 1. Introduction 2. 系统架构 2.1 crawler4j 2.2 jsoup 2.3 Apache Commons CSV 2.4 mave ...
- Java爬虫(二)-- httpClient模拟Http请求+jsoup页面解析
博客 学院 下载 GitChat TinyMind 论坛 APP 问答 商城 VIP会员 活动 招聘 ITeye 写博客 发Chat 传资源 登录注册 原 Java爬虫(二)-- httpClient ...
- 网络爬虫(2)-- Java爬虫框架
2019独角兽企业重金招聘Python工程师标准>>> Nutch Nutch属于分布式爬虫,爬虫使用分布式,主要是解决两个问题:1)海量URL管理:2)网速.如果要做搜索引擎,Nu ...
- Java爬虫框架调研
Python中大的爬虫框架有scrapy(风格类似django),pyspider(国产python爬虫框架). 除了Python,Java中也有许多爬虫框架. nutch apache下的开源爬虫程 ...
- python爬虫与java爬虫的区别_java爬虫(一)主流爬虫框架的基本介绍
(1).Scrapy: Scrapy,Python开发的一个快速.高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据.Scrapy用途广泛,可以用于数据挖掘.监测和自动化测 ...
- java 爬虫框架nutch_网络爬虫(2)-- Java爬虫框架
Nutch Nutch属于分布式爬虫,爬虫使用分布式,主要是解决两个问题:1)海量URL管理:2)网速.如果要做搜索引擎,Nutch1.x是一个非常好的选择.Nutch1.x和solr或者es配合,就 ...
- 什么是爬虫,常见的java爬虫框架有哪些?-蛙课网
随着互联网的发展,编程程序语言也开始被越来越多的人所掌握,与此同时,java语言是使用范围最广的编程语言.今天我们一起了解一下什么是爬虫,java爬虫框架有哪些. 网络爬虫(又称为网页蜘蛛,网络机器人 ...
- Java爬虫框架wemgic_Java爬虫框架-WebMagic挖坑补坑指南
以前总是用的Python下的Scrapy和crawley和PHP的小众爬虫框架,最近突然想到了何不用下Java下的框架试试? 查了下Java下的爬虫框架自然也不在少数,Nutch,WebMagic,W ...
- Java爬虫抓取网页
Java爬虫抓取网页 原作者:hebedich 原文链接 下面直接贴代码: import java.io.BufferedReader; import java.io.InputStreamRead ...
- java爬虫系列(五)——今日头条文章爬虫实战
文章目录 项目源码 爬虫目标 爬虫设计思路 爬取方式 动态解析网页方式爬取 解析接口方式爬取 解析思路 破解入口 接口对比 破解加密参数 参数生成方式 解析js 分析接口返回值 解析原文地址 java ...
最新文章
- C# SQLite编程总结
- 英国文化影响管理风格_文化如何影响用户体验
- ipv6 ospf配置方法_网络工程师(22):应用最广泛的路由协议OSPF
- go mod常用命令
- Python编程——函数
- [JSON]2017年最新县及县以上行政区划代码
- svn合并不同树_SVN分支与合并【超详细的图文教程】(转载)
- nginx打开网页报错
- Leetcode︱448. Find All Numbers Disappeared in an Array找到所有数组中消失的数字.java
- EFF称强行删除代码侵犯人权
- 超快!三分钟学会用3DsMax制作波浪效果!大忙人的你也可以忙里偷闲学技术
- 接口测试方法论——WebSocket一点通
- 美术课程对计算机的好处,电脑艺术设计的美术基本功重要性论文
- android 音频播放过程,一种Android系统中的音频播放方法与流程
- 【Codeforces 644A】Parliament of Berland
- 中国移动飞信免费发短信API接口(第三方)
- CSS Grid 和 Flexbox
- 13 个JavaScript 数组小技巧,让你更像技术专家
- 图书购物商城 图书后台管理系统
- 判断素数(质数)的四种方法