搜索引擎优化毕业论文(山东财经大学本科毕业论文(设计)题目:基于JAVA的搜索引擎设计与实现学院)
优采云 发布时间: 2022-02-03 12:06搜索引擎优化毕业论文(山东财经大学本科毕业论文(设计)题目:基于JAVA的搜索引擎设计与实现学院)
山东财经大学本科论文(设计) 题目:基于JAVA的搜索引擎的设计与实现 免责声明 2012年5月山东财经大学本科论文原创郑重声明,提交的论文是本人的成果在导师的指导下开展研究工作。除文中已引用的内容外,本文不收录任何其他个人或团体已发表或撰写的研究成果。对本论文的研究做出重要贡献的个人和团体在论文中已作了明确的陈述和表述。本声明的法律后果由本人承担。论文作者署名:日、月、日、山东财经大学' 论文使用授权声明 学校可将论文全部或部分内容公开,并可采用影印或其他复制方式保存论文。讲师签名: 论文作者签名: 日期、日期、基于 JAVA 的搜索引擎的设计和实现因此是搜索引擎。
如今,搜索引擎已经无法满足不断增加的网页数量。搜索引擎技术已成为计算机行业积极研发的对象。网络爬虫是搜索引擎的基础,也是最底层的技术。因此研究网络爬虫的实现技术及其应用非常重要。论文详细讲解了如何用java语言实现一个简单的搜索引擎,描述了搜索引擎的原理和系统功能,简要介绍了系统开发背景、开发环境、系统需求分析、功能设计与实现。关键词:搜索引擎;网络爬虫;基于JAVAABSTRACT的搜索引擎的搜索策略设计与实现互联网上的资源非常丰富,但我们谁都做不到 互联网上的海量信息浏览量不高,搜索引擎就出现了来获取我们需要的信息。然而,搜索引擎已经不能满足时下页面数量的增长。搜索引擎技术已成为计算机行业积极研发的对象。网络爬虫是一切的基础,这是底层技术。所以发展网络爬虫技术非常重要,
WWW以超文本的形式呈现给用户,收录了技术资料、商业信息、新闻报道、娱乐信息等多种类别和形式的信息。超文本标记语言以其语法简洁、通俗易懂、易学易懂,使WEB页面贴近每一个普通人,互联网已经普及和发展到今天。然而,电子商务、电子图书、远程教育等新领域不断涌现,发展迅速,逐渐成为互联网世界不可或缺的、日益重要的组成部分,随之而来的是WEB文件的复杂化、多样化和智能化。因此,高容量,高信息量、高效率成为网络信息传输技术发展的追求。与此同时,另一个需求变得更加广泛和紧迫,那就是如何获取用户感兴趣的信息。由于互联网是一个全球分布的网络,具有开放性、动态性和异构性,资源分布非常分散,并且没有统一的管理和架构,导致信息获取困难。如何从海量的信息资源中快速、准确地找到需要的信息,成为网络用户面临的一大难题,也就是所谓的Rich Data Poor Information问题。于是搜索引擎应运而生,如mp3搜索、视频搜索、图片搜索是搜索的最初雏形。根据用户的搜索意图,直接返回相关信息。从最早的Archie到后来的Excite、ahvista、overture、google等搜索引擎,国外对搜索引擎技术的研究比中国早了近十年。
尽管搜索引擎技术在国外已经研究了很长时间,但在中国,优秀的搜索引擎却层出不穷,如百度、中搜等。随着搜索引擎技术的成熟,它将成为获取信息和掌握知识的有力工具。但是现有的搜索引擎针对用户的查询需求,仅限于关键词的简单逻辑组合,搜索结果更注重返回数量而不是质量,在组织和分类方面也存在欠缺。结果文件。因此,如何提高搜索引擎的智能化,如何根据知识应用的需要组织信息,使互联网不仅可以提供信息服务,同时也为用户提供知识服务,将成为计算机行业和学术界研究的方向。网络爬虫是这一切的基础,最底层的技术。所以要解决这个问题,就需要研究网络爬虫的实现技术,研究它的应用。二、搜索引擎(一)搜索引擎是如何工作的 搜索引擎的原理可以看成三个步骤:从互联网上抓取网页、建立索引库、在索引库中搜索。搜索引擎使用能力 一个爬虫程序,自动从互联网上采集网页,自动访问互联网,沿着网页中的所有 URL 爬取到其他网页,重复这个过程,采集所有已经爬取的网页。然后建立一个索引数据库,
接下来,搜索索引库进行排名,用户输入关键词进行搜索后,搜索系统程序会从网页索引库中查找与关键词匹配的所有相关网页。最后,页面生成系统将搜索结果的链接地址和页面内容摘要整理后返回给用户。(二)搜索引擎分类获取网站网页数据,能够建立数据库并提供查询的系统都可以称为搜索引擎。真正意义上的搜索引擎通常是指一个集合Internet 一个全文搜索引擎,对数千万到数十亿的网页进行索引,并对网页中的每一个词进行索引(即关键词),并建立一个索引数据库。当用户搜索某个关键词, 页面内容中收录 关键词 的所有网页都将作为搜索结果进行搜索。在通过复杂的算法排序后,这些结果将根据它们与搜索的相关性进行排名关键词。根据不同的工作原理,它们可以分为两大类:全文搜索和目录。全文搜索引擎是基于从互联网上从每个网站中提取的信息(主要是网页文本)建立的数据库。,检索符合用户查询条件的相关记录,然后将结果按一定顺序返回给用户。从搜索来源来看,全文搜索引擎可以细分为两种:一种有自己的检索程序,即爬虫程序,另一种是自建网络数据库,搜索结果直接从自己的数据库中调用;另一种是租用其他引擎的数据库,按照自定义格式排列搜索结果。
分类目录采用人工方式采集整理,形成雅虎中国及国内搜狐、新浪、网易目录等数据库。此外,互联网上的一些导航网站也可以归为原创类。(三)搜索引擎技术已经发展了很长时间,人们只能通过传统媒体(如电视、报纸、杂志和广播等)获取信息。但是随着计算机网络的发展,人们想要获取信息,不再满足于传统媒体单方面的传输和获取方式,希望有主观选择性。等等。由于计算机网络的发展,信息的获取变得非常及时、快捷和方便。到1993年,万维网技术取得突破,解决了远程信息处理服务中的文本显示、数据连接和图像传输等问题,使万维网成为互联网上最流行的信息传播方式。现在,Web 服务器已经成为 Internet 上最大的计算机群,Web 文档的数量和链接的网络是难以想象的。它迈出了开创性的一步,是近年来互联网上最令人兴奋的成就。面对海量的网络资源,搜索引擎为所有上网的用户提供了一个入口。毫不夸张地说,所有用户都是你可以从搜索开始,到达互联网上任何你想去的地方。
随着万维网的发展,搜索引擎技术的发展令人瞩目。搜索引擎经历了大约三代更新发展:第一代搜索引擎出现在1994年左右,以Altavista、Yahoo、Infoseek为代表,侧重于反馈结果的数量,主要特点是“理解”。主要依靠人工对目录搜索进行排序,通常由网页制作者创建网站名称和网站内容的文本摘要,并将其添加到搜索引擎的数据库中。搜索引擎根据用户输入的信息,按照预先设定的规则进行简单的匹配、排序和展示。该方法只能进行简单的字符串匹配,不能进行全文搜索。研究表明,搜索引擎的性能并没有想象中的那么好。在全球 11 大搜索引擎中,搜索引擎只能搜索互联网上所有页面的 16%,甚至更低。造成这种情况的主要原因是这些搜索引擎没有及时更新信息。第二代搜索引擎采用基于超链接分析的机器爬取技术。搜索引擎使用程序检索互联网上的数据,并自动将获得的结果存储在索引数据库中。搜索引擎根据用户键入的内容匹配、排序和显示信息。这些引擎的主要特点是提高了精度,可以用“细化”来形容,即不需要网站生产者单独键入信息进行搜索,并且理论上,任意将 网站 的所有页面添加到其数据库中。第二代搜索引擎的大部分查询都会返回上千条信息。查询结果中不相关的信息过多,查询结果显示混乱。用户仍然很难找到他们真正想要的信息。
第三代搜索引擎是对第二代搜索引擎的改进。与前两代相比,更注重智能化和用户个性化,主要增加交互性和个性化等先进技术,采用中文自动分类、自动聚类等人工智能技术,并利用中文内容分析技术和区域智能识别技术,增强搜索引擎的查询能力。同时,搜索技术将更加智能化,可搜索资源将更加广泛,搜索方式将更加便捷有效,为用户在使用搜索引擎获取信息时提供更好的体验。三、网络爬虫知识储备(< 服务器地址和目录等。 URL的格式由三部分组成:第一部分是协议(或服务模式);第二部分是存储资源的主机的IP地址(有时还包括端口号);第三部分是宿主资源的具体地址,如目录和文件名。
第一部分和第二部分用“://”符号分隔,第二部分和第三部分用“/”符号分隔。第一部分和第二部分缺一不可,第三部分有时可以省略。HTTP协议的URL:使用超文本传输协议HTTP提供超文本信息服务的资源。/channel/welcome.htm 它的计算机域名是 . 超文本文件(文件类型 .html)是目录 /channel 中的 welcome.htm。/talk/talk1.htm,其计算机域名为 . 超文本文件(文件类型 .html)是目录 /talk 中的 talk1.htm。文件URL:当文件用URL表示时,服务器模式用文件表示,后跟主机IP地址、文件访问路径(即目录)和文件名。有时可以省略目录和文件名,但不能省略“/”符号。file:///pub/files/foobar.txt 表示存放在主机的pub/files/目录下的文件,文件名为foobar.txt。file:///pub 代表主机上的目录 /pub。file:/// 代表主机的根目录。爬虫的主要处理对象是URL。它根据 URL 地址获取所需的文件内容,然后进一步处理。
(二) 图3-1 广度优先爬虫进程的初始URL地址是爬虫系统提供的*敏*感*词*URL(通常在系统的配置文件中指定)。在解析这些*敏*感*词*URL所代表的网页时,会生成新的URL(如0){if(maxUrls != -1){if(crawledList.size()== maxUrls){break;}}//get urlString url from queue = null;if(toCrawlList.iterator().hasNext()){try{url = (String)toCrawlList.iterator().next();}catch(ClassCastException e){ }}//从待定队列中删除已爬取的 urltoCrawlList.remove(url);URL verifyUrl = verifyUrl(url);String verifyUrlActionTime = getTimeStamp();addResult(verifiedUrlActionTime,"verified",url);if(!isRobotAllowed(verifiedUrl)){continue;updateStats(url, crawledList.size(),toCrawlList.size(),maxUrls,notHostLink.size(),gt30kbList.size());//将页面添加到爬取列表crawledList.add(url);//在给定的UrlString处下载页面pageContents = downloadPage(verifiedUrl);String processUrlActionTime = getTimeStamp();addResult(processUrlActionTime,"Process ",url);writePage(pageContents,verifiedUrl,Integer.toString(i));i++;//如果下载成功,调用连接函数 if(pageContents != null && pageContents.length()>0)@ > {if(!allowFollow(pageContents,verifiedUrl)){continue;}ArrayList links=retrieveLinks(verifiedUrl,pageContents,crawledList,notHostLink,gt20kbList);//添加链接到CrawlList.addAll(links);}}}在这个方法中定义一个循环,这个线程会重复执行爬虫动作。//下载给定UrlString处的页面 pageContents = downloadPage(verifiedUrl);String processUrlActionTime = getTimeStamp();addResult(processUrlActionTime,"Process",url);writePage(pageContents,verifiedUrl,Integer.toString(i));i++; //如果下载成功,调用连接函数 if(pageContents != null && pageContents.length()>0) {if(!allowFollow(pageContents,verifiedUrl)){continue;}ArrayList links=retrieveLinks( verifyUrl,pageContents,crawledList,notHostLink,gt20kbList);//添加链接到CrawlList.addAll(links);}}}这个方法中定义的一个循环,这个线程会重复执行爬虫动作。//下载给定UrlString处的页面 pageContents = downloadPage(verifiedUrl);String processUrlActionTime = getTimeStamp();addResult(processUrlActionTime,"Process",url);writePage(pageContents,verifiedUrl,Integer.toString(i));i++; //如果下载成功,调用连接函数 if(pageContents != null && pageContents.length()>0) {if(!allowFollow(pageContents,verifiedUrl)){continue;}ArrayList links=retrieveLinks( verifyUrl,pageContents,crawledList,notHostLink,gt20kbList);//添加链接到CrawlList.addAll(links);}}}这个方法中定义的一个循环,这个线程会重复执行爬虫动作。调用连接函数 if(pageContents != null && pageContents.length()>0) {if(!allowFollow(pageContents,verifiedUrl)){continue;}ArrayList links=retrieveLinks(verifiedUrl,pageContents,crawledList,notHostLink, gt20kbList);//添加链接到CrawlList.addAll(links);}}}这个方法中定义的一个循环,这个线程会重复执行爬虫动作。调用连接函数 if(pageContents != null && pageContents.length()>0) {if(!allowFollow(pageContents,verifiedUrl)){continue;}ArrayList links=retrieveLinks(verifiedUrl,pageContents,crawledList,notHostLink, gt20kbList);//添加链接到CrawlList.addAll(links);}}}这个方法中定义的一个循环,这个线程会重复执行爬虫动作。
在这个循环中,首先从 URL 等待队列中请求一个 URL。因为 URL 队列将是空的。while(crawling && toCrawlList.size() > 0){//从队列中移除链接 String url = null;if(toCrawlList.iterator().hasNext()){try{url = (String)toCrawlList .iterator().next();}catch(ClassCastException e){ }//下载页面返回html内容//爬取页面链接返回链接//添加到链接}如果没有获取到url,继续申请url等待queue。当获取到任务URL后,会通过这个URL获取对应的HTML代码,具体方法是调用downloadPage(URL pageUrl)方法。(二)获取网页实现private String downloadPage(URL pageUrl){ try {BufferedReader reader =new BufferedReader(new InputStreamReader(pageUrl.openStream()));字符串行;
所以你可以截取从 i+1 到第二个双引号的位置。之间的字符串是 URL。当这一步完成后,截取原来的字符串,从“class=”开始。继续检索href=标签,判断其i+1位为单引号,故截取i+1位为第二个单引号的位置。经过这一步,原字符串被截取为“target=”开头,可以继续搜索href=标签。这个地方href=后面没有任何符号,所以当没有找到单引号或双引号时,可以判断为这种情况。去搜索空格和 并判断其第i+1位是单引号,所以将第i+1位截到第二个单引号的位置。经过这一步,原字符串被截取为“target=”开头,可以继续搜索href=标签。这个地方href=后面没有任何符号,所以当没有找到单引号或双引号时,可以判断为这种情况。去搜索空格和 并判断其第i+1位是单引号,所以将第i+1位截到第二个单引号的位置。经过这一步,原字符串被截取为“target=”开头,可以继续搜索href=标签。这个地方href=后面没有任何符号,所以当没有找到单引号或双引号时,可以判断为这种情况。去搜索空格和