crawler4j源码学习(1):搜狐新闻网新闻标题采集爬虫
crawler4j是用Java实现的开源网络爬虫。提供了简单易用的接口,可以在几分钟内创建一个多线程网络爬虫。下面实例结合jsoup,采集搜狐新闻网(http://news.sohu.com/)新闻标题信息。
所有的过程仅需两步完成:
第一步:建立采集程序核心部分
/**
* @date 2016年8月20日 上午11:52:13
* @version
* @since JDK 1.8
*/
public class MyCrawler extends WebCrawler { //链接地址过滤//
private final static Pattern FILTERS = Pattern.compile(".*(\\.(css|js|gif|jpg" + "|png|mp3|mp3|zip|gz))$"); @Override
public boolean shouldVisit(Page referringPage, WebURL url) {
String href = url.getURL().toLowerCase();
return !FILTERS.matcher(href).matches() && href.startsWith("http://news.sohu.com/");
} /**
* This function is called when a page is fetched and ready to be processed
* by your program.
*/
@Override
public void visit(Page page) {
String url = page.getWebURL().getURL();
logger.info("URL: " + url); if (page.getParseData() instanceof HtmlParseData) {
HtmlParseData htmlParseData = (HtmlParseData) page.getParseData();
String text = htmlParseData.getText();
String html = htmlParseData.getHtml();
Set<WebURL> links = htmlParseData.getOutgoingUrls(); logger.debug("Text length: " + text.length());
logger.debug("Html length: " + html.length());
logger.debug("Number of outgoing links: " + links.size());
logger.info("Title: " + htmlParseData.getTitle()); }
} }
第二步:建立采集程序控制部分
/**
* @date 2016年8月20日 上午11:55:56
* @version
* @since JDK 1.8
*/
public class MyController { /**
* @param args
* @since JDK 1.8
*/
public static void main(String[] args) {
// TODO Auto-generated method stub //本地嵌入式数据库,采用berkeley DB
String crawlStorageFolder = "data/crawl/root";
int numberOfCrawlers = 3; CrawlConfig config = new CrawlConfig();
config.setCrawlStorageFolder(crawlStorageFolder); /*
* Instantiate the controller for this crawl.
*/
PageFetcher pageFetcher = new PageFetcher(config);
RobotstxtConfig robotstxtConfig = new RobotstxtConfig();
RobotstxtServer robotstxtServer = new RobotstxtServer(robotstxtConfig, pageFetcher);
CrawlController controller;
try {
controller = new CrawlController(config, pageFetcher, robotstxtServer);
controller.addSeed("http://news.sohu.com/");
controller.start(MyCrawler.class, numberOfCrawlers);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } }
采集结果展示:

crawler4j源码学习(1):搜狐新闻网新闻标题采集爬虫的更多相关文章
- crawler4j源码学习(2):Ziroom租房网房源信息采集爬虫
crawler4j是用Java实现的开源网络爬虫.提供了简单易用的接口,可以在几分钟内创建一个多线程网络爬虫.下面实例结合jsoup解析网页,javacsv存储采集数据:采集自如ziroom租房网(h ...
- colly源码学习
colly源码学习 colly是一个golang写的网络爬虫.它使用起来非常顺手.看了一下它的源码,质量也是非常好的.本文就阅读一下它的源码. 使用示例 func main() { c := coll ...
- MVC系列——MVC源码学习:打造自己的MVC框架(四:了解神奇的视图引擎)
前言:通过之前的三篇介绍,我们基本上完成了从请求发出到路由匹配.再到控制器的激活,再到Action的执行这些个过程.今天还是趁热打铁,将我们的View也来完善下,也让整个系列相对完整,博主不希望烂尾. ...
- Vue2.1.7源码学习
原本文章的名字叫做<源码解析>,不过后来想想,还是用“源码学习”来的合适一点,在没有彻底掌握源码中的每一个字母之前,“解析”就有点标题党了.建议在看这篇文章之前,最好打开2.1.7的源码对 ...
- Tomcat源码学习
Tomcat源码学习(一) 转自:http://carllgc.blog.ccidnet.com/blog-htm-do-showone-uid-4092-type-blog-itemid-26309 ...
- Java集合专题总结(1):HashMap 和 HashTable 源码学习和面试总结
2017年的秋招彻底结束了,感觉Java上面的最常见的集合相关的问题就是hash--系列和一些常用并发集合和队列,堆等结合算法一起考察,不完全统计,本人经历:先后百度.唯品会.58同城.新浪微博.趣分 ...
- jQuery源码学习感想
还记得去年(2015)九月份的时候,作为一个大四的学生去参加美团霸面,结果被美团技术总监教育了一番,那次问了我很多jQuery源码的知识点,以前虽然喜欢研究框架,但水平还不足够来研究jQuery源码, ...
- MVC系列——MVC源码学习:打造自己的MVC框架(三:自定义路由规则)
前言:上篇介绍了下自己的MVC框架前两个版本,经过两天的整理,版本三基本已经完成,今天还是发出来供大家参考和学习.虽然微软的Routing功能已经非常强大,完全没有必要再“重复造轮子”了,但博主还是觉 ...
- MVC系列——MVC源码学习:打造自己的MVC框架(二:附源码)
前言:上篇介绍了下 MVC5 的核心原理,整篇文章比较偏理论,所以相对比较枯燥.今天就来根据上篇的理论一步一步进行实践,通过自己写的一个简易MVC框架逐步理解,相信通过这一篇的实践,你会对MVC有一个 ...
随机推荐
- centos6 LVS-DR模式---分析
LVS是什么就不多说了. 先上拓扑图 1台LVS 3台Realserver 一个客户端. 环境全部模拟全在内网环境(selinux和iptables关闭) 先简略说一下安装步骤: LVS上 ...
- equals和=,==的区别
一. ==和equals的区别 1. ==是运算符 2. equals是String对象的方法 一般有两种类型的比较 1. 基本数据类型的比较 2. 引用对象的比较 1. 基本数据类型的比较 ==和e ...
- Mysql5.5命令行修改密码
今天下载了mysql5.5.45免安装版,配置好之后发现mysql默认是没有设置密码的,也就是密码为空. 如果是本机作开发测试用,有无密码倒也无所谓,不过发布在服务器上没有密码肯定是不行的,那就需要设 ...
- ios-获取商店已上线app信息
NSString *url = [[NSString alloc] initWithFormat:@"http://itunes.apple.com/lookup?id=%@",@ ...
- Box2D淌坑日记: 如何正确的设置角度
对刚体角度设置的唯一函数是 SetTransform 然而,这个函数不会对传入的角度作任何处理,因此,如果你试图设置一个角度,并应用一个revoluteJoint时,可能会出现问题. 我在实践中碰到的 ...
- Java简单类——一对多映射(省、市)
class Province { private int pid ; private String name ; private City cities [] ; public Province (i ...
- github展示项目
首先在原repo中创建一个gh-pages分支,然后把你master分支的东西都搬过来,将这个gh-pages作为你的HEAD主分支.如果想删掉master分支,需要在repo的settings中修改 ...
- Json 、 Jsonp
SONP is simply a hack to allow web apps to retrieve data across domains. It could be said that it vi ...
- QTreeWidget
#include "dialog.h" #include "ui_dialog.h" #include<QtCore> #include<Qt ...
- HIVE 时间操作函数
转自http://www.oratea.net/?p=944 日期函数UNIX时间戳转日期函数: from_unixtime语法: from_unixtime(bigint unixtime[, ...