1、 本 科 毕 业 论 文题 目 基于多线程的网络爬虫的设计与实现成都学院学士学位论文(设计)毕业设计(论文)原创性声明和使用授权说明原创性声明本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得 及其它教育机构的学位或学 历而使用过的材料。对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。作 者 签 名: 日 期: 指导教师签名: 日 期: 使用授权说明本人完全了解 大学关于收集、保存、使用毕业设计(论文)的规定,即
2、:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。作者签名: 日 期: 成都学院学士学位论文(设计)基于多线程的网络爬虫的设计与实现摘要:网络爬虫(Web Crawler) ,又叫网络蜘蛛(Web Spider) ,是搜索引擎的重要组成部分。随着网络的迅速发展,万维网成为大量信息的载体,如何有效地提取并利用这些信息成为一个巨大的挑战,作为搜索引擎不可或缺的一部分网络爬虫,一直是个热门的研究课题,它的效能,直接
3、决定了搜索引擎的未来。本课题所研究的网络爬虫采用广度优先搜索算法,并基于 Java语言进行网络编程。实现网络爬虫关键技术是对 URL进行分析和去重。为使网络爬虫具备更高效的抓取能力,因而使用了多线程技术。同时为了避免无限制的等待,应该对网络爬虫连接网络及读取时间最大值进行设定。 本课题的目标是研究并实现一个实现简单的可在后台自动运行的爬虫程序。系统可以进行面向主题的抓取。从行为上来看,它更近似于主题网络爬虫。关键词:网络爬虫;广度优先;Java; 多线程;成都学院学士学位论文(设计)Design and implementation of a web crawler based on mult
4、ithreadingSpecialty: Software Engineering Student Number: Student: Supervisor: ABSTRACT:Web Crawler, also called Web Spider, is an important part of search engine. With the rapid development of Internet, the World Wide Web becomes the carrier of a large amount of information. And How to effectively
5、extract and use this information to become a great challenge. The quality of a search engine is mostly depended on the quality of a Web Crawler that as an indispensable part of web crawler search engine. So Web Crawler is a hot research topic those years.The project which was studied in this paper u
6、sing the breadth-first search algorithm, and based on the Java language for network programming. Implementation of the key technology of web crawler is to analyze and to URL. In order to make the web crawler has more efficient grasping ability, so the use of multi-threading technology. At the same t
7、ime in order to avoid waiting without limit, should be on the web crawler connecting network and read the time of maximum value. The goal of this project is to research and realize an implementation can be run automatically in the background simple crawler program. System can be a subject oriented g
8、rab. From the point of view, it is more similar to the topic web crawler.Key words: Web Crawler; Breadth-First Search; Java; Multi-Threading成都学院学士学位论文(设计)I目 录绪 论 .11 概述 .21.1 研究目的和意义 .21.2 网络爬虫的历史 .21.3 研究现状和发展趋势 .32 网络爬虫相关技术 .52.1 URL .52.2 HTTP 协议 .52.2.1 HTTP 协议简介 .52.2.2 HTTP 消息的结构 .62.2.3 请求方法
9、.72.2.4 HTTP 状态代码 .82.3 Java 多线程 .82.3.1 定义 .82.3.2 优点 .82.3.3 不足 .82.3.4 Java 多线程编程 .92.4 Java 网络编程 .112.4.1 TCP/IP .112.4.2 网络编程步骤 .112.4.3 Java 网络编程技术 .132.5 正则表达式 .142.5.1 正则表达式特点 .142.5.2 符号功能 .152.6 网页搜索策略 .152.6.1 广度优先搜索 .152.6.2 深度优先搜索 .162.6.3 最佳优先搜索 .163 需求分析和模型设计 .173.1 网络爬虫的定义 .173.2 网络爬
10、虫的分类 .17成都学院学士学位论文(设计)II3.3 系统需求分析 .173.3.1 下载网页 .173.3.2 分解网页 .183.3.3 遍历网络 .183.3.4 存储网页 .183.4 模型设计 .183.5 数据库结构 .193.6 技术选型 .203.6.1 Java 简介 .203.6.2 eclipse 基本介绍 .204 网络爬虫模型的总体设计 .214.1 网络爬虫总体设计 .214.2 URL 处理 .214.2.1 URL 抽取 .214.2.2 URL 解析 .214.2.3 URL 判重 .224.2.4 URL 保存 .224.3 网页抓取 .224.4 网页相
11、关度 .224.4.1 什么是网页标题 .224.4.2 算法实现步骤和算法描述: .234.5 HttpClient 类库与 Jericho HTML Parser 类库 .234.5.1 HttpClient .234.5.2 Jericho Html Parser .234.6 多线程设计 .245 系统实现 .255.1 实现工具 .255.2 系统模块实现 .255.2.1 URL 队列 .255.2.2 网页下载 .265.2.3 提取 URL .275.2.4 Spider 类 .285.2.5 数据库操作 .29成都学院学士学位论文(设计)III6 系统运行测试 .306.1
12、系统运行测试 .306.2 系统分析 .32结 论 .33参考文献 .34致 谢 .35成都学院学士学位论文(设计)1绪 论随着计算机和网络技术的日臻成熟并被广泛的应用到社会生活的各个领域,网络上的信息呈爆炸式增长,并由此诞生了大量的数据,人类进入了一个“大数据时代” 。这使得人们在网上找到自己所需的信息越来越困难,如果在信息的海洋里捞针。据统计搜索引擎已经成为仅次于电子邮件服务,是人们使用最多的网路服务。搜索引擎搜集互联网上数以亿计的网页,并为每个关键词建立索引。用户通过输入自己感兴趣的关键字就能获得与之相关的网页。从搜索引擎出发就能很快的到达互联网的任何一个地方。在建立搜索引擎的过程中,获
13、取网页是非常重要的一个环节。爬虫程序就是用来获取网页的程序。网络爬虫,是一种按照一定的规则,自动的抓取因特网信息的程序或者脚本。另外一些不常使用的名字还有网路蚂蚁,自动索引,模拟程序或者蠕虫。网络蜘蛛是通过网页的链接地址来寻找网页,从网站的一个页面(通常是首页)开始,读取网页的内容,找到在网页中的其它链接地址,然后通过这些链接地址寻找下一个网页,这样一直循环下去,直到把这个网站所有的网页都抓取完为止。如果把整个互联网当成一个网站,那么网络蜘蛛就可以用这个原理把互联网上所有的网页都抓取下来。WEB资源自动获取技术程序就是用来搜集网页的程序。以何种策略遍历互联网上的网页,也成了该程序主要的研究方向
14、。现在比较流行的搜索引擎,比如 Google,百度,它们自动获取资源程序的技术内幕一般都不公开。目前几种比较常用的自动获取资源实现策略:广度优先的爬虫程序,Repetitive爬虫程序,定义爬行爬虫程序,深层次爬行爬虫程序。此外,还有根据概率论进行可用 Web页的数量估算,?用于评估互联网 Web规模的抽样爬虫程序;采用爬行深度、页面导入链接量分析等方法,限制从程序下载不相关的 Web页的选择性爬行程序等等。自动获取资源技术为搜索引擎从互联网上自动获取整个网页,也可以网页中的某一个图片或者是网页链接的文件等资源,是搜索引擎的重要组成部分。自动获取资源技术程序的实现策略,运行效率直接影响搜索引擎
15、的搜索结果。不同的搜索引擎,会根据对搜索结果的不同需求,选择最合适的爬行策略来搜集互联网上的信息。高效,优秀的自动获取资源程序可以使人们在互联网上寻找到更及时,更准确的信息。本课题旨在根据上述原理设计与实现一个网络爬虫系统。成都学院学士学位论文(设计)21 概述1.1 研究目的和意义网络蜘蛛是通过网页的链接地址来寻找网页,从网站的某一个页面(通常是首页)开始,读取网页的内容,找到在网页中的其它链接地址,然后通过这些链接地址寻找下一个网页,这样一直循环下去,直到把这个网站所有的网页都抓取完为止。而本课题的主要就是怎样更高效的获取网页,并通过所给条件筛选得到人们所需要的网页。随着互连网的飞速发展,
16、网络信息量呈现出爆炸性增长的趋势,当今这个时代被称为“大数据”时代。越来越多的信息涌到人们的面前,然而互联网在人们提供丰富信息的同时,却在如何对信息进行高效便捷使用方面给人民带来巨大的挑战:一方面互联网上的信息种类繁多、丰富多彩,而另一方面却很难找到真正有用的信息,当人们想从浩淼无边的数据海洋中快速准确的找到自己所需要的信息时,常常需要“搜索引擎”的帮助,而网络爬虫是搜索引擎的重要组成。它为搜索引擎从 Internet 上下载网页。作为搜索引擎的资源采集部分,网络爬虫的性能将直接影响到整个搜索引擎索引网页的数量、质量和更新周期。高效,优秀的爬虫程序可以使人们在互联网上寻找到更及时,更准确的信息
17、。1.2 网络爬虫的历史在互联网发展的早期,网站数量相对较少,信息数据量不大,查找也比较容易。然而伴随互联网井喷性的发展,普通网络用户想找到自己所需的资料简直如同在数据的海洋里捞针,为满足大众信息检索需求的专业搜索网站便应运而生了。所有搜索引擎的鼻祖,是 1990 年由 Montreal 的 McGill University 三名学生(Alan Emtage、Peter Deutsch、Bill Wheelan)发明的 Archie(Archie FAQ) 。Alan Emtage 等想到了开发一个可以用文件名查找文件的系统,于是便有了 Archie。Archie 是第一个自动索引互联网上匿
18、名 FTP网站文件的程序,但它还不是真正的搜索引擎。Archie 是一个可搜索的 FTP 文件名列表,用户必须输入精确的文件名搜索,然后 Archie 会告诉用户哪一个 FTP 地址可以下载该文件。由于 Archie深受欢迎,受其启发,Nevada System Computing Services 大学于 1993 年开发了一个Gopher( Gopher FAQ)搜索工具 Veronica(Veronica FAQ) 。Jug head 是后来另一个 Gopher 搜索工具。虽然当时万维网还未出现,但网络中文件传输还是相当频繁的,而且由于大量的文件散布在各个分散的 FTP 主机中,查询起来
19、非常不便,因此 Alan Archie 工作原理与现在的搜索引擎已经很接近,它依靠脚本程序自动搜索网上的文件,然后对有关信息进行索引,供使用者以一定的表达式查询。当时, “机器人”一词在编程者中十分流行。电脑“机器人” (Computer Robot)是指某个能以成都学院学士学位论文(设计)3人类无法达到的速度不间断地执行某项任务的软件程序。由于专门用于检索信息的“机器人”程序象蜘蛛一样在网络间爬来爬去,因此, 搜索引擎的“机器人”程序就被称为“蜘蛛”程序。世界上第一个用于监测互联网发展规模的“机器人”程序是 Matthew Gray 开发的 World wide Web Wanderer。刚
20、开始它只用来统计互联网上的服务器数量,后来则发展为能够检索网站域名。与Wanderer 相对应, Martin Kosher 于 1993 年 10 月创建了 ALIWEB,它是 Archie 的 HTTP 版本。ALIWEB 不使用“机器人”程序,而是靠网站主动提交信息来建立 自己的链接索引,类似于现在我们熟知的 Yahoo。随着互联网的迅速发展,使得检索所有新出现的网页变得越来越困难,因此,在 Matthew Gray的 Wanderer 基础上,一些编程者将传统的“蜘蛛”程序工作原理作了些改进。直到一些编程者提出了这样的设想,既然所有网页都可能有连向其他网站的链接,那么从跟踪一个网站的链接开始,就有可能检索整个互联网。到 1993 年底,一些基于此原理的搜索引擎开始纷纷涌现,但是早期的搜索引擎只是以搜索工具在数据库中找到匹配信息的先后次序排列搜索结果,因此毫无信息关联度可言。而 RBSE 是第一个在搜索结果排列中引入关键字串匹配程度概念的引擎。最早现代意义上的搜索引擎出现于 1994 年 7 月。当时 Mi