/* */

基于Scrapy框架的校园搜索引擎设计

2020-07-09| 发布者: admin| 查看: |

引言

在现今信息化的社会中,人们可以通过网络获得大量的信息。对于校园数字化建设来说,大量的冗杂信息给校园网站内信息的查找与定位带来困难。目前大多校园网站都是采用普通的站内搜索来查询信息,难以满足日益增长的需求。

针对上述问题,为了给学校打造一个高效、清净的信息环境,本文将基于Scrapy框架对校园搜索引擎进行相关设计。建立校园搜索引擎的可行性主要有以下几个方面:(1)校园站的网络链接相对较少,站点层次分明,数据抓取进程的计算量也较少,能加快服务器的响应速度。(2)所需硬件和软件配置不高,便于控制项目开发成本,有利于项目实施。(3)参考体系成熟的相关模型和算法,加以改进优化后应用到设计中。

由上述分析可知,建立校园搜索引擎是符合客观实际需求并且可行的。

1 建立搜索引擎流程分析

1.1 分析搜索引擎框架

建立搜索引擎首要工作是分析设计流程,本文选用Python语言中的Scrapy爬虫框架作为数据抓取的核心,接着使用Whoosh建立搜索引擎的索引库,最后使用Flask设计Web查询界面。

1.2 网络爬虫

网络爬虫是一种自动抓取网页信息的程序,搜索引擎通过爬虫抓取网页信息,网络爬虫是搜索引擎的核心。网络爬虫从初始网页的URL开始,在抓取网页信息的进程中,不停地将所在页面抓取的子URL放入待抓取URL队列,所有的抓取信息将会以文件的形式被存储到数据库。

广度优先遍历又叫层次遍历,从网页的初始URL开始抓取,将网页的子URL提取到待抓取队列,已抓取过的URL存储在一个表里。每次处理新URL前先询问是否已存在表中,若存在就说明该URL已抓取过,对此URL不再做处理,否则进行下一步处理。这种遍历算法存储了网页中所有的URL,所占用存储空间较大,程序运行速度较快。

深度优先遍历是抓取网页初始URL之前先搜索出一条单独的链。深度优先遍历沿着网页的子URL抓取到无URL可抓为止,接着返回至某一个网页URL,再选择该网页中的其他URL抓取信息。深度优先遍历不保留网页的所有URL,抓取后的URL会自动从数据库中删除,这种遍历算法的空间复杂度较小,占用空间也相对较少,本次设计选用这种遍历算法。

非完全PageRank策略是一种基于PageRank的抓取策略。该策略的工作原理是将已抓取的网页和待抓取的网页相加,在集合中进行PageRank计算,然后把待抓取URL队列中的网页按照PageRank计算结果从高到低排序得到一组序列,该序列就是程序后续所要依次抓取的URL列表。

1.3 搜索引擎的索引

搜索引擎的索引是关键词与网页文件之间的一种对应关系,其核心是进行布尔集合运算。目前存在两种索引:正向索引和倒排索引。

正向索引是文章生成的关键词的集合,抓取信息时会记录关键词的所在位置以及出现频率等信息。正向索引的结构是每个文档都对应其出现的关键字列表(关键词,出现位置,出现次数),正向索引需要遍历扫描所有正向索引文件才知道哪些文档带有某个关键词,搜索效率相对较低。

反向索引与正向索引相反,其数据结构是“单词-文档矩阵”,是关键词对应含有此关键词的文档集合。反向索引不但能记录拥有相应关键词文件的序列,而且能记录关键词频率以及相应文档频率、关键词出现位置等信息。在排序时这些信息都会被分别加权处理,产生最终的排序结果。

Whoosh是Python语言中的开源索引库,Whoosh提供许多函数和类应用于建立文档索引,通过查询输入关键词对文档进行搜索。

使用whoosh建立索引具备以下优点:(1)运行速度相比solr和elasticsearch较快,使用python语言解析,不用再使用其他编译器。(2)使用BM25F作为排序算法,更方便自定义。(3)占用存储空间较小。(4)支持存储任意的python面向对象。

whoosh索引的概念比solr和elasticsearch更简单易懂,不需要深入研究分布式爬虫,适用于搜索引擎的初学者。

1.4 Web查询界面

查询结果的排序规则与单文本词汇频率指数(TF)和逆文本词汇频率指数(IDF)相关。单文本词汇频率是根据网页长度对网页中关键词的出现次数做归一化处理,即关键词的次数除以网页的总词数。利用IDF提供的关键词再加权重,那么网页以及查询有关的计算就从以前对词频的计算变成加权的求和。

 

 

TF-IDF和关键词在文档中的出现次数成正比,与该词在整个语言中的出现次数成反比。

Web查询界面设计使用Flask框架。查询界面内的索引模块会根据查询语句进行检索排序,然后将查询结果返回给界面展示,用户就会得到查询信息的相关内容。

2 在搜索引擎中应用Scrapy爬虫框架

2.1 Scrapy框架工作原理

Scrapy是一个基于Twisted的异步处理框架,是Python语言编写的爬虫框架,用户能根据自身需求修改配置。Scrapy框架还能应用于数据挖掘、数据分析、数据存储、检测网络异常等应用领域。

Scrapy框架组件及其中间件的功能如下:(1)Scrapy引擎:串联框架各个模块,触发事务处理流程,控制系统数据处理流程。(2)Scheduler(调度器):有效处理待抓取URL队列。接受请求后把下一个待抓取URL返回给调度器。(3)Downloader(下载器):向网站服务器发送访问页面请求,再用爬虫抓取网页的内容。(4)Spiders(爬虫):选择抓取的网站和数据内容,创建网页解析规则和域名过滤规则等。(5)Item Pipeline(项目管道):处理爬虫抓取的数据,包括数据清洗、URL去重和数据存储等。(6)Middlewares(中间件):处理引擎与下载器之间的请求及响应,设置代理ip和用户代理。

Scrapy爬虫框架能快捷抓取网站信息,架构清晰,模块之间的耦合程度低,可扩展性强,帮助用户灵活地完成各种需求。

2.2 Scrapy框架的网页URL去重策略

Scrapy框架中URL去重是由RFPDupeFilter类中的request_fingerprint的方法来实现的。

调度器根据每一个URL请求的对应信息加密得到一个指纹信息,然后将自身维护的待抓取URL指纹信息和加密指纹信息对比,若指纹信息已存在就说明重复请求,将该请求从队列中删除,若没有该指纹信息,就把请求对象放入队列中等待被调用。

通常request请求时,在参数中加入dont_filter=False能关闭去重策略,可以反复抓取同一网站中不同子URL的网页信息。在进行大量的网页去重时,也可以使用Bloom Filter算法,就是利用布隆过滤器来节省占用的内存,能够大幅度降低内存使用,只需要使用传统方法的八分之一到四分之一。

关于数据去重一般有两种方法:一是使用Python的集合类型在pipeline中添加的去重策略,这种方法操作简单,不容易引发错误;二是将数据存储到数据库时去重,比如在Mysql中设置唯一索引或者在Redis中使用集合等,这种方法对爬虫的工作效率影响较小,但是会增加数据库的工作负荷。

2.3 Scrapy框架爬虫防禁止策略

在爬虫程序运行的过程中,会频繁访问目标网站,甚至会造成目标网站的服务器超负荷运行。这样会导致程序的IP被网站禁止访问,从而影响数据抓取的效率。以下是两种防止爬虫被禁止的策略:(1)在编写爬虫程序时,将settings.py文件中download_delay的参数设置为2秒以上,让程序抓取数据的频率不要太高。但这样也会增加程序的运行时间。(2)动态设置User-Agent代理池。User-Agent是包含浏览器、操作系统等信息的一个字符串,代理池的作用是在http请求头部加入user-agent选项,伪装成浏览器向服务器端发包。

3 结束语

本文通过Scrapy爬虫框架的使用,设计一个简单的校园搜索引擎系统。利用Scrapy爬虫框架以及Pythn语言扩展库,来实现校园搜索引擎系统稳定运行,在推广校园搜索引擎的使用方面存在着积极意义。系统同时也存在一些有待改进提升的功能,例如添加抓取校园官方微博以及微信公众号里的热点新闻展现在查询界面,这样用户就可以及时获取校园动态,还有改进搜索算法、提高搜索结果智能化等都是需要进一步研究的内容。


 
QQ在线咨询
售前咨询热线
13524991327
售后服务热线
13524991327
返回顶部