crawler4j 学习
Posted 悟知清风
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了crawler4j 学习相关的知识,希望对你有一定的参考价值。
crawler4j 学习(一)
crawler4j是一个轻量级多线程网络爬虫,开发者可以调用相应的接口在短时间内创建一个多线程网络爬虫。
前期准备
使用maven
为了使用最近版本的crawler4j,请将下面的片段添加到你的pom.xml文件中。
<dependency> <groupId>edu.uci.ics</groupId> <artifactId>crawler4j</artifactId> <version>4.1</version> </dependency>
不没有maven项目
crawler4j JARs 可以在发行的版本页面和Maven Central(应该是maven中心)找到。
如果你没有maven项目却想使用crawler4j,注意crawler4j jar文件有几个外部的依赖。在最近的版本中,你可以发现一个命名为crawler4j-X Y -with-dependencies.jar包含了所有的依赖的捆绑。你可以下载下来并且将它添加到你的classpath下获得所有的依赖。
过程
使用crawler4j需要创建一个继承WebCrawler的爬虫类。
public class MyCrawler extends WebCrawler { private final static Pattern FILTERS = Pattern.compile(".*(\\\\.(css|js|gif|jpg" + "|png|mp3|mp3|zip|gz))$"); /** * 这个方法有两个参数。第一个参数是我们发现的新的URL的页面并且第二个参数是新的URL。
* 你应该实现这个方法去指定这个被给的URL是不是应该去爬取。在这个例子中,我们指导
* 爬虫去忽视有CSS,JS,git等的URL并且知识获得了以“http://www.ics.uci.edu/”
* 开头的URL。在这种情况下,我们不需要用参考页面这个参数来做决定。 */ @Override public boolean shouldVisit(Page referringPage, WebURL url) { String href = url.getURL().toLowerCase(); return !FILTERS.matcher(href).matches() && href.startsWith("http://www.ics.uci.edu/"); } /** * 这个功能是抓取准备被你的项目处理的页面 */ @Override public void visit(Page page) { String url = page.getWebURL().getURL(); System.out.println("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(); System.out.println("Text length: " + text.length()); System.out.println("Html length: " + html.length()); System.out.println("Number of outgoing links: " + links.size()); } } }
上面的例子覆盖了两个主要方法:
- shouldVisit:这个方法决定了要抓取的URL及其内容,例子中只允许抓取“www.ics.uci.edu”这个域的页面,不允许.css、.js和多媒体等文件。
- visit:当URL下载完成会调用这个方法。你可以轻松获取下载页面的url, 文本, 链接, html,和唯一id等内容。
补充:
search engines
参考页面:http://www.cnblogs.com/s1-myblog/p/6197426.html
以上是关于crawler4j 学习的主要内容,如果未能解决你的问题,请参考以下文章