一种面向高校招投标公告主题爬虫的设计
2018-03-10袁琰伟陆培军
袁琰伟+陆培军
摘 要:由于通用搜索引擎返回的信息过多且主题相关性不强,使部分企业未能及时获取高校招标公告,错失中标机会。针对这种情况,提出了高校招投标公告主题爬虫的设计方法。爬虫首先通过主题确立、网页聚类,将高校招投标公告聚集页面存储起来,然后爬虫每日从高校招投标聚集页面采集最新公告。实验结果表明,该爬虫能及时更新高校招投标公告且准确率较高,较好地为高校招投标信息网站建设提供数据来源。
关键词:主题爬虫;搜索引擎;招投标;主题相关性;网页聚类
DOIDOI:10.11907/rjdk.172400
中图分类号:TP319
文献标识码:A 文章编号:1672-7800(2018)002-0117-03
0 引言
高校货物、工程、服务的需求量日益增多,投资成本越来越高。项目一般通过高校网站公开发布项目的招投标信息[1],而通用搜索引擎无法获取专业的招投标信息,逐一登录各高校网站查询招投标公告又非常繁琐,且招投标信息网基本都是收费的,缴费用户才能看到招标公告详细信息。招投标公告具有时效性,倘若公司因为错过了投标期限而未能中标,这对高校和企业都是一笔损失。
为了解决这一问题,需要将全国高校的招投标公告汇总并及时更新,给用户提供一个实用的查询接口。因此,本文对高校招投标公告主题爬虫进行了整体研究和设计。
1 主题爬虫结构
招投标公告发布有一定规范。大多高校都将招投标公告发布在高校网站的通知公告页面或高校招投标办公室网站,方便用户查询。
主题爬虫模拟用户浏览网页行为,从种子URL开始,向服务器发出请求。服务器作出响应,爬虫将响应资源下载,并从响应资源中获取新的URL,一层层地遍历整个互联网[2]。
为了让用户及时查询高校招投标公告,主题应当保证每日至少遍历一次各高校网站,以获取新的招投标公告。但每次都从首页开始遍历,显然十分耗时。本主题爬虫在第一次运行后,能将各高校的招投标公告聚集的页面保存下来,之后爬虫从招投标公告聚集的页面直接获取更新公告即可,大大节省了更新招投标公告所需时间,提高了效率。
依据高校招投标公告的分布特点及主题爬虫的行为特性,将高校招投标公告主题爬虫划分为以下几个模块:高校URL种子队列、网页采集模块、URL预处理模块、正文提取模块、主题确立模块、网页聚类模块、招投标公告聚集页面URL队列、招投标公告采集模块。
高校招投标公告主题爬虫结构如图1所示。
招投标公告主题爬虫处理流程:①检查招投标公告聚集页面URL队列是否为空,若为空执行步骤②,否则执行步骤③;②从高校URL种子队列逐一取出URL,通过网页采集模块和URL预处理模块遍历高校网站的前n层。通过文本提取主题,对采集的页面进行聚类,将判定为招投标公告聚集页面的URL存入招投标公告URL队列;③逐一取出URL,通过URL预处理模块,将判定为招投标公告的URL存入URL队列;④通過正文提取,将招投标公告URL队列中对应网页的招投标公告详细信息存入数据库。
2 主题爬虫设计
2.1 主题确立模块
主题确立是网页聚类的准备工作,为网页聚类提供特征词集。主题关键词集采用特征提取方式获取。首先通过人工选取若干高校招投标公告聚集页面(该页面是招投标公告以列表形式展示的页面,而不是招投标公告的详细页面)。对招投标公告聚集页面进行文本提取,分词和去无用词(“的”,“也”,“是”等),然后结合本爬虫特点,对TF-IDF算法进行一些改动,获取特征词权值,将权值较高的若干特征词作为高校招投标公告聚集页面的特征词集。
最经典的TF-IDF[3]是通过TF值(词条频率)与IDF值(逆文本频率)的乘积获得特征词的权值。不难发现,这样取得的特征词集能很好地表示单个页面的特征,即TF*IDF能计算出页面的个性词集。而本爬虫要从若干高校招投标公告聚集页面提取高校招投标的共性词,TF*IDF显然不适用。但是不难想象,单个高校招投标聚集页面的特征词集应为高校名称和招投标类词汇。高校名称能代表页面个性,而招投标类词汇代表页面共性,如果使用TF*IDF,显然会突出高校名称而忽略了招投标类词。所以,本爬虫在计算高校招投标公告聚集页面的特证词集时,将TF-IDF的计算公式改为TF/IDF,用以突出页面共性词(标投标类词汇),降低页面共性词(高校名称)的权重。
TF(Term Frequency),即词条频率(词条出现的次数除以文本总词数),词条在文本中出现的次数越多,TF值越高。
Fi为词条在文本中出现的次数,Z为文本总词数。
但是“的”,“也”等无意义词条也会频繁出现,这些显然不能作为文本的特征词。IDF(Inverse Document Frequency),即逆文本频率能很好地解决这一问题,文档中出现的词条越多,IDF值越小,反之,则越大。
D为全部文本数量,Di为出现词条Ti的文本个数。特征项Ti的权重计算公式如下:
本主题爬虫是将网页文本提取和分词去噪后的文本通过改动后的TF-IDF算法计算,将权值达到阈值的词条作为高校招投标公告聚集页面的特证词集。
2.2 网页采集模块
2.2.1 主体爬虫工作原理
网页采集模块就是使用爬虫模拟用户浏览网页的行为,向服务器发出请求。服务器作出响应,爬虫将响应资源下载。爬虫以多线程的方式从待访问队列中取出URL,访问对应网页,并将网页中的链接存入待访问URL队列,直至爬虫到达预定深度。存入待访问URL队列之前需要进行查重操作,防止爬虫重复爬取相同的URL,以提高效率。本文使用的URL去重算法为布隆过滤器[4]。布隆过滤器是一种牺牲正确率换取时间空间的算法,但对于成千上万的URL来说,错过个别URL是可以容忍的,因此布隆过滤器在URL去重方面相当适用。endprint
2.2.2 布隆过滤器
初始状态下,集合S={x1,x2,…,xn}用一个包含m位的位数组表示,且每一位都是0。随后布隆过滤器使用k个相互独立的哈希函数,将集合中的元素映射到位数组中。对于任意集合元素x,第i个哈希函数映射的位置hi(x)都置为1。判断元素y是否在集合S中,只需对y做k次哈希运算即可。如果hi(y)的所有对应位置都为1,则认为y是集合中的元素,否则不是。
将布隆过滤器应用到本主题爬虫中,只需将URL队列看成一个集合,并将队列中各URL做多次不同的哈希函数运算,映射至集合位数组中,同样对新抓取到的URL做多次哈希函数运算,如果结果的对应位置都为1则直接去除,否则加入待爬取队列。
网页采集过程中还会遇到许多无用链接,本主题爬虫加入了URL预处理模块处理这些无用的URL。
2.2.3 URL预处理模块
在高校招投标公告主题爬虫采集过程中会获得许多不完整的URL、校外URL、图片和文档URL以及重复的URL。本主题爬虫加入了URL补全模块和URL过滤模块,用以处理这些URL。
(1)URL补全。经测试发现,在招投标公告聚集页面源码中提取的URL多不完整。在不补全的情况下,这类网址无法访问。因为这类URL在源码中使用了相对路径,所以缺少的头部往往是http://.*edu.cn/部分(例如info/1023/1260.htm缺少的是武汉音乐学院招投标与采购管理办公室的首页地址http://zcb.whcm.edu.cn/,即真正的网址应为http://zcb.whcm.edu.cn/info/1023/1260.htm)。而缺头网址与所在页面网址同为某一网址的子链接,所以通过当前页面网址获取缺头网址缺少的头部,并与不完整网址作字符串连接,即可获得可访问的招投标信息网址。URL补全流程如图2所示。
(2)URL过滤。URL过滤的作用是将校外URL、图片和文档URL以及重复的URL等无需爬取的URL直接去除,以减少爬虫运行时间。URL过滤分为URL范围限制、去除无用URL和URL去重3步。
URL范围限制:如果不加以限制,爬虫必然会通过外链爬取站外页面,对于只需要高校招投标公告的用户而言,这显然浪费了时间和计算机资源。经过大量观察不难发现,基本所有高校网站的站内域名都符合这样的规范,即高校主页大都为:
http://www.xxx.edu.cn/
其中xxx为高校名称(英文或拼英缩写)。
而站内其它部门首页网站要么是将www换成某部门的名称(例如南通大学的招投标网站为http://ztb.ntu.edu.cn/),要么在高校主页网站后加部门名称(例如海南大学基建处的域名为http://www.hainu.edu.cn/jijian/),所以URL可使用正则表达式校验来完成。本文使用的正则表达式是将高校主页域名的www替换成.*,cn/替换成cn/.*即:http://.*.xxx.edu.cn/.*。
无用URL指图片、空连接、常见文档(doc、docx、xls、pdf等)和压缩文件等无用链接,这类URL对于本主题爬虫是多余的,所以直接去除。
网页采集过程中还需要提取网页的纯文本用于网页聚类,判断网页是否为招投标公告聚集页面。
2.3 网页聚类
本网页聚类[5-6]用以获取招投标公告聚集页面,供招投标公告采集模块使用。网页聚类首先要提取网页的文本部分,使用jsoup可以较简单地获取网页的文本部分。随后要对文本部分进行分词和去除无用词(“的”,“也”,“是”等)操作,再计算各分词的TF值,作为该词的权值,这里只计算TF值而不计算IDF值,是为了节省程序运行时间,且TF值也可很好的表示单个页面中的关键词权值。若该页面不是招投标公告聚集页面,则关键词集中不会存在招投标类词汇,在与招投标公告聚集页面作相似度计算时,结果趋于0或等于0。所以网页采集过程中,网页的分词权重直接用TF值表示,即采集页面的权重:
本主题爬虫使用空间向量模型[7-8]对爬取页面和招投标公告聚集頁面进行相似度计算,然后根据预先设定的文本相似度阈值,将相似度较高的页面URL存入招投标公告聚集页面URL队列,供招投标公告采集模块使用。
将采集页面文本D(w1,w2,…,wn)投射至一个n维坐标系中,即D的空间向量模型。同样,将招投标公告聚集页面主题定义为特征向量K(k1,k2,…,kn),其中ki为招投标公告聚集页面主题特征词条的权重。然后计算向量D、K的余弦值,即可计算出文本的主题相似度。主题相似度计算公式如下:
其中,ki为招投标公告聚集页面主题特征词条的权重,wi为采集页面特征词权重。Sim(K,D)取值范围为[0,1],当Sim(K,D)取0时,文本主题不相关,当Sim(K,D)取1时,文本主题相似度最高。将达到预定阈值的网页URL存入招投标信息聚集页面URL队列。
2.4 招投标公告采集模块
完成招投标公告聚集页面URL队列的录入后,即可通过招投标公告聚集页面URL队列提供的URL访问对应网页。提取源码中的超链接标签,用正则表达式去匹配招投标信息常见的关键词,如“采购公告”、“招标告告”、“中标公示”等,在匹配的超链接标签中提取其中的网址和标题,提取的网址可用主题爬虫继续爬行,通过正文获取招投标公告,抓取的标题则作为招投标公告标题,最后将正文和标题录入数据库。
2.5 正文提取
目前互联网上大部分网页使用
正文提取方法:将预处理过的网页源码中的各个
3 结语
本文结合高校招投标现状,设计了高校招投标信息主题爬虫。设计了主题爬虫的各个模块,并详细阐述了各模块所需的算法及解决方案,为高校招投标信息主体爬虫的实现奠定了基础。当然该爬虫还有需要改进的地方,如单单用“采购公告”、“招标公告”、“中标公示”等关键词去判定链接为招投标信息链接是不严谨的,经测试,还是会有少量非招投标信息存入数据库。
参考文献:
[1] 程光熙,朱琴华,王海林.新形势下高校招投标工作的实践与探索[J].廉政文化研究,2013(5):76-81.
[2] 汪涛,樊孝忠.主题爬虫的设计与实现[J].计算机应用,2004(S1):270-272.
[3] 许晓昕,李安贵.一种基于TFIDF的网络聊天关键词提取算法[J].计算机技术与发展,2006(3):122-222.
[4] 潘昊,鄂海红,宋美娜.布隆过滤器在网页消重中的应用[J].软件,2015(12):166-170.
[5] 周开乐,杨善林,丁帅,等.聚类有效性研究综述[J].系统工程理论与实践,2014(9):2417-2431.
[6] 伍育红.聚类算法综述[J].计算机科学,2015(S1):491-524.
[7] 赵雪,崔荣一.基于N层向量空间模型的文本相似度计算方法[J].延边大学学报:自然科学版,2016(3):231-234.
[8] 吴玮.基于空间向量模型的垃圾文本过滤方法[J].湖南科技大学学报:自然科学版,2014(1):78-83.
[9] 熊忠阳,蔺显强,张玉芳,等.结合网页结构与文本特征的正文提取方法[J].计算机工程,2013(12):200-210.