基于Lucene框架的“虎扑篮球”网站搜索引擎(java版)

news/2024/5/9 16:19:43/文章来源:https://blog.csdn.net/weixin_34332905/article/details/94019599

 1  引言

 

本次作业完成了基于Lucene的“虎扑篮球”网站搜索引擎,对其主要三个板块---“最新新闻”(主要NBA新闻),“虎扑步行街”(类似贴吧性质),“虎扑湿乎乎”(篮球发帖区)进行页面分析并建立索引完成搜索引擎。

11  设计目的

搜索引擎是一个很有用的程序,可以让你更方便,快捷的实现目标信息的查找和检索,本程序就针对虎扑篮球网站的三个子页面的帖子题目建立索引,并可实现显示目标条目的标题、时间、来源、和正文内容、以及原网址URL。

(1) 当程序运行时,在java scanner上会显示提示信息“请输入你要查询的模块:1代表虎扑新闻 2代表步行街 3代表shh 4代表综合搜索”分别代表用户搜索的四种搜索需求

(2) 输入完要求数字后,会显示如下提示信息请输入爬虫深度(爬取页数)”,这条信息代表用户想要搜索的页数,页数越多,产生的内容越多。(相当于规定搜索页数)

(3) 之后会提示输入最大显示数量,顾名思义,由用户输入显示的最大条目数。

(4) 最后会让用户输入查询串,然后敲入回车就可以根据查询串来找到对应数量的条目。

(5) 如果选择搜索虎扑新闻,则会显示最大条目数的新闻的条目、新闻的来源、新闻发布的时间、原网页的url还有全部的正文内容(正文内容格式按照原网页)。

(6)如果选择shh或虎扑步行街搜索,则会显示最大条目数的 贴子题目,发帖具体年月日、来源、原文url、正文内容 。

(7) 如果用户选择4综合搜索,则会显示出最大条目数的全部页面的搜索结果(新闻、shh、步行街),并且每个条目都会显示出其对应结构和正文内容,方便用户挑选和查看。

 

12  设计说明

本程序采用Java程序设计语言,在IDEA平台下编辑、编译与调试。

Jdk版本1.7,使用外部工具包有:Jsoup、Lucene。

总体设计

 

21  功能模块设计

本程序需实现的主要功能有:

(1) 用户可以自定义搜索页面

(2) 用户可以自定义爬虫深度也就是爬取页数

(3) 用户可以选择最大显示数目

(4) 输入搜索串,根据搜索串显示

程序的总体功能如图1所示:

 

2. 2  流程图设计

程序总体流程如图2所示:

 

 

 

2 设计总体流程图

 

 

 详细设计

31  设计概述

搜索引擎的设计总体分量四大部分:

第一部分是爬虫,主要是对想要搜索的页面进行爬取,获取其html信息;

第二部分是对这些html信息进行筛选、分析并最后转化成需要的字符串;

第三部分是利用Lucene框架对处理好的字符串信息建立索引,并根据搜索串搜索;

第四部分是将需要的信息以字符串的形式显示(正文url,正文内容,来源等)。

3.2  网页爬虫及其内容提取和分析

1、初始化:在做这一步之前,需要对Lucene的内容做初始化。

 

 

这里面使用在RAM里面建立索引,避免了空间的浪费,其余变量通过Lucene手册规范建立。

2、获取:通过jsoup的connect的get方法获取其对应url下的html内容

                  org.jsoup.nodes.Document doc = Jsoup.connect(url).get();

3、筛选:

主要函数:

                  public static Elements[] getNews(Document doc)

函数目的:

将步骤一得到的doc对象作为参数,使用getNews函数获取对应筛选标签下的元素集合。

函数核心代码:

 

 

 

函数详解:我们通过分析三个页面的html代码找到新闻标题和url所在的标签

下面我们以虎扑新闻为例来解读我们是如何筛选标签的:(其他类似,不一一页面分析)

 

 

从这个截图中我们可以看出所有的虎扑新闻都放在class=“list-head”标签下,而所有的其他信息都放在class=“other-Info”标签里。,所以我们建立了一个Elements的数组,用来分别存放这两个标签的html代码并返回。

4、解析

主要函数:

                    public static HashMap<String,String> analyze(Elements[]e)

函数目的:步骤而得到的Elements数组,返回一HashMap类型的值,该值的键为对应新闻内容的url(string),值为对应的新闻标题和新闻事件来源等信息(string)。

实现方法:首先是url的提取,这里使用了正则表达式

                   String regex = "https://[\\w+\\.?/?]+\\.[A-Za-z]+";

来提取出对应标签的url,(由于第二步做过筛选,所以可以保证当前每一个elements内只有一个url,所以可以用正则表达式)。

之后使用Elements自带的方法eachText()方法获取正文内容。再做一些细节修补工作,将新闻时间等附加内容与标题相连。

核心代码

 

 

最后返回哈希表news即可。

 

3.3  Lucene索引的建立和搜索

1、建立索引

1、主要函数:

public static void creatIndex(HashMap news,IndexWriter w)

2、函数作用:对上一步得到的HashMap的内容进行分析,并对他们的不同部分建立索引。

3、函数实现:使用迭代器遍历HashMap的键值对,取出里面的内容并adddoc方法建立索引。

4、addDoc方法:将三个参数根据“url”“newstitle”“newsother”三个字段增添索引

 

 

2、搜索

1、主要函数

                  public static void Search(String querystr,intnum,Directory index)

 

2、函数作用:通过对传入的索引index进行搜索串querystr的搜索,获取“命中的项”

3、函数实现:根据Lucene使用手册的代码修改得到:

 

 

 

3.3内容的显示

这里我为了正确的显示出内容,使用了两种方法来获取信息,第一种是老师推荐的方法Boilerpipe,但是发现这种训练方法对一些简单页面确实可以实现提取正文,但是对一些复杂页面(特别是带有很多评论的页面)提取出的正文为空,为了解决这个问题,我写了备用方案。当检测到Boilerpipe方法获取正文为空时,就启用备用方案。

备用方案的思路很简单,就是按照页面找出内容所在的标签,获取其正文,再之用字符串replace,等方法对其进行修改即可

 

 

 

 

 

测试与运行

 

41  程序测试

在程序代码基本完成后,经过不断的调试与修改,本次爬虫程序终于能正常运行如期运行。调试过程主要包括对显示结果格式的调试(需要去掉对应换行标签等),顺序的调试,显示内容完整性的调试等。

4.2  程序运行

对虎扑shh板块的的搜索

 

 

 

显示的shh内容如下图所示:

 

 

对虎扑新闻的搜索:

 

 

显示结果截图:

 

 

 

对虎扑步行街论坛的搜索:

 

 

    

搜索结果截图:

 

 

 

 

综合搜索:

 

 

 

 

搜索结果:

 

 

 

 

 

 

5.总结

通过这次实验我收获了很多:

1、首先了解了LUCENE搜索引擎框架,以后些其他搜索引擎可以更加得心应手;

2、通过阅读文档和实际使用,掌握了jsoup的基本用法;

3、增强java的编程能力。

本次实验的不足:

1、代码有冗余,下次可以多多使用封装和继承,使代码可读性更高;

2、没有做高亮显示;

3、只分析了3个页面,以后完善可以多分析几个页面(其实原理相似),增加代码完成度;

4、由于搜索的很多都是球星的名字,名字有些不规则,Lcunene分词器可能没法给出准确区分,所以有时候会出现搜索结果不匹配。

(比如搜索“科比”,可能会出现xxx比xxx高这样的选项)

 

 

 

(很喜欢这次实验,写出这个也算我这么多年的虎扑jrs没白当吧)

 (要源码的私戳吧,就不放在这献丑了)

转载于:https://www.cnblogs.com/SK1997/p/8430721.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_716717.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关系抽取-常见问题-Overlap:SEO(SingleEntity, 一实体与多个实体有关系)、EPO(EntityPair,同一对实体有多种关系)、HTO(HeadTail,头尾实体有嵌套/重叠)

SEO&#xff08;SingleEntityOverlap, 一个实体与多个实体有关系&#xff09;、 EPO&#xff08;EntityPairOverlap&#xff0c;同一对实体有多种关系&#xff09;、 HTO&#xff08;HeadTailOverlap&#xff0c;头尾实体有嵌套/重叠&#xff09; 参考资料&#xff1a; 关系抽…

网站统计 开源 java_开源 java CMS - FreeCMS2.8 统计分析

统计分析系统级统计分析&#xff0c;用于统计系统所有数据。工作量统计统计所有用户的工作量。从左侧管理菜单点击工作量统计进入。您可以根据添加人&#xff0c;时间条件进行筛选。并可导出结果为excel文件。站点信息统计统计所有站点的信息量。从左侧管理菜单点击站点信息统计…

sensor曝光量和曝光行的区别_企业SEO,如何利用行业关键词,提高产品曝光量?...

每一个企业&#xff0c;基于网络营销而言&#xff0c;对方都期望&#xff0c;自身的产品能够借助相关营销工具&#xff0c;获得不错的产品曝光量。特别是百度SEO&#xff0c;如果前期你的准备工作不足&#xff0c;你基于搜索所获得的曝光量&#xff0c;总是杯水车薪的。那么&am…

用HTML+CSS编写一个计科院网站首页的静态网页

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>计算机科学学院</title><link href"css/bgcss.css" rel"stylesheet"> </head> <body><!--顶部图片部…

社交网站部署——SVN服务器搭建并发布上线

案例概述 某公司的社交网站采用PHP语言开发&#xff0c;为了管理PHP程序员开发的代码&#xff0c;上级领导要求搭建SVN服务器进行版本控制。社交网站的第一个版本部署在LNMP平台之上&#xff0c;前端为Nginx服务器&#xff0c;通过fastcgi协议访问后端的PHP服务器。为了保证数据…

鸿蒙os开发网站,华为鸿蒙系统最新消息,HarmonyOS 应用开发在线体验网站上线

原标题&#xff1a;华为鸿蒙系统最新消息&#xff0c;HarmonyOS 应用开发在线体验网站上线华为的鸿蒙系统从开发之初就受到了大家的广泛关注&#xff0c;从一开始的“备胎”到现在最新的HarmonyOS 2.0版本&#xff0c;华为鸿蒙系统在成长过程中也是经历了不少的波折。今天&…

如何屏蔽https网站,禁止https网站的访问?

HTTPS&#xff08;HTTP over SSL&#xff09;由于其通讯协议的特殊性&#xff0c;域名信息和访问的URL等都处于SSL加密保护下&#xff1b;所以大部分的路由器系统都无法对https网站的域名进行过滤和屏蔽。而诸如WFilter这样的专业级上网行为管理产品&#xff0c;则可以对流量进…

vue项目的seo

2019独角兽企业重金招聘Python工程师标准>>> 不可否定的是&#xff0c;vue现在火。但是在实际项目中&#xff0c;特别是像一下交互网站&#xff0c;我们不可避免会考虑到的是seo问题&#xff0c;这直接关系到我们网站的排名&#xff0c;很多人说用vue搭建的网站不能…

屏蔽复制网站内容时弹出的提示

例如chrome浏览器&#xff0c;在设置里把JavaScript关掉就行了 url地址栏输入chrome://settings/content/javascript?searchjavascript

网站设计HTML——百度 滚筒洗衣机

滚筒洗衣机的效果 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>滚筒洗衣机销售排行榜</title> </head> <body> <div><h1>滚筒洗衣机销售排行榜</h1><div&g…

linux救援模式使用yum,centos如何进救援模式_网站服务器运行维护,centos

如何解决CentOS7系统ifconfig无法使用的情况_网站服务器运行维护CentOS7系统ifconfig无法使用的解决方法&#xff1a;首先查看“ifconfig”命令所需要的安装包&#xff1b;然后使用“#yum -y install net-tools”命令安装软件&#xff1b;最后使用“ifconfig”查看IP信息即可。…

如何删除ppt自带背景音乐_把网站搬进PPT里是种怎样的体验?

本文总计&#xff1a;2477 字预计阅读时间&#xff1a;10 分钟昨天&#xff0c;我给大家推荐了一个酒类产品的官网&#xff0c;不知道大家看过没。要是没看过的话&#xff0c;也没有关系&#xff0c;因为我用 PPT 把这个网站仿制了一下。保留了主要元素&#xff0c;以及大部分的…

mysql网站中文乱码,关于MySQL中文乱码的完美解决方案

当用客户端或用其他方式连接数据键入中文数据后&#xff0c;在client中的显示为乱码&#xff0c;当然这是字符集设置出现了问题。我先后尝试了很多办法&#xff0c;但依然还是无法在client中显示中文&#xff0c;我尝试在my.ini中修改一下数据在[client]中加入。# Here follows…

php asp.net mvc jsp,IIS部署asp.net mvc网站的方法

iis配置简单的ASP.NET MVC网站&#xff0c;供大家参考&#xff0c;具体内容如下编译器&#xff1a;VS 2013本地IIS&#xff1a;IIS 7操作系统&#xff1a;win 7MVC版本&#xff1a;ASP.NET MVC4sql server版本: 2008 r2打开VS 2013&#xff0c;新建一个MVC项目(Internet版的),然…

特殊日期将网站变成灰色-css滤镜(整理)

一、网站变灰 <!DOCTYPE html> <html> <head> <style> img {-webkit-filter: grayscale(100%);-moz-filter: grayscale(100%);-ms-filter: grayscale(100%);-o-filter: grayscale(100%);filter: grayscale(100%);filter: progid:DXImageTransform.Micr…

tp5怎么做清空网站缓存

首先我们要做的效果如图&#xff1a; 前台代码 <li><a href"{:url(Index/clearCache)}" class"login-area dropdown-toggle"><section><h2><span class"profile"><span><i class"menu-icon fa fa …

nccloud 开发环境访问_比快更快,Github Action + 云开发部署静态网站

Github 为开源项目提供了用于静态页面展示的 Pages 服务&#xff0c;很多开发者都在上面托管了自己的静态网站和博客&#xff0c;不少开源项目的案例和文档页面也采用了这种方式。不过由于 Pages 的 CDN 节点大部分在国外&#xff0c;在国内的访问速度不是很理想&#xff0c;不…

白嫖网站文章复制粘贴

我一看到这种就是特别烦&#xff0c;复制一篇文章就要钱&#xff0c;于是想到了一个好办法 1.首先按F12键&#xff0c;就会弹出如下界面&#xff0c;如果你是开发人员就会秒懂的。 2.点击Console 3.在下方空白输入$0,直接按回车键 , 就可以直接复制文章了&#xff0c;是不是很…

无法访问 IIS 元数据库。您没有足够的特权访问计算机上的 IIS 网站。

1.使用VS2015运行项目&#xff0c;选择使用本机iis运行时报错&#xff1a; XXXX 已配置为使用 IIS。 无法访问 IIS 元数据库。您没有足够的特权访问计算机上的 IIS 网站。 解决方法1&#xff1a; 以"管理员权限"运行VS,在VS菜单打开项目即可。 但是以上解决方法不…

VS2015设置网站/WebSite的启动端口

1.说明在 VS2015的版本中 没有提供修改端口的地方&#xff0c;在网站的属性页中 2.如果想要修改生产环境&#xff08;IISExpress&#xff09;的端口需要在解决方案源代码修改 使用记事本等打开.sln文件 手动修改启动地址