crawler4j源码学习(1):搜狐新闻网新闻标题采集爬虫
crawler4j是用Java实现的开源网络爬虫。提供了简单易用的接口,可以在几分钟内创建一个多线程网络爬虫。下面实例结合jsoup,采集搜狐新闻网(http://news.sohu.com/)新闻标题信息。
所有的过程仅需两步完成:
第一步:建立采集程序核心部分
29 30 /** 31 * @date 2016年8月20日 上午11:52:13 32 * @version 33 * @since JDK 1.8 34 */ 35 public class MyCrawler extends WebCrawler { 36 37 //链接地址过滤// 38 private final static Pattern FILTERS = Pattern.compile(".*(\\.(css|js|gif|jpg" + "|png|mp3|mp3|zip|gz))$"); 39 40 @Override 41 public boolean shouldVisit(Page referringPage, WebURL url) { 42 String href = url.getURL().toLowerCase(); 43 return !FILTERS.matcher(href).matches() && href.startsWith("http://news.sohu.com/"); 44 } 45 46 /** 47 * This function is called when a page is fetched and ready to be processed 48 * by your program. 49 */ 50 @Override 51 public void visit(Page page) { 52 String url = page.getWebURL().getURL(); 53 logger.info("URL: " + url); 54 55 if (page.getParseData() instanceof HtmlParseData) { 56 HtmlParseData htmlParseData = (HtmlParseData) page.getParseData(); 57 String text = htmlParseData.getText(); 58 String html = htmlParseData.getHtml(); 59 Set<WebURL> links = htmlParseData.getOutgoingUrls(); 60 61 logger.debug("Text length: " + text.length()); 62 logger.debug("Html length: " + html.length()); 63 logger.debug("Number of outgoing links: " + links.size()); 64 logger.info("Title: " + htmlParseData.getTitle()); 65 66 } 67 } 68 69 }
第二步:建立采集程序控制部分
28 /** 29 * @date 2016年8月20日 上午11:55:56 30 * @version 31 * @since JDK 1.8 32 */ 33 public class MyController { 34 35 /** 36 * @param args 37 * @since JDK 1.8 38 */ 39 public static void main(String[] args) { 40 // TODO Auto-generated method stub 41 42 //本地嵌入式数据库,采用berkeley DB 43 String crawlStorageFolder = "data/crawl/root"; 44 int numberOfCrawlers = 3; 45 46 CrawlConfig config = new CrawlConfig(); 47 config.setCrawlStorageFolder(crawlStorageFolder); 48 49 /* 50 * Instantiate the controller for this crawl. 51 */ 52 PageFetcher pageFetcher = new PageFetcher(config); 53 RobotstxtConfig robotstxtConfig = new RobotstxtConfig(); 54 RobotstxtServer robotstxtServer = new RobotstxtServer(robotstxtConfig, pageFetcher); 55 CrawlController controller; 56 try { 57 controller = new CrawlController(config, pageFetcher, robotstxtServer); 58 controller.addSeed("http://news.sohu.com/"); 74 controller.start(MyCrawler.class, numberOfCrawlers); 75 } catch (Exception e) { 76 // TODO Auto-generated catch block 77 e.printStackTrace(); 78 } 79 80 } 81 82 }
采集结果展示:
crawler4j源码学习(1):搜狐新闻网新闻标题采集爬虫相关推荐
- java房源信息管理的代码_crawler4j源码学习(2):Ziroom租房网房源信息采集爬虫
/*** @date 2016年8月20日 下午6:13:24 *@version*@sinceJDK 1.8*/ public class ZiroomCrawler extendsWebCrawl ...
- 基于Qt5.14.2和mingw的Qt源码学习(三) — 元对象系统简介及moc工具是如何保存类属性和方法的
基于Qt5.14.2和mingw的Qt源码学习(三) - 元对象系统简介及moc工具是如何保存类属性和方法的 一.什么是元对象系统 1.元对象系统目的 2.实现元对象系统的关键 3.元对象系统的其他一 ...
- Flask源码学习【个人自学记录】-应用准备阶段
0. 前情提要: 掌握基础的flask语法知识与python语法知识. 参考资料:https://www.bilibili.com/video/BV11Y411h71J 0.1 flask版本 本文所 ...
- Tomcat源码学习(一)
Tomcat源码学习(一) 已有 9159 次阅读 2008-3-13 03:10 |个人分类:Tomcat|系统分类:开发 http://blog.ccidnet.com/home.php?mod= ...
- Shiro源码学习之二
接上一篇 Shiro源码学习之一 3.subject.login 进入login public void login(AuthenticationToken token) throws Authent ...
- Shiro源码学习之一
一.最基本的使用 1.Maven依赖 <dependency><groupId>org.apache.shiro</groupId><artifactId&g ...
- mutations vuex 调用_Vuex源码学习(六)action和mutation如何被调用的(前置准备篇)...
前言 Vuex源码系列不知不觉已经到了第六篇.前置的五篇分别如下: 长篇连载:Vuex源码学习(一)功能梳理 长篇连载:Vuex源码学习(二)脉络梳理 作为一个Web前端,你知道Vuex的instal ...
- vue实例没有挂载到html上,vue 源码学习 - 实例挂载
前言 在学习vue源码之前需要先了解源码目录设计(了解各个模块的功能)丶Flow语法. src ├── compiler # 把模板解析成 ast 语法树,ast 语法树优化,代码生成等功能. ├── ...
- 2021-03-19Tomcat源码学习--WebAppClassLoader类加载机制
Tomcat源码学习--WebAppClassLoader类加载机制 在WebappClassLoaderBase中重写了ClassLoader的loadClass方法,在这个实现方法中我们可以一窥t ...
- jQuery源码学习之Callbacks
jQuery源码学习之Callbacks jQuery的ajax.deferred通过回调实现异步,其实现核心是Callbacks. 使用方法 使用首先要先新建一个实例对象.创建时可以传入参数flag ...
最新文章
- Python图像处理,替代PS做好效果图!
- linux系统获取用户信息失败怎么办,异常详细信息: System.Data.SqlClient.SqlException: 用户 'NT AUTHORITY\IUSR' 登录失败解决办法...
- 多选框向后台传值,多选框的回显,对多选框的各种操作
- 关于Application.Lock和Lock(obj)
- css媒体查询(手机、平板、PC)
- leveldb资料整理
- Linux中文件复制、删除、移动、压缩、解压命令
- 光伏项目用地政策解析
- c++interesting转换为uint_能让手机电脑“小屏变大屏”的神奇转换器,到底是个什么玩意儿?...
- [10秒学会] - iOS录制屏幕 ReplayKit
- Linux - wxWidgets安装和编译HelloWorld
- 在html标签中写css样式,html style样式标签元素教程
- Apache Kafka简介与安装(一)
- OMNet++ Tic Toc例程的解析1
- 【质量管理】SMT电子厂超实用的六西格玛(6σ)质量管理工具一览表!
- 什么是顶尖的互联网产品经理?
- Centos7搭建Frps服务端的教程
- OsmocomBB SMS Sniffer
- js中事件绑定3种方法以及事件委托
- 计算机电源可以改装,玩转电源:将电脑电源改成可调稳压电源的设计