开源JAVA爬虫crawler4j源码分析 - 2 开始使用crawler4j
来源:互联网 发布:中国经济数据对比 编辑:程序博客网 时间:2024/05/21 10:42
使用crawler4j非常简单,源码中已经包涵了很多的例子,并且是直接就可以运行的。
首先运行pom.xml,或者是直接下载依赖库:
https://code.google.com/p/crawler4j/downloads/detail?name=crawler4j-3.5-dependencies.zip&can=2&q=
1. 运行Example
打开edu.uci.ics.crawler4j.examples.basic下的BasicCrawlController,就一个main方法,注释掉前3行,改下目录和线程数:
/*if (args.length != 2) { System.out.println("Needed parameters: ");System.out.println("\t rootFolder (it will contain intermediate crawl data)");System.out.println("\t numberOfCralwers (number of concurrent threads)");return;}*//* * 爬取时数据临时存放目录. */String crawlStorageFolder = "./tmp";/* * 爬取线程数,即同时有多少个爬虫工作. */int numberOfCrawlers = 5;
保存,运行,程序就开始输出爬取出来的信息了。看,多简单!
2. 爬取指定网站
翻到BasicCrawlController最后,修改入口URL:
/* * 添加入口URL */controller.addSeed("http://www.ics.uci.edu/");controller.addSeed("http://www.ics.uci.edu/~lopes/");controller.addSeed("http://www.ics.uci.edu/~welling/");/* * 开始工作 */controller.start(BasicCrawler.class, numberOfCrawlers);
入口URL即爬虫先从哪些网页开始爬,程序会先将入口页面加入列表,再下载这些页面,然后解析出这些页面里面包涵的链接地址(主要是HTML的a,img,iframe等标签),把这些地址再加入列表,再下载,再解析……
3. 输出指定信息
打开BasicCrawler,修改visit方法:
public void visit(Page page) {int docid = page.getWebURL().getDocid(); //这是程序定义的IDString url = page.getWebURL().getURL(); //URL地址String domain = page.getWebURL().getDomain(); //域名,如baidu.comString path = page.getWebURL().getPath(); //路径,不包含URL参数String subDomain = page.getWebURL().getSubDomain(); //子域名,如www,String parentUrl = page.getWebURL().getParentUrl(); //父页面,即从哪个页面发现的该URL的String anchor = page.getWebURL().getAnchor(); //锚,即HTML显示的信息,如<a href="***">锚</a>System.out.println("Docid: " + docid);System.out.println("URL: " + url);System.out.println("Domain: '" + domain + "'");System.out.println("Sub-domain: '" + subDomain + "'");System.out.println("Path: '" + path + "'");System.out.println("Parent page: " + parentUrl);System.out.println("Anchor text: " + anchor);if (page.getParseData() instanceof HtmlParseData) {HtmlParseData htmlParseData = (HtmlParseData) page.getParseData();String text = htmlParseData.getText(); //HTML显示的信息String html = htmlParseData.getHtml(); //HTML全部代码List<WebURL> links = htmlParseData.getOutgoingUrls(); //在该页面发现的全部URL地址System.out.println("Text length: " + text.length());System.out.println("Html length: " + html.length());System.out.println("Number of outgoing links: " + links.size());}Header[] responseHeaders = page.getFetchResponseHeaders(); //页面服务器返回的HTML头信息if (responseHeaders != null) {System.out.println("Response headers:");for (Header header : responseHeaders) {System.out.println("\t" + header.getName() + ": " + header.getValue());}}System.out.println("=============");}
4. 爬取指定规则页面
很简单,直接修改BasicCrawler的shouldVisit方法:
private final static Pattern FILTERS = Pattern.compile(".*(\\.(css|js|bmp|gif|jpe?g" + "|png|tiff?|mid|mp2|mp3|mp4"+ "|wav|avi|mov|mpeg|ram|m4v|pdf" + "|rm|smil|wmv|swf|wma|zip|rar|gz))$");/** * 是否抓取页面 */@Overridepublic boolean shouldVisit(WebURL url) {String href = url.getURL().toLowerCase();return !FILTERS.matcher(href).matches() && href.startsWith("http://www.ics.uci.edu/");}
默认不爬不能解析的格式,如音乐视频,默认只爬URL是http://www.ics.uci.edu开头的,修改方法和正则就可以了。
5. 爬取指定数量和深度的页面
回到BasicCrawlController,找到下面两行代码,修改就可以了:
/* * 深度,即从入口URL开始算,URL是第几层。如入口A是1,从A中找到了B,B中又有C,则B是2,C是3 */config.setMaxDepthOfCrawling(2);/* * 最多爬取多少个页面 */config.setMaxPagesToFetch(1000);
使用就这么简单,后面再介绍代码和原理。
2 0
- 开源JAVA爬虫crawler4j源码分析 - 2 开始使用crawler4j
- 开源JAVA爬虫crawler4j源码分析
- 开源JAVA爬虫crawler4j源码分析 - 1 开个头
- 开源JAVA爬虫crawler4j源码分析 - 3 线程管理
- 开源JAVA爬虫crawler4j源码分析 - 4 URL管理、URL队列
- java爬虫--crawler4j
- crawler4j java多线程网页爬虫
- Java网络爬虫crawler4j学习笔记<2> Util类
- Java开源爬虫框架crawler4j
- crawler4j源码分析(二)Frontier
- crawler4j源码分析(三)Fetcher
- crawler4j源码分析(四)Parser
- crawler4j源码分析(五)Robots协议
- crawler4j源码分析(五)Robots协议
- 关于crawler4j 爬虫
- crawler4j爬虫入门
- crawler4j源码解析
- Crawler4j的使用
- 实现无密码登录Win8系统的方法
- IOS开发之内存管理--dealloc该写些什么
- touch事件的响应过程
- Netty4学习笔记(2)-- Bootstrap
- 百度BAE平台的使用——部署Java项目
- 开源JAVA爬虫crawler4j源码分析 - 2 开始使用crawler4j
- Qt Model/View
- vi编辑器的模式
- android ActivityGroup中子Activity的setResult()后的onActivityResult不运行的解决办法
- Sicily 1090 highway + Kruskal +并查集实现
- c:if标签用法
- 3G上网卡在Liunx系统上实现上网的过程
- 背景色透明rgba
- Typedef的用法