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

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

最简单的,正则:

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的正则约束相关推荐

  1. 基于Crawler4j的Java爬虫实践

    基于Crawler4j的Java爬虫实践 1. Introduction 2. 系统架构 2.1 crawler4j 2.2 jsoup 2.3 Apache Commons CSV 2.4 mave ...

  2. Java爬虫(二)-- httpClient模拟Http请求+jsoup页面解析

    博客 学院 下载 GitChat TinyMind 论坛 APP 问答 商城 VIP会员 活动 招聘 ITeye 写博客 发Chat 传资源 登录注册 原 Java爬虫(二)-- httpClient ...

  3. 网络爬虫(2)-- Java爬虫框架

    2019独角兽企业重金招聘Python工程师标准>>> Nutch Nutch属于分布式爬虫,爬虫使用分布式,主要是解决两个问题:1)海量URL管理:2)网速.如果要做搜索引擎,Nu ...

  4. Java爬虫框架调研

    Python中大的爬虫框架有scrapy(风格类似django),pyspider(国产python爬虫框架). 除了Python,Java中也有许多爬虫框架. nutch apache下的开源爬虫程 ...

  5. python爬虫与java爬虫的区别_java爬虫(一)主流爬虫框架的基本介绍

    (1).Scrapy: Scrapy,Python开发的一个快速.高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据.Scrapy用途广泛,可以用于数据挖掘.监测和自动化测 ...

  6. java 爬虫框架nutch_网络爬虫(2)-- Java爬虫框架

    Nutch Nutch属于分布式爬虫,爬虫使用分布式,主要是解决两个问题:1)海量URL管理:2)网速.如果要做搜索引擎,Nutch1.x是一个非常好的选择.Nutch1.x和solr或者es配合,就 ...

  7. 什么是爬虫,常见的java爬虫框架有哪些?-蛙课网

    随着互联网的发展,编程程序语言也开始被越来越多的人所掌握,与此同时,java语言是使用范围最广的编程语言.今天我们一起了解一下什么是爬虫,java爬虫框架有哪些. 网络爬虫(又称为网页蜘蛛,网络机器人 ...

  8. Java爬虫框架wemgic_Java爬虫框架-WebMagic挖坑补坑指南

    以前总是用的Python下的Scrapy和crawley和PHP的小众爬虫框架,最近突然想到了何不用下Java下的框架试试? 查了下Java下的爬虫框架自然也不在少数,Nutch,WebMagic,W ...

  9. Java爬虫抓取网页

    Java爬虫抓取网页 原作者:hebedich  原文链接 下面直接贴代码: import java.io.BufferedReader; import java.io.InputStreamRead ...

  10. java爬虫系列(五)——今日头条文章爬虫实战

    文章目录 项目源码 爬虫目标 爬虫设计思路 爬取方式 动态解析网页方式爬取 解析接口方式爬取 解析思路 破解入口 接口对比 破解加密参数 参数生成方式 解析js 分析接口返回值 解析原文地址 java ...

最新文章

  1. C# SQLite编程总结
  2. 英国文化影响管理风格_文化如何影响用户体验
  3. ipv6 ospf配置方法_网络工程师(22):应用最广泛的路由协议OSPF
  4. go mod常用命令
  5. Python编程——函数
  6. [JSON]2017年最新县及县以上行政区划代码
  7. svn合并不同树_SVN分支与合并【超详细的图文教程】(转载)
  8. nginx打开网页报错
  9. Leetcode︱448. Find All Numbers Disappeared in an Array找到所有数组中消失的数字.java
  10. EFF称强行删除代码侵犯人权
  11. 超快!三分钟学会用3DsMax制作波浪效果!大忙人的你也可以忙里偷闲学技术
  12. 接口测试方法论——WebSocket一点通
  13. 美术课程对计算机的好处,电脑艺术设计的美术基本功重要性论文
  14. android 音频播放过程,一种Android系统中的音频播放方法与流程
  15. 【Codeforces 644A】Parliament of Berland
  16. 中国移动飞信免费发短信API接口(第三方)
  17. CSS Grid 和 Flexbox
  18. 13 个JavaScript 数组小技巧,让你更像技术专家
  19. 图书购物商城 图书后台管理系统
  20. 判断素数(质数)的四种方法

热门文章

  1. Nginx+Tomcat实现单IP、多域名、多站点的访问
  2. java 静态相关内容
  3. 如何使用Java读写系统属性?
  4. MFC对话框增加状态栏 以及设置状态栏滚动字幕
  5. 百度Hi 2.3 Beta1 增量升级至内部版本号 2.3.10.12
  6. zend framework入门教程实践
  7. 项目中的设计模式【适配器模式】
  8. C#绘制条码CODE39和CODE39全码模式
  9. HTTP Keep-Alive详解[转]
  10. 蓝桥杯-标题:六角填数