主题网络爬虫设计与实现(源码)

摘要:本文实现了一个基于自定主题关键字搜索与之相关网页的网络爬虫。本爬虫是通过对初始网页的爬取,获取到网页内容。然后对网页进行解析,主要针对标题和正文内容进行分词,提取出超链接对应的URL。通过布隆过滤器判断提取的URL是不是已经被处理,不重复解析已爬取过的网页。爬虫实现时根据向量空间模型计算主题相关度大小,最后在MyEclipse平台用JAVA语言进行了开发。完成后它的主要功能就是根据输入的初始URL和主题关键字搜索出从初始URL爬取到的所有URL以及与主题关键字相关的URL。
目录
摘要 1
关键词 1
Abstract 1
Key words 1
1绪论 1
1.1选题背景 1
1.2国内外研究现状 1
1.3研究的目的和内容 2
2技术背景 2
2.1网络爬虫基本原理 2
2.2主题网络爬虫 2
2.3 JAVA 2
2.3.1 JAVA线程模型 3
2.3.2多线程同步 3
3系统需求分析 3
3.1技术能力分析 3
3.2主题相关性算法 3
3.2.1向量空间模型 3
3.2.2页面相关性算法 4
3.3布隆过滤器 4
3.3.1哈希表基本原理 4
3.3.2布隆过滤器原理 4
4系统功能设计与实现 5
4.1搜索策略 5
4.1.1深度优先搜索策略 5
4.1.2宽度优先搜索策略 5
4.2初始种子网页选取和队列维护 5
4.2.1初始种子网页选取 5
4.2.2队列维护 5
4.3网页采集 5
4.4网页解析 6
4.4.1 HTML语法分析 6
4.4.2解析 6
4.5分词与相关度判断 7
4.6系统总体流程 7
4.7关键技术实现 8
5系统测试 10
6总结与展望 11
致谢 11

 *好棒文|www.hbsrm.com +Q: %3^5`1^9`1^6^0`7^2# 
参考文献 12 主题网络爬虫设计与实现
引言
第二、平台无关性,用JAVA写的应用程序不用修改就可在不同的软硬平台上运行。
第三、可靠性和安全性,高安全性对于JAVA来说是很重要的。要是安全性得不到有效保证,人们在网络上下载程序执行有可能会遇到危险。JAVA有自带的安防机制,这样可以有效地防止网络病毒的入侵。
另外,JAVA还有很多优点:例如多线程、分布性、高效性和动态性。
2.3.1 JAVA线程模型
三个要素为一个计算机程序的执行提供了保障,分别为: CPU,实现的程序代码和可以访问的数据。一个程序可以虚拟出很多台计算机,并且每台计算机都有相应的线程和CPU,能够获取到相应的代码和数据,因此它不但能够独立地完成任务,而且可以进行代码和数据的共享。Java线程的实现是通过java.lang.thread,这个类能够实现虚拟机的功能,能够对接收到的代码和数据进行处理,并且还能够自主地进行运行控制。
创建一个JAVA程序就至少会有一个线程,也就是主线程。主线程是由JVM来进行创建的,它可以调用程序的主要方法。
JVM还通常会创建一些其他的线程,但是,这些线程对我们而言基本都是看不到的。
一般,创建线程有两种方法,可以将这个类继承Thread类,也可以通过实现Runnable接口来创建一个线程。
以上两种方法,如果某个类继承了Thread类,那么该类就可以调用start()方法;但是,如果某个类是Runnable接口的实现类,必须与其他线程对象进行使用。
2.3.2多线程同步
当有多条线程进行工作时,若需要共享数据时,就需要考虑到其他线程的状态。为了避免发生冲突,JAVA提供了实现线程同步的方法。大多数的JAVA同步是以对象锁定为中心的。由于JAVA的Object类的对象都有自己的锁,这样就可以在线程同步时相互协调。
还有一个方法通过使用synchronized关键字来定义程序中要求线程同步的部分,把线程需要同步的程序定义为一个临界区,在临界区里面同一时刻只能有一个线程在执行。
3系统需求分析
3.1技术能力分析
Java现在已经成为了一种很热门的编程语言。它有一个编译的特点可以到处运行,大大提高了工作效率,而且具有很强的可扩展性。所有的特征符合本系统的设计要求。本系统通过Java实现是完全可行的。
3.2主题相关性算法
3.2.1向量空间模型
向量空间模型假设文章是由各个词条组成的,但是各个词条出现的顺序是没关系的,各个词条都对文章的主题有各自不同的作用,所以,该模型可以把文章看成是好多无序词条的集合。
VSM模型是以向量的模型把文档看成是多维空间中的某个点,把由字、词或词组组成的特征项表示为文档的坐标,这样就可以很具体化地看出某个文档的位置。
基本思想:对于由一组词条(Y1,Y 2,Y n)构成的文档di,每一个词条Y i在文档中的重要程度是不一样的,根据它在文档中的重要程度进行权值Ai赋值。在模型空间体系中,将Y 1,Y 2,Y n看成是一个n维的坐标系,A1,A2,An作为对应的坐标值,所以,每一篇文档就可以看成是模型空间体系中由特征词条构成的一个点 [11]。
3.2.2页面相关性算法
页面相关性算法有很多,其中向量空间模型因为其计算简便,并且有一定的正确率,而且不要求有很高质量的训练文档,可以从训练文档中找出最重要的目标特征,因此它可以用来发现网络信息。本设计选用的算法是基于向量空间模型VSM的简单向量距离算法。应用解析类对下载下来的网页进行p标签、title标签解析。解析完之后所得到的内容根据主题进行匹配,从而得出文档特征值的词频,经过分析获取和主题向量维度相等的标题和正文向量。然后就能根据向量空间模型通过公式3.3.2的计算分别得出标题和主题、以及正文与主题的相关度,最后让标题占80%的比重,正文占20%的比重来得出网页与主题的相关度,当网页与主题的相关度大于某个设定的阀值时即为相关的。
 (3.3.2)
其中,k为特征向量的维度,Wik是向量的第k维在文档di中的权值,Wjk是向量的第k维在文档dj中的权值。
3.3布隆过滤器
3.3.1哈希表基本原理
哈希表是一个用来保存数据的数组。通过关键字和其存储地址的关系函数来计算出该关键字存储的位置,并将其存储在该位置上。这样要查询数据,只要看一下关键字位置上的数据是否相符就能找到该数据。对于其他数据结构来说,哈希表在查找时拥有很大的优势。但是运用在本设计的URL去重里,如果要把URL存入到哈希表中,会浪费掉很多的内存空间,因此本设计使用了节约空间的布隆算法来进行URL去重。
3.3.2布隆过滤器原理
Howard Bloom提出了布隆过滤器。它可以很好的节约空间,并且能查询出元素是否在被检测的集合中。它结合了位图和哈希表的优点,更好地实现了检测某元素是否重复的事件。

版权保护: 本文由 hbsrm.com编辑,转载请保留链接: www.hbsrm.com/jsj/jsjkxyjs/2281.html

好棒文