资源描述
毕业设计(论文)
题目名称:主题式新闻搜索系统的设计—新闻页面采集模块
院系名称:计算机学院
班 级:软件115
学 号:201100834515
学生姓名:杜昕佳
指导教师:程传鹏
2015 年 5 月
论文编号:201100834515
主题式新闻搜索系统的设计—新闻页面采集模块
Design of thematic news search system—News page collection module
院系名称:计算机学院
班 级:软件115
学 号:201100834515
学生姓名:杜昕佳
指导教师:程传鹏
2015年 5 月
摘要
随着互联网使用的广泛性和不断增加的实用性,以及人们对自己想要的信息的渴望,主题式新闻搜索系统方法显得越来越重要。主题就是一种个性,一种时尚。用户怎么才能迅速的,准确的找到自己所需要的信息,就显得异常重要。同时给用户最有效的最准确的信息,也是每一个开发者的追求和目标。随着岁月的流失,这个情况也演变的越来越迫切。当然这也是一个十分难得时机与机遇,谁能抓住这个时机,谁就有可能成为下一个的互联网巨擘,引领一个网络时代。
本文主要研究新闻是如何采集的,在从如此众多的繁杂的网络上,怎样收取的。通过广度遍历的算法,将URL采集到本地之中。利用hash表,将下载的URL一一的对比,除去重复的。通过转换将获取的相对路径链接,转化为绝对路径的链接。然后再通过获取的绝对路径链接获得网页,然后截取标题的最后两个字,进行判断是不是属于新闻,是则将数据写入txt文本之中,图片另存在指定的文件之中。
关键词: 新闻采集、URL的抓取、绝对路径的获取、标题的截取、写入文本
Abstract
With the wide application of Internet and the increasing practicality, and the desire of people to want information, the theme news search system is becoming more and more important.. The theme is a personality, a fashion. How quickly the user can find the information they need accurately is very important. At the same time to give the most accurate information of the user is the most effective, the developer and the pursuit of the meter. With the development of time, this situation is also more and more urgent. This is a rare opportunity, who can seize the opportunity, who is may become the next Internet giants, leading an era.
This paper mainly studies how news on such a large network, how the collection, how to charge. Through the breadth of the algorithm, URL will be collected to the local. Using the hash table, will download the URL one one contrast, remove the duplicate. By converting the relative path link, which is transformed to an absolute path link. And then through the acquisition of the absolute path link to get the page, then the interception of the title of the last two words, to judge is not belong to the news, is the data is written to TXT text, pictures, the other being the specified file.
Key words: news gathering, URL capture, absolute path acquisition, title interception, writing text
目录
摘要 I
Abstract II
目录 III
第一章 绪论 1
1.1 研究背景及实现意义 1
1.2 国内外研究现状 2
1.3 本论文所做的主要工作 3
1.4 本文论文的组织结构 6
第二章新闻采集的关键技术 7
2.1 相关技术 7
2.1.1 搜索引擎 7
2.1.2 网络爬虫 7
2.1.3 多线程编程 7
2.1.4 主题 8
2.1.5 相对路径与绝对路径 8
2.2 URL的抓取 9
2.3 URL的除重 10
2.4 数据的写入 11
第三章新闻采集模块的设计与实现 12
3.1 URL的抓取与除重 14
3.2 绝对路径的提取 17
3.3 数据的提取与图片的存储 19
3.4 本章小结 26
第四章系统的测试 27
4.1 系统测试的环境 27
4.2 测试的目的与意义 27
4.3 测试的策略 27
4.4 系统测试的设计与结果分析 28
4.5 功能的测试 29
4.5 本章小结 30
第五章结论 31
致谢 32
参考文献 33
III
中原工学院计算机学院毕业(设计)论文
第一章 绪论
1.1 研究背景及实现意义
随着网络的迅速发展,万维网成为大量信息的载体,如何才能有效地从网络之中提取并且利用这些信息,已经成为现实社会的一个巨大的挑战,也是一个难得机遇。怎么样将用户所需要的信息展现给用户,也是一个关于搜索引擎的里程碑。传统的搜索引擎(Search Engine),包括有AltaVista,Yahoo!和Google等,它们在现实社会中,或许可以认作为一个辅助人们采集信息的工具,也可以认为是用户访问或者进入万维网的入口和行动指南。实际上传统的搜索引擎,通常也存在着一定的局限性,所以信息采集的技术应运而生。
信息采集必须满足以下三个特点
1) 可靠性原
也就是说,信息采集是指在采集信息时候,信息必须是真实的对象或这环境所产生的,必须保证信息的来源是可靠的,必须保证了采集的信息确实能够用来反映信息真实的状况,它是信息采集的基础,也就是信息采集的根本。
2) 完整性原则
信息采集完整性是指采集的信息在内容上必须完整无缺,信息的采集必须要按照一定的标准去做,采集的信息应该反映全貌的信息,完整性原则是利用信息的基础性原则。
3) 实时性原则
即采集的信息,应该是与用户要求的相关。
将采集的信息,展示给用户。是基于搜索引擎的相关技术,但是又不完全同于搜索引擎。它改进了传统的搜索引擎的特点。消除了它的缺陷,比如搜索引擎搜索的信息有很多与用户要求不相关的信息,总之一句话克服了搜索引擎的缺点,继承了它的优点,这也是为什么它发展的这样迅速的主要原因。
1.2 国内外研究现状
1990年,加拿大麦吉尔大学(University of McGill)的计算机学院的师生开发出一个叫做Archie软件。在当时,万维网(World Wide Web)还没有出世,人们还是通过FTP的方式来共享以及交流资源。如果用户想使用Archie的时候,就必须得输入精确的文件名然后才能进行搜索,Archie告诉用户应该使用FTP服务器去下载相关的文件。1993年二月6个斯坦福大学的大学生的想法是用分词的方式去互联网之上去检索用户所需要的各式各样的信息,这就是所谓的Excite。紧接着有是斯坦福大学的两名博士生华裔杨致远和David Filo创造了一个网络的奇迹,Yahoo,它是通过收录网站的信息些在目录之中,所以速度非常迅速,它几乎是20世纪九十年代网络的代名词。1995年,加州伯克利分校的助教Eric Brewer与博士生加州伯克利分校的Paul Gauthier创立了Inktomi公司,它利用一种新的搜索元搜索,用户只需提交一次搜索请求,由元搜索引擎负责转换处理,提交给多个预先选定的独立搜索引擎,并将从各独立搜索引擎返回的所有查询结果,集中起来处理后再返回给用户。 在国外这样技术的经历了那么多年的发展已经趋于成熟,但是在国内才刚刚的起步,但是也是发展将近二十年的光阴。在1996年8月,搜狐公司在中国成立,他们制作了第一个中文网站分类目录,曾经流传这这样的一句话“出门找地图,上网找搜狐”的美誉。但然随着互联网网站的成千上万的增加,这种所谓的有人工编辑的分类目录,早已经不适应时代的需求。于是搜狐公司在2004年8月创建独立域名的搜索网站“搜狗”,自称是“第三代搜索引擎”。2005年6月,新浪公司正式的推出了自主研发的搜索引擎“爱问”。但是在2007年起,新浪的爱问却使用google的搜索引擎。
2007年7月1日 ,网易自主研发出有道搜索技术,并且最重要的是它还合并了原来的综合搜索和网页搜索的方法。有道网页搜索、图片搜索和博客搜索三者合一为网易的搜索提供服务。其中网页的搜索它使用了它自己算法思想,名称为自主研发的自然语言处理系统、分布式存储及计算技术;图片搜索的方法,它首创根据了拍摄相机的品牌、型号,甚至就连季节等高级搜索的功能,堪称业内的典范;还有做厚一点,博客的搜索与其他同类产品比较,它具有抓取的全面、更新及时的优势,并且还提供“文章的预览”,“博客得档案”等多出创新的功能。
1.3 本论文所做的主要工作
本论文主要探讨了主题式新闻搜索系统发展的现状,分析与研究新闻采集的相关技术,安排了一个主题式新闻搜索的信息采集模块,并在此系统之上做了相关的探究。
主题式新闻搜索发展了近半个世纪,相关技术已经趋于成熟。主题式新闻搜索的主要工作就是新闻的判断,可以说它是这个系统的灵魂,也是面向用户的窗口。它的好坏,关系到了整个系统是不是符合要求,所以说它是整个系统的重中之重。整个系统都是以它为目标,一一展开的。而新闻的是怎样抉择的,又是新闻判断的重中之重。如何在成千上万种的网页筛选出新闻网页,那就是需要一种策略,一种可以判断新闻网页的策略。综上所述,系统可以延伸成两大模块,一种是特定的方式,也就是说只去抓取与新闻相关的网页。另一种方式就是随机采集,他可以任意的采集任何的网页,不受束缚。
第一种特定的方式采集,通常在或许网页的连接之后,打开网页,读取网页的title,截取网页之上最后两个汉字,进行判断如果带有新闻或者资讯等字眼,就说明是我们所需要的新闻,将相关的网页保存到本地,然后获取源码将图片写入文件夹,剔除脚本将数据写入文本文档,就这样一个URL,从获取到下载在到存档就完成了。当然我们不可能只获得一个URL,我们获得要是成千上万的网页,也就是批量处理,所以不仅仅是用到了搜索引擎与网络爬虫技术,它的过程也比上述复杂得多。
具体的工作内容如下
1. URL的抓取
一般有两种方式,第一种是根据用户输入的URL,去抓取与其相关的先进的URL,另一种方式是在互联网之上肆意的抓取。也就是说,当用户确定给出一个主题或者给出一个链接的时候,我们就按照用户的需求,去抓取相关的网页,并且将网页的信息保存到本地的一个文本文档之中。但然,由于本系统是主题式新闻搜索系统的设计的新闻采集模块,怎用户输入的主题与链接必须与新闻相关,否则将拒绝执行。第二种,它所以的在网络之上蔓延爬行,肆意的去抓取URL,不需要理会网页的内容,因为下面有一个专门的判断,以测试它到底属不属于新闻,属于则下载到本地,不属于在放弃删除。
2. URL的消重
通常拥有着三种方法,分别是基于磁盘的顺序存储除重算法,基于Hash算法的存储除重算法,基于MD5压缩映射的存储除重算法。
第一种方法基于磁盘的顺序存储除重算法
基于磁盘的顺序存储方法实现如下:它的真正含义就如它的字面意思一样,通常把下载的URL按抓取的顺序一一存储在本地磁盘之中。淡然,如果你早已经建立好了文本文件,那么最好将它存储在文件之上,那样便于插入便于取出。它的工作流程如下,但每一次有一个爬虫线程准备开始一个任务之时,也就是说在一个URL开始下载之前,系统会通过到磁盘上中存储的文件之中去检索,如果系统没有发现它出现过,那么它就将该URL插入到该记事本的第一行但然也可以是最后一行,否则就选择放弃。
这种操作确实十分的简短,并且易于操作。但是实际上这个方法,确实不能利用。因为众人皆知互联网异常的庞大,URL的数量何止千万甚至上百亿,很显然使用这种方法是十分的困难,也是不可取的。
第二种方法基于Hash算法的存储除重算法:
它是通过hash算法来实现,它的实现算法如下,它会给每一个指定的或者说确定的URL一个地址或者说名片。Hash函数会给每一个URL一张名片(地址),它仅且仅代表着他自己。当他获得了这样名片的时候,就代表着这个URL已经被抓去。通过映射到某个物理地址上,当它需要进行检测URL是否重复的时候,只需要将这个URL进行Hash映射,如果得到的地址已经存在,说明已经被下载过,放弃下载,否则,将该URL及其Hash地址作为键值写入hash中。
第三种基于MD5压缩映射的除重存储:
D5算法是一种加密的算法,或者说是基于hash的加密算法,它也可以认为是Hash算法的存储的延伸。当然他也是利用hash的方法,将URL中的字符进行串行的压缩,使它得到了一个压缩字符串,但然在此同时它还可以直接映射出一个Hash地址。除此以外,MD5算法还能够将任何字符串压缩为128位整数,并映射为物理地址。更重要的是,使用MD5进行Hash映射出现碰撞的几率非常小,所以十分的有效。 它的五个性质分别是压缩性:也就说它可以使任意长度的数据,经过某种计算,得到的MD5值长度都是固定不变的。容易计算:也就是说它从原数据之中计算出MD5值是很容易。抗修改性:也就是说,只要你对原数据进行改动,哪怕说只是单单的修改1个字节,那么你所得到的MD5的值将会有很大区别,甚至完全不同。弱抗碰撞:也就是说对已经知原数据和其MD5值,去寻找到一个和这个原知的数据,拥有相同的MD5值的数据(这就是所谓的伪造数据),是非常困难的甚至可以说是不可能的。强抗碰撞:想同时找到两个互不相同的数据,让它们拥有相同的MD5值,可以说是非常困难的,甚至说不可能。当然这种方法确实准确有效,但是操作却异常的复杂。所以本系统采取的方式是基于Hash算法的存储除重算法,具体的方法实现,会在下文中一一列举。
3.获取URL的绝对路径
所谓的绝对路径就是用于表示Internet中特定文件所需要的全部内容,它的路径可以任意的改动,而不受到任何的影响。而相对路径就不可以,它可以在同一个网站内部相互访问,当链接下载到本地,是不能访问网页的,所以必须获得绝对路径。因为只有绝对路径,才能获取相关的网页,才能进行下一步的工作。
3. URL过期的网页的删除
取出用Hash存储的绝对路径的URL,然后在一一的去访问,如果出现可以访问的网页则将其加入队列之中。如果网页链接是过期的,是不可访问的,那么就选择删除,然后在继续的读取下去,直到抵达最后一个链接位置。即一直访问到Hash表的最后一个为止。
4. HTML的源码获取
其实这一步有两种做法,第一种采取的策略是通过绝对路径的URL,直接将网络之中的页面下载到本地,然后在获取源码。另一种方法就是通过绝对路径的URL获取页面,在网页之中获取源码。显然第二种方法简单而易操作,所以本系统采取第二种方式。
5. 新闻的判断
根据获取的源码,截取标题也就是所谓的title,将其装入数组之中。与早已写入数组的数据进行对比,如果出现新闻,资讯等方面的汉字时,则抽取其中的文字,下载其含有的图案。否则选择放弃。继续进行这一操作,直到进行到最后一个为止。当然这一操作同时也是和其他的操作,比如百科的判断等。
1.4 本文论文的组织结构
本文共分为 5 章,主要组织结构如下:
第一章 分别介绍了主题式新闻搜索技术的历史与发展趋势,以及研究的意义。通过描述了系统的主要工作方式,描述了本论文的主要内容。
第二章 介绍了新闻主题采集所涉及到的一些相关关键技术。
第三章 介绍了新闻主题采集以及分类的相关算法。
第四章 系统的测试。
第五章 结束语。
第二章新闻采集的关键技术
主题式新闻搜索系统,它的含义就是是通过用户所需要的新闻主题,将所需的新闻从网络之上下载下来,以供用户需求。当然本系统只是那个庞大系统的子集,所以我们只实现新闻采集模块。本文着重以新闻采集为重点,展开讨论如何将网络之上的URL抓取到本地,如何获取网页的绝对路径以及怎么判断网页所含的内容,到底是不是新闻,以及怎么将新闻写入本地文档之中的。
2.1 相关技术
2.1.1 搜索引擎
所谓的搜索引擎就是指根据一定的策略、方法,使用特定的计算机的相关程序到网络之上去搜集或者说采集信息,然后在进行相关的操作,比如对信息进行的组织或者处理。然后在通过一种检索的方式,为用户提去提供一种服务。将相关用户检索相关的某种信息,去展现给使用系统的用户,比如去检索新闻。搜索引擎通常包括如下的八种方法依次为目录索引、全文索引、免费链接列表、垂直搜索引、擎元搜索引擎、擎门户搜索引擎与集合式搜索引等,不再一一列举。
2.1.2 网络爬虫
网络爬虫(又被称为网络机器人,网页蜘蛛,在FOAF社区中间,更被经常的称为是网页的追逐者),它是按照一种特定的规则,去自动的抓取万维网上的信息的程序或者说是脚本。它的主要的功能是对抓取目标进行描述或者用于定义,对网页上的信息或者说数据进行分析然后过过滤,是一种抓取URL的策略。淡然我们也可以认为,它是一种特殊的搜索引擎。它可以通过用户的需求,直接抓取用户所需要的东西。
2.1.3 多线程编程
指一个程序或者软件能用多个线程同时并发进行。我们可以认为将一个程序,进行划分,切割成许许多多的小片段,然后进行并发执行。包含在 using System.Threading的命名空间之中。主要含有六个步骤线程的启动,线程的杀死,线程的暂停,线程的优先级,线程的挂起以及线程的恢复。多线程的好处,它可以使CPU多个核同时进行使用,也就是说可以进行并发控制,就像吃饭一样原先一个一个人吃,现在一起吃速度肯定是大大提高。所以它的出现,令计算机运行程序的效率非产的高,节省了大量的时间。当然这一项技术对于多核的CPU来说是程序执行的异常的飞快,当然对于单核的CPU速度虽然不是那么的,但是也提高不少,可以说多线程编程是软件的开发的一向辛亥革命。
2.1.4 主题
从表面看主题就是一种风格,也是一种靓丽的效果,更加是一种视觉延伸和视觉效应。从实质上讲,主题式新闻搜索的主要目的就是让用户随心所得去获取各式各样的新闻,是用户可以根据自己的喜好任意的阅读或者存储自己喜爱的新闻。当然这是整个系统的大系统的灵魂,但是对于新闻采集模块来说,并不是真正的重点,在这里我们只是略微的提起。
2.1.5 相对路径与绝对路径
绝对URL用于表示Internet中特定文件所需要的全部内容,相对URL只适合同名网页链接下的其他目录。所以说,当存储的时候,一定要使用绝对路径,应为只有绝对路径,才可以真正的获得网页,而相对路径则不能。因为从本质上看,它不能算是真正的连接,不能代表这个刚链接所关联的网页。比如当进入一个网站的之后,可能在其内部当你去点击其他的画面的时候,在观察地址栏的链接之中你可能发现链接变得很长,这就是因为所点击的内容的地址使用了相对链接。也就是说,这个链接是不用的。所以说,相对URL只能适合同名网页之下的去连接其它目录,如果当你进入其他网站时则不可用。所以抓取的一定要是绝对路径链接,因为只有这样,抓取的链接才有意义。
2.2 URL的抓取
在成千上万的网络之上,怎样才能将那些链接抓取到本地,实现的策略有三种。分别是广度优先搜索,深度优先策略,最佳优先搜索。
广度优先搜索策略是通过在抓取URL的整个过程之中,当仅当通过抓取完这一层次,才会进行抓取下一层次的搜索。此算法的实现和设计比较简单。当你想为目前覆盖尽可能多的网页时候,一般采取广度优先搜索方法。他的基本思想是通过认为与最初初始话的URL,在一定链接距离内的网页很可能与主题的关系或者相关性的概率十分的大。另外一种方法是将广度优先搜索与网页过滤技术结合使用。先用广度优先策略去抓取网页,然后再将他其中与其无关的网页去过滤掉。但是这个方法的缺点,主要在于随着抓取网页的数量增加,大量的无关网页将会被下载并且过滤,算法的效率十分的低下。
深度优先搜索策略的方法是,从起始网页开始,去选择一个URL作为切入口。去分析这个网页中的URL,然后在去选择一个再进入。如此一个链接有一个链接地去抓取下去,直到处理完一整条的路线之后,然后再去处理下一条路线。深度优先策略设计的方法较为简单。然而由于门户网站提供的链接往往最具有价值的,PageRank也十分的高。但是当每深入一层之后,网页的价值和PageRank都会相应地下降。这就暗示了重要网页通常距离种子较近,而过度深入抓取到的网页却价值十分的低。同时,这种策略随着抓取深度的深入,就会直接影响着抓取的命中率和抓取的效率,所以说抓取深度是决定该种策略的关键。所以说对于其他两种策略而言。此种策略很少使用。
最佳优先搜索策略是按照一定的网页分析算法,然后去预测候选URL与目标网页的相似成度,或者说与主题的相关性。然后在去选取评价的效率最高的一个或者说几个URL进行抓取。它只去访问经过网页分析算法去预测为“有用”的网页。但是他还是存在的一个问题,在网页抓取路径上的可能有很多相关网页被忽略背完被忽略。可以说所谓的最佳优先策略其实是一种局部的最优搜索算法。因此需要将最佳优先结合具体的应用然后改进,以跳出局部的最优点。
本系统使用的是广度优先搜索策略,因为使用它可以大量的采集URL。
2.3 URL的除重
通常拥有着三种方法,分别是基于磁盘的顺序存储除重算法,基于Hash算法的存储除重算法,基于MD5压缩映射的存储除重算法。
第一种方法基于磁盘的顺序存储除重算法
基于磁盘的顺序存储方法实现如下:它的真正含义就如它的字面意思一样,通常把下载的URL按抓取的顺序一一存储在本地磁盘之中。淡然,如果你早已经建立好了文本文件,那么最好将它存储在文件之上,那样便于插入便于取出。它的工作流程如下,但每一次有一个爬虫线程准备开始一个任务之时,也就是说在一个URL开始下载之前,系统会通过到磁盘上中存储的文件之中去检索,如果系统没有发现它出现过,那么它就将该URL插入到该记事本的第一行但然也可以是最后一行,否则就选择放弃。
这种操作确实十分的简短,并且易于操作。但是实际上这个方法,确实不能利用。因为众人皆知互联网异常的庞大,URL的数量何止千万甚至上百亿,很显然使用这种方法是十分的困难,也是不可取的。
第二种方法基于Hash算法的存储除重算法:
它是通过hash算法来实现,它的实现算法如下,它会给每一个指定的或者说确定的URL一个地址或者说名片。Hash函数会给每一个URL一张名片(地址),它仅且仅代表着他自己。当他获得了这样名片的时候,就代表着这个URL已经被抓去。通过映射到某个物理地址上,当它需要进行检测URL是否重复的时候,只需要将这个URL进行Hash映射,如果得到的地址已经存在,说明已经被下载过,放弃下载,否则,将该URL及其Hash地址作为键值写入hash中。本系统就是使用这种饭方法。
第三种基于MD5压缩映射的除重存储:
MD5算法是一种加密的算法,或者说是基于hash的加密算法,它也可以认为是Hash算法的存储的延伸,中文名字叫做中文名为消息摘要算法。当然他也不是单单利用hash的方法。它先将获取的URL中的字符串行的压缩,使它得到了一个被压缩的字符串,当然在此同时它还可以通过直接映射,得到一个Hash地址。除此以外,MD5算法还能够将任何字符串压缩或者改编为128位整数,并同时映射为物理地址。由于这个原因,所以说使用MD5进行Hash映射出现碰撞的几率非常小,所以十分的有效。它的五个性质分别是压缩性:也就说它可以使任意长度的数据,经过某种计算,得到的MD5值长度都是固定不变的。容易计算:也就是说它从原数据之中计算出MD5值是很容易。抗修改性:也就是说,只要你对原数据进行改动,哪怕说只是单单的修改1个字节,那么你所得到的MD5的值将会有很大区别,甚至完全不同。弱抗碰撞:也就是说对已经知原数据和其MD5值,去寻找到一个和这个原知的数据,拥有相同的MD5值的数据(这就是所谓的伪造数据),是非常困难的甚至可以说是不可能的。强抗碰撞:想同时找到两个互不相同的数据,让它们拥有相同的MD5值,可以说是非常困难的,甚至说不可能。当然这种方法确实准确有效,但是操作却异常的复杂。所以本系统采取的方式是基于Hash算法的存储除重算法,具体的方法实现,会在下文中一一列举。
补充:这个看似简单的工作,工作量却异常的复杂,异常的大。以下就以新浪新闻的页面为例子进行讲解。新浪的一个新闻页面大小在50~60k之间,每个页面大约拥有者90~100个URL,如果假如让你每秒下载10个页面,那么就会产生900~1000次的URL排重的操作,而且每次排重操作都要在几百万甚至几千万的URL库中去查询,去对比。这种操作对数据库系统是一个灾难,对于系统来说也是一个灾难。所以说从理论上来说,任何需要产生磁盘I/O动作的存储系统都不可能满足这种查询的需求。
2.4 数据的写入
通过获得绝对路径的URL,获得了相关的网页。通过网页,获取它的源码。接下来的就是至关重要的一步,它决定了系统的好坏与与用户的体验。它的成败,关系到了前面所有的努力,也就说它如果失败了,那么所有的努力就会付之东流。它的主要工作,通过标题的截取判定,发现含有资讯或者新闻的字眼,然后从获取的网页之中获取源码,然后除去脚本,将里面的与新闻相关的各式各样的数据,写入到指定的文本文件之中。将所有与新闻的图片,下载到本地文件夹之中。
第三章新闻采集模块的设计与实现
本章系统的核心思想是,利用网络爬虫与搜索引擎技术,通过URL的抓取除重判断与绝对路径的获取而进行展开的。然后通过对标题的截取与判断,最终决定是不是下载其图片与将数据写入文本文档之中。具体的流程如下
程序运行流程图1-1
3.1 URL的抓取与除重
如何才能将网络之上的URL抓取到本地,是这个程序或者系统的重中之重,因为它是程序的开端,也是这个系统的画龙之笔。只有将它抓取到本地之中,这个系统或者说程序才有继续运行下去的必要。如果抓取失败了,这个程序即使还能进下去,也没有丝毫的意义。虽然他的地位十分重要,但是它的实现却异常的简单。链接的抓取不需要太多的算法,也不需要过多的策略。只需要一个简单的策略就能够实现。本系统利用广度优先算法将网络的超链接抓向本地的一个早已经,初始化的队列之中。就这样,短短的数段代码就能实现。当然这只是开始,后面的任务还是依然的严峻。做完这一切还是远远的不够的,因为互联网之上的链接何止拥有千万,最重要的是系统抓取的链接都是随机,所每一个链接都有可能与它下一个或者说上一个重复,怎么才能将那些重复的链接删去,又是摆在视线之中的问题。当然它的过程比较复杂,比URL的抓取工作要复杂得多。对于它的实现,我们利用开发工具之中的一个算法或者说是一个系统类。它是基于Hash算法的存储算法,当然也可以根据他的真正的操作,认为它是一种映射。工作流程是它会分给每一个链接一个地址,后面的链接与前面的对比如果地址已经出现,则遗弃,否则将链接的地址与链接本身写入hash函数之中。广度优先遍历的解释,它是指在网络之上抓取网页链接的过程中,当仅当它完成了,它当前层次的搜索之后,它才会进行下一层次搜索。此算法的设计和实现都是十分简单,易于操作并且效率也不是太低,特别适合随意的抓取网络链接。比如在抓取的过程中,系统为了覆盖尽可能多的网页,一般都会去使用广度优先搜索方法。当然也有许许多多的科研研究,比如将广度优先搜索策略去应用到聚焦爬虫之中。它的基本思想是,系统认为与它初始的URL在一定范围内的链接距离与它的相近的网页,很可能就会与相关的主题的相似性的概率十分大。URL除重的方法,它利用hash的算法,分给每一个抓取的URL一个标签也可以说是地址,如果这个标签或者地址在hash之中从来都没有出现过,系统就认为此链接尚未抓取,此链接炮六,如果出现则选择放弃,就这样网页的就将抓取的重复性链接剔除。
核心代码:
public static string buildurl(string url, string param)
{
string url1 = url;
if (url.IndexOf(param) > 0)
{
if (url.IndexOf("&", url.IndexOf(param) + param.Length) > 0)
{
url1 = url.Substring(0, url.IndexOf(param) - 1) + url.Substring(url.IndexOf("&", url.IndexOf(param) + param.Length) + 1);
}
else
{
url1 = url.Substring(0, url.IndexOf(param) - 1);
}
return url1;
}
else
{
return url1;
}
}
#endregion
#region "获取页面url"
public static string GetScriptNameQueryString
{
get
{
return HttpContext.Current.Request.ServerVariables["QUERY_STRING"].ToString();
}
}
public static string GetScriptName
{
get
{
return HttpContext.Current.Request.ServerVariables["SCRIPT_NAME"].ToString();
}
}
public static string GetScriptUrl
{
get
{
return GetScriptNameQueryString == "" ? GetScriptName : string.Format("{0}?{1}", GetScriptName, GetScriptNameQueryString);
}
}
public static string GetScriptNameQuery
{
get
{
return HttpContext.Current.Request.Url.Query;
}
}
#endregion
链接绝对路径获取流程图1-2
3.2 绝对路径的提取
将hash表中的相对路径URL提取出来,进行转换编写成绝对路径的URL。只有这样,链接才有意义,才有价值。因为只有绝对路径,它才能称为真正的URL。才能通过它获得网页。所以说,这一步也是至关重要的也是必需的。因为在网络的抓取之中,很有可能抓取的就是相对路径链接。相对路径的连接,是一种网站内部的连接,抓到之后没有使用价值,所以必须通过转换,使其转换成绝对路径的链接,以便为系统的下一步提供方便。
核心代码:
public static void Normalize(string baseUri, ref string strUri)
{
if (strUri.StartsWith("/"))
{
strUri = baseUri + strUri.Substring(1);
}
if (strUri.EndsWith("?"))
strUri = strUri.Substring(0, strUri.Length - 1);
strUri = strUri.ToLower();
Uri tempUri = new Uri(strUri);
strUri = tempUri.ToString();
int posTailingSlash = strUri.IndexOf("/", 8);
if (posTailingSlash == -1)
strUri += '/';
if (posTailingSlash != -1 && !strUri.EndsWith("/") && strUri.IndexOf(".", posTailingSlash) == -1)
strUri += '/';
int posFragment = strUri.IndexOf("#");
展开阅读全文