.使用 HttpClient 和 HtmlParser 实现简易爬虫

本小结简单的介绍一下 HttpClinet 和 HtmlParser 两个开源的项目,以及他们的网站和提供下载的地址。

  HttpClient 简介

 HTTP 协议是现在的因特网最重要的协议之一。除了 WEB 浏览器之外, WEB 服务,基于网络的应用程序以及日益增长的网络计算不断扩展着 HTTP 协议的角色,使得越来越多的应用程序需要 HTTP 协议的支持。虽然 JAVA 类库 .net 包提供了基本功能, 来使用 HTTP 协议访问网络资源,但是其灵活性和功能远不能满足很多应用程序的需要。而 Jakarta Commons HttpClient 组件寻求提供更为灵活,更加高效的 HTTP 协议支持,简化基于 HTTP协议的应用程序的创建。HttpClient 提供了很多的特性,支持最新的HTTP 标准,可以访问这里了解更多关于 HttpClinet 的详细信息。目前有很多的开源项目都用到了 HttpClient 提供的 HTTP功能,登陆网址可以查看这些项目。本文中使用 HttpClinet 提供的类库来访问和下载 Internet上面的网页,在后续部分会详细介绍到其提供的两种请求网络资源的方法: Get 请求和 Post 请求。Apatche 提供免费的 HTTPClien t源码和 JAR 包下载,可以登陆这里 下载最新的HttpClient 组件。笔者使用的是 HttpClient3.1。

  HtmlParser 简介

   当今的 Internet 上面有数亿记的网页,越来越多应用程序将这些网页作为分析和处理的数据对象。这些网页多为半结构化的文本,有着大量的标签和嵌套的结构。当我们自己开发一些处理网页的应用程序时,会想到要开发一个单独的网页解析器,这一部分的工作必定需要付出相当的精力和时间。事实上,做为 JAVA 应用程序开发者,HtmlParser 为其提供了强大而灵活易用的开源类库,大大节省了写一个网页解析器的开销。 HtmlParser 是 http://sourceforge.net 上活跃的一个开源项目,它提供了线性和嵌套两种方式来解析网页,主要用于 html 网页的转换(Transformation)以及网页内容的抽取(Extraction)。HtmlParser 有如下一些易于使用的特性:过滤器 (Filters),访问者模式 (Visitors),处理自定义标签以及易于使用的 JavaBeans。正如 HtmlParser 首页所说:它是一个快速,健壮以及严格测试过的组件;以它设计的简洁,程序运行的速度以及处理 Internet 上真实网页的能力吸引着越来越多的开发者。本文中就是利用HtmlParser 里提取网页里的链接,实现简易爬虫里的关键部分。HtmlParser 最新的版本是HtmlParser1.6,可以登陆这里下载其源码、 API 参考文档以及 JAR 包。


 简单强大的 StringBean

 如果你想要网页中去掉所有的标签后剩下的文本,那就是用 StringBean 吧。以下简单的代码可以帮你解决这样的问题:

  清单5

  StringBeansb = new StringBean();

  sb.setLinks(false);//设置结果中去点链接

  sb.setURL(url);//设置你所需要滤掉网页标签的页面 url

  System.out.println(sb.getStrings());//打印结果

  HtmlParser 提供了强大的类库来处理网页,由于本文旨在简单的介绍,因此只是将与笔者后续爬虫部分有关的关键类库进行了示例说明。感兴趣的读者可以专门来研究一下 HtmlParser 更为强大的类库。

  简易爬虫的实现

  HttpClient 提供了便利的 HTTP 协议访问,使得我们可以很容易的得到某个网页的源码并保存在本地;HtmlParser提供了如此简便灵巧的类库,可以从网页中便捷的提取出指向其他网页的超链接。笔者结合这两个开源包,构建了一个简易的网络爬虫。

  爬虫 (Crawler) 原理

   学过数据结构的读者都知道有向图这种数据结构。如下图所示,如果将网页看成是图中的某一个节点,而将网页中指向其他网页的链接看成是这个节点指向其他节点的边,那么我们很容易将整个 Internet 上的网页建模成一个有向图。理论上,通过遍历算法遍历该图,可以访问到Internet上的几乎所有的网页。最简单的遍历就是宽度优先以及深度优先。以下笔者实现的简易爬虫就是使用了宽度优先的爬行策略。

  图 2. 网页关系的建模图

  简易爬虫实现流程

  在看简易爬虫的实现代码之前,先介绍一下简易爬虫爬取网页的流程。

http://c.tieba.baidu.com/p/3408961718
http://c.tieba.baidu.com/p/3408971171
http://c.tieba.baidu.com/p/3408978819
http://c.tieba.baidu.com/p/3408983919
http://c.tieba.baidu.com/p/3408987713
http://c.tieba.baidu.com/p/3408991963
http://c.tieba.baidu.com/p/3408996472
http://c.tieba.baidu.com/p/3409001170
http://c.tieba.baidu.com/p/3409005781
http://c.tieba.baidu.com/p/3409010342
http://c.tieba.baidu.com/p/3409015144
http://c.tieba.baidu.com/p/3409019913
http://c.tieba.baidu.com/p/3409024815
http://c.tieba.baidu.com/p/3409029758
http://c.tieba.baidu.com/p/3409034566
http://c.tieba.baidu.com/p/3409039584
http://c.tieba.baidu.com/p/3409044532
http://c.tieba.baidu.com/p/3409049586
http://c.tieba.baidu.com/p/3409054519
http://c.tieba.baidu.com/p/3409092339
http://c.tieba.baidu.com/p/3409071327
http://c.tieba.baidu.com/p/3409103494
http://c.tieba.baidu.com/p/3409108450
http://c.tieba.baidu.com/p/3409113377
http://c.tieba.baidu.com/p/3409118414
http://c.tieba.baidu.com/p/3409123357
http://c.tieba.baidu.com/p/3409128339
http://c.tieba.baidu.com/p/3409133208
http://c.tieba.baidu.com/p/3409138003
http://c.tieba.baidu.com/p/3409169910
http://c.tieba.baidu.com/p/3401329030
http://c.tieba.baidu.com/p/3379202187
http://c.tieba.baidu.com/p/3404894476
http://c.tieba.baidu.com/p/3406909576
http://c.tieba.baidu.com/p/3406914372
http://c.tieba.baidu.com/p/3406914946
http://c.tieba.baidu.com/p/3406916795
http://c.tieba.baidu.com/p/3406921339
http://c.tieba.baidu.com/p/3379078552
http://c.tieba.baidu.com/p/3406920477
http://c.tieba.baidu.com/p/3408735878
http://c.tieba.baidu.com/p/3408743663
http://c.tieba.baidu.com/p/3408744284
http://c.tieba.baidu.com/p/3408744762
http://c.tieba.baidu.com/p/3408745167
http://c.tieba.baidu.com/p/3408746075
http://c.tieba.baidu.com/p/3408746973
http://c.tieba.baidu.com/p/3408747256
http://c.tieba.baidu.com/p/3408747316
http://c.tieba.baidu.com/p/3408747796
http://c.tieba.baidu.com/p/3408748333
http://c.tieba.baidu.com/p/3408748673
http://c.tieba.baidu.com/p/3408749015
http://c.tieba.baidu.com/p/3408750253
http://c.tieba.baidu.com/p/3408750415
http://c.tieba.baidu.com/p/3408750875
http://c.tieba.baidu.com/p/3408751623
http://c.tieba.baidu.com/p/3408751925
http://c.tieba.baidu.com/p/3408752216
http://c.tieba.baidu.com/p/3408752771
http://c.tieba.baidu.com/p/3408753118
http://c.tieba.baidu.com/p/3408754309
http://c.tieba.baidu.com/p/3408754743
http://c.tieba.baidu.com/p/3408755041
http://c.tieba.baidu.com/p/3408755375
http://c.tieba.baidu.com/p/3408755719
http://c.tieba.baidu.com/p/3408756064
http://c.tieba.baidu.com/p/3408756387
http://c.tieba.baidu.com/p/3408756724
http://c.tieba.baidu.com/p/3408757082
http://c.tieba.baidu.com/p/3408757424
http://c.tieba.baidu.com/p/3408757823
http://c.tieba.baidu.com/p/3408758170
http://c.tieba.baidu.com/p/3408758494
http://c.tieba.baidu.com/p/3408758839
http://c.tieba.baidu.com/p/3408759225
http://c.tieba.baidu.com/p/3408759621
http://c.tieba.baidu.com/p/3408760030
http://c.tieba.baidu.com/p/3408760425
http://c.tieba.baidu.com/p/3408760804
http://c.tieba.baidu.com/p/3408761254
http://c.tieba.baidu.com/p/3408761690
http://c.tieba.baidu.com/p/3408762110
http://c.tieba.baidu.com/p/3408762553
http://c.tieba.baidu.com/p/3408763017
http://c.tieba.baidu.com/p/3408763466
http://c.tieba.baidu.com/p/3408763928
http://c.tieba.baidu.com/p/3408764456
http://c.tieba.baidu.com/p/3408764468
http://c.tieba.baidu.com/p/3408765000
http://c.tieba.baidu.com/p/3408765490
http://c.tieba.baidu.com/p/3408766037
http://c.tieba.baidu.com/p/3408766614
http://c.tieba.baidu.com/p/3408767244
http://c.tieba.baidu.com/p/3408767944
http://c.tieba.baidu.com/p/3408768646
http://c.tieba.baidu.com/p/3408769358
http://c.tieba.baidu.com/p/3408770073
http://c.tieba.baidu.com/p/3408770836
http://c.tieba.baidu.com/p/3408771618
http://c.tieba.baidu.com/p/3408773263
http://c.tieba.baidu.com/p/3408772451
http://c.tieba.baidu.com/p/3408774141
http://c.tieba.baidu.com/p/3408775072
http://c.tieba.baidu.com/p/3408776075
http://c.tieba.baidu.com/p/3408777106
http://c.tieba.baidu.com/p/3408778147
http://c.tieba.baidu.com/p/3396342442
http://c.tieba.baidu.com/p/3381905005
http://c.tieba.baidu.com/p/3408779283
http://c.tieba.baidu.com/p/3379475874
http://c.tieba.baidu.com/p/3404102550
http://c.tieba.baidu.com/p/3404106494
http://c.tieba.baidu.com/p/3404114264
http://c.tieba.baidu.com/p/3404117528
http://c.tieba.baidu.com/p/3404121853
http://c.tieba.baidu.com/p/3404139787
http://c.tieba.baidu.com/p/3404162264
http://c.tieba.baidu.com/p/3404167365
http://c.tieba.baidu.com/p/3408780395
http://c.tieba.baidu.com/p/3404182093
http://c.tieba.baidu.com/p/3404186454
http://c.tieba.baidu.com/p/3404218080
http://c.tieba.baidu.com/p/3404234012
http://c.tieba.baidu.com/p/3404397089
http://c.tieba.baidu.com/p/3408841663
http://c.tieba.baidu.com/p/3408839072
http://c.tieba.baidu.com/p/3408836550
http://c.tieba.baidu.com/p/3408834039
http://c.tieba.baidu.com/p/3408831624
http://c.tieba.baidu.com/p/3408829263
http://c.tieba.baidu.com/p/3408827111
http://c.tieba.baidu.com/p/3408824893
http://c.tieba.baidu.com/p/3408822658
http://c.tieba.baidu.com/p/3408820525
http://c.tieba.baidu.com/p/3408818529
http://c.tieba.baidu.com/p/3408816505
http://c.tieba.baidu.com/p/3408814527
http://c.tieba.baidu.com/p/3408812584
http://c.tieba.baidu.com/p/3408810545
http://c.tieba.baidu.com/p/3408808575
http://c.tieba.baidu.com/p/3408806672
http://c.tieba.baidu.com/p/3408804746
http://c.tieba.baidu.com/p/3408802832
http://c.tieba.baidu.com/p/3408800993
http://c.tieba.baidu.com/p/3408799236
http://c.tieba.baidu.com/p/3408797524
http://c.tieba.baidu.com/p/3408795872
http://c.tieba.baidu.com/p/3408794250
http://c.tieba.baidu.com/p/3408792666
http://c.tieba.baidu.com/p/3408791203
http://c.tieba.baidu.com/p/3408789795
http://c.tieba.baidu.com/p/3408788282
http://c.tieba.baidu.com/p/3408786883
http://c.tieba.baidu.com/p/3408785527
http://c.tieba.baidu.com/p/3406911722
http://c.tieba.baidu.com/p/3406910802
http://c.tieba.baidu.com/p/3406909896
http://c.tieba.baidu.com/p/3405044440
http://c.tieba.baidu.com/p/3405042451
http://c.tieba.baidu.com/p/3408784167
http://c.tieba.baidu.com/p/3404891064
http://c.tieba.baidu.com/p/3404886459
http://c.tieba.baidu.com/p/3404570261
http://c.tieba.baidu.com/p/3404563126
http://c.tieba.baidu.com/p/3404550521
http://c.tieba.baidu.com/p/3382203031
http://c.tieba.baidu.com/p/3408782867
http://c.tieba.baidu.com/p/3404541723
http://c.tieba.baidu.com/p/3404521495
http://c.tieba.baidu.com/p/3404496080
http://c.tieba.baidu.com/p/3404465069
http://c.tieba.baidu.com/p/3404432477
http://c.tieba.baidu.com/p/3404427369
http://c.tieba.baidu.com/p/3408781615
http://c.tieba.baidu.com/p/3409040060
http://c.tieba.baidu.com/p/3409034973
http://c.tieba.baidu.com/p/3409030141

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。