HtmlParser + HttpClient 实现爬虫
简易爬虫的实现 HttpClient 提供了便利的 HTTP 协议访问,使得我们可以很容易的得到某个网页的源码并保存在本地;HtmlParser 提供了如此简便灵巧的类库,可以从网页中便捷的提取出指向其他网页的超链接。笔者结合这两个开源包,构建了一个简易的网络爬虫。 爬虫 (Crawler) 原理 学过数据结构的读者都知道有向图这种数据结构。如下图所示,如果将网页看成是图中的某一个节点,而将网页中指向其他网页的链接看成是这个节点指向其他节点的边,那么我们很容易将整个 Internet 上的网页建模成一个有向图。理论上,通过遍历算法遍历该图,可以访问到Internet 上的几乎所有的网页。最简单的遍历就是宽度优先以及深度优先。以下笔者实现的简易爬虫就是使用了宽度优先的爬行策略。 图 2. 网页关系的建模图 简易爬虫实现流程 在看简易爬虫的实现代码之前,先介绍一下简易爬虫爬取网页的流程。 图 3. 爬虫流程图 各个类的源码以及说明 对应上面的流程图,简易爬虫由下面几个类组成,各个类职责如下: Crawler.java:爬虫的主方法入口所在的类,实现爬取的主要流程。 LinkDb.java:用来保存已经访问的 url 和待爬取的 url 的类,提供url出对入队操作。 Queue.java: 实现了一个简单的队列,在 LinkDb.java 中使用了此类。 FileDownloader