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):搜狐新闻网新闻标题采集爬虫相关推荐

  1. java房源信息管理的代码_crawler4j源码学习(2):Ziroom租房网房源信息采集爬虫

    /*** @date 2016年8月20日 下午6:13:24 *@version*@sinceJDK 1.8*/ public class ZiroomCrawler extendsWebCrawl ...

  2. 基于Qt5.14.2和mingw的Qt源码学习(三) — 元对象系统简介及moc工具是如何保存类属性和方法的

    基于Qt5.14.2和mingw的Qt源码学习(三) - 元对象系统简介及moc工具是如何保存类属性和方法的 一.什么是元对象系统 1.元对象系统目的 2.实现元对象系统的关键 3.元对象系统的其他一 ...

  3. Flask源码学习【个人自学记录】-应用准备阶段

    0. 前情提要: 掌握基础的flask语法知识与python语法知识. 参考资料:https://www.bilibili.com/video/BV11Y411h71J 0.1 flask版本 本文所 ...

  4. Tomcat源码学习(一)

    Tomcat源码学习(一) 已有 9159 次阅读 2008-3-13 03:10 |个人分类:Tomcat|系统分类:开发 http://blog.ccidnet.com/home.php?mod= ...

  5. Shiro源码学习之二

    接上一篇 Shiro源码学习之一 3.subject.login 进入login public void login(AuthenticationToken token) throws Authent ...

  6. Shiro源码学习之一

    一.最基本的使用 1.Maven依赖 <dependency><groupId>org.apache.shiro</groupId><artifactId&g ...

  7. mutations vuex 调用_Vuex源码学习(六)action和mutation如何被调用的(前置准备篇)...

    前言 Vuex源码系列不知不觉已经到了第六篇.前置的五篇分别如下: 长篇连载:Vuex源码学习(一)功能梳理 长篇连载:Vuex源码学习(二)脉络梳理 作为一个Web前端,你知道Vuex的instal ...

  8. vue实例没有挂载到html上,vue 源码学习 - 实例挂载

    前言 在学习vue源码之前需要先了解源码目录设计(了解各个模块的功能)丶Flow语法. src ├── compiler # 把模板解析成 ast 语法树,ast 语法树优化,代码生成等功能. ├── ...

  9. 2021-03-19Tomcat源码学习--WebAppClassLoader类加载机制

    Tomcat源码学习--WebAppClassLoader类加载机制 在WebappClassLoaderBase中重写了ClassLoader的loadClass方法,在这个实现方法中我们可以一窥t ...

  10. jQuery源码学习之Callbacks

    jQuery源码学习之Callbacks jQuery的ajax.deferred通过回调实现异步,其实现核心是Callbacks. 使用方法 使用首先要先新建一个实例对象.创建时可以传入参数flag ...

最新文章

  1. Python图像处理,替代PS做好效果图!
  2. linux系统获取用户信息失败怎么办,异常详细信息: System.Data.SqlClient.SqlException: 用户 'NT AUTHORITY\IUSR' 登录失败解决办法...
  3. 多选框向后台传值,多选框的回显,对多选框的各种操作
  4. 关于Application.Lock和Lock(obj)
  5. css媒体查询(手机、平板、PC)
  6. leveldb资料整理
  7. Linux中文件复制、删除、移动、压缩、解压命令
  8. 光伏项目用地政策解析
  9. c++interesting转换为uint_能让手机电脑“小屏变大屏”的神奇转换器,到底是个什么玩意儿?...
  10. [10秒学会] - iOS录制屏幕 ReplayKit
  11. Linux - wxWidgets安装和编译HelloWorld
  12. 在html标签中写css样式,html style样式标签元素教程
  13. Apache Kafka简介与安装(一)
  14. OMNet++ Tic Toc例程的解析1
  15. 【质量管理】SMT电子厂超实用的六西格玛(6σ)质量管理工具一览表!
  16. 什么是顶尖的互联网产品经理?
  17. Centos7搭建Frps服务端的教程
  18. OsmocomBB SMS Sniffer
  19. js中事件绑定3种方法以及事件委托
  20. 计算机电源可以改装,玩转电源:将电脑电源改成可调稳压电源的设计

热门文章

  1. Codeforces 1032F Vasya and Maximum Matching dp
  2. SpringMVC详解(四)------SSM三大框架整合之登录功能实现
  3. 快速定位iOS线上BUG在哪个控制器崩溃
  4. winform打包项目
  5. ubuntu 环境变量配置
  6. JS getElementsByClassName
  7. 2009年统考计算机考研真题
  8. 深入理解Yii2.0(1) 属性
  9. Java中的断言assert的用法
  10. Windows系统后台运行java程序(关闭命令行窗口执行)