基于Python的网络新闻爬虫与检索
2019-05-24陈欢黄勃刘文竹
陈欢 黄勃 刘文竹
摘 要:网络上存在众多新闻门户网站,新闻信息繁多,造成严重的新闻信息过载。针对该类问题,设计一个基于Python的网络新闻信息搜集与检索系统。该系统通过使用Scrapy网络爬虫框架进行网络新闻信息搜集,同时对新闻链接、标题进行去重,最后使用Slor检索服务对爬虫获得的新闻数据进行全文检索。与传统方法相比,该系统设计的去重方法在保证链接不重复的情况下,对标题进行去重,并引入Solr检索服务,可以帮助读者更快速地找到想要阅读的新闻。
关键词:爬虫;信息检索;Scrapy;Solr;数据去重
DOI:10. 11907/rjdk. 191232
中图分类号:TP393 文献标识码:A 文章编号:1672-7800(2019)005-0168-04
Abstract:There are many news portals on the Internet, and there are many news information which causes serious news information overload. Aiming at this kind of problem, this paper designs a Python-based network news information collection and retrieval system. The system uses the Scrapy web crawler framework to collect online news information, and at the same time de-weights the news links and titles, and finally uses the Slor search service. The full-text search was carried out on the news data obtained by the crawler. Compared with the traditional method, the de-duplication method of the system deduplicates the title without link repeat, and introduces the Solr search service, which can help readers quickly locate the news that they want to read.
Key Words:web crawler;information retrieval; Scrapy; Solr; data deduplication
0 引言
新闻作为社会事件的记录,是反映日常生活的常见文体之一,具有十分重要的意义。在互联网时代,网络新闻具有传播速度快、内容多面化、来源多渠道等特点,但在给公众快速提供新闻信息的同时,也因信息量过大导致信息过载,使公众反而无法全面了解新闻事件真相。如何从海量新闻数据中获取高质量新闻信息,帮助新闻用户快速获得自己感兴趣的网络新闻是本文要解决的问题。
网络爬虫又称网络蜘蛛、网络机器人,指按照一定规则自动从网络上抓取信息的一段程序或者脚本。使用爬虫技术能够获取海量网络数据并进行结构化存储[1-2]。文献[3]使用主题爬虫的方法对新闻网进行抓取,与本文使用方法不同的是主题爬虫通过网页和主题相关度计算判断网页价值;文献[4]根据网络爬虫原理和爬虫算法,对数据存储等基本信息进行全面、细致的介绍,但未讨论爬虫过程中可能遇到的问题;文献[5]使用Hadoop增量式更新分布式并行科技进行视频爬虫,考虑链接指向视频内容的情况,在层内使用合并去重的增量式方法,但该方法不适用于本文新闻门户网站;文献[6]使用Scrapy+MySql+Django进行网络爬虫、存储和查询,在查询方法上与Slor检索方法有较大差距;文献[7]利用WebDriver和Selenium 对微博、新闻网站的健康信息进行爬虫,并比较了不同线程下爬虫程序抓取速度,使用该技术可以在一定程度上规避反爬,但会导致爬虫效率低下。
网络新闻媒体的快速发展逐渐取代了传统新闻传播媒介,并且降低了新闻制作和传播成本,由此导致某一事件爆发时,网络上容易产生各种主观性较强的报道,使新闻丧失真实性[8-9]。针对以上问题,本文使用Scrapy爬虫框架收集网络新闻信息,并使用集合去重、查询去重等去重策略,保证每条新闻信息唯一性,同时使用Solr检索服务排序算法,实现新闻内容全文检索。
1 网络新闻信息采集
信息采集是收集、检索网络新闻的基础,由于新闻门户网站繁多,系统为了保证数据来源选取几个主流新闻网站进行爬虫研究。爬虫程序的作用包括新闻标题、内容、时间及来源等信息获取。新闻网页相对于其它复杂的网站构成较为简单,本文通过使用正则表达式与BeautifulSoup库可基本获取目标信息。
1.1 基于Scrapy的网络新闻采集
Scrapy是一个健壮的网络框架,支持从各种数据源中抓取数据。Scrapy是一种基于事件的框架,能够将数据清洗、格式化,并进行装饰后存储到数据库中。Scrapy框架包含Scrapy Engine(Scrapy引擎)、Scheduler(调度器)、Downloader(下载器)、Spiders(爬虫)、Item Pipeline(管道),Downloader Middlewares(下载器中间件)等组件[10]。
爬虫过程中需要对URL链接及页面进行分析,以便提高爬虫程序工作效率,例如腾讯新闻每篇文章的链接构成如下‘https://new.qq.com/cmsn/20190227/201902270099- 55.html,‘https://new.qq.com/表示腾讯新闻主页面,‘cmsn表示文章归属板块,‘20190227表示文章发布日期,‘2019022700995表示文章ID。文章内容包含在
标签内,文章主题包含在
标签内。使用BeautifulSoup庫可以很容易地获得文章内容、标题等信息。腾讯新闻的详细时间信息、来源信息包含在标签内,使用BeautifulSoup库无法解析到目标信息,但是可以通过正则表达式进行匹配。例如匹配新闻时间信息的正则表达式为time=re.findall(b"""pubtime":(.*?),""",source)。
使用Scrapy限制域名的方法使爬取下来的新闻信息更加有针对性,例如腾讯新闻中视频模块不是目标内容,如果也对其进行爬取会导致爬虫资源浪费,降低爬虫程序工作效率。同时设计过滤方法,将依据提取规则提取的特殊字符串进行替换,保证爬取的新闻文本信息不包含其它特殊字符串,特殊字符串在写入JSON文件时会引起错误,导致新闻不能被完整地写入。
1.2 增量式网络爬虫
网络新闻更新速度快、内容丰富,为了及时、准确地更新链接库链接与数据库新闻内容,需要设计一种简单有效的去重算法[11]。常见去重算法有Hash去重、BloomFilter去重、利用集合内元素的唯一性去重。Hash去重的基本原理是利用不同的Hash函数如MD5、SHA等,生成Hash索引,通过遍历Hash索引,去除重复数据,即通过把一个比较大的数据集映射到一个比较小的数据集中,以此加快查询速度。随着数据量的增大,利用Hash去重会浪费大量内存[12],因此在Hash去重的基础上引入BloomFileter 算法,通过K个Hash函数将新加入的元素映射成一个位阵列中的K个点,当有一个新元素加入时,通过K个点的值判断其是否存在[13-14]。
爬虫爬取的新闻信息中有许多重复的内容,对爬虫过程去重不能保证数据库某一条信息唯一性。如图1所示,由于该条新闻来自腾讯转载自人民网,导致一条新闻对照多个链接。传统去重方法只是对URL进行去重,无法处理新闻存在一个标题对照多个URL的情况。因此进行Scrapy爬虫去重之后,在存入数据库的过程中执行Sql查询操作决定是否将本条信息插入到数据库中。Sql查询语句为:
cursor.execute(“select * from news_tb3 where news_title=%s”,item[‘title])
2 使用Solr检索服务的新闻数据检索
Solr是Apache基金会开源搜索引擎库Lucene下的子项目,Lucene是一种基于Java语言的开源信息检索库,Solr在Lucene的基础上进一步扩展,包含丰富的查询语言,功能也更加完善,擅长处理以文本为中心、读为主导、面向文档且具有灵活模式的数据,其在数据检索速度方面远远快于MySQL查询语言,并且可以实现模糊匹配[15-16]。
2.1 Solr排序算法
2.2 Solr基本配置数据导入
在Solr中创建一个属于新闻检索的solrcore,配置该solrcore的Solrconfig.xml、data-config.xml文件,将数据库内容导入Solr,Solr自动对导入的文本进行分词、建立索引等处理,即可实现存储数据检索。从表1中协调因子的计算公式可看出Solr提供多条件查询,能同时提交多个检索词。
Solr Schema文件设置如下,其中配置了新闻ID,还包括新闻链接、标题、时间、内容等信息,但配置内容和变量名称需与dataconfig中配置的参数对应。
Solr中dataconfig文件配置如下,dataconfig文件用于与数据库的连接,将数据库内容导入到Solr中,其中数据库中的“news_id”与Solr中的“id”对应,否则会引起数据导入失败。数据完全导入Solr后的结果如图2所示。
3 系统界面设计
系统界面采用PyQt5编写,PyQt5具有跨平台、代码简洁、开发高效等优点[19]。PyQt使用Qt Designer对界面进行排版,可节省大量开发时间[21-22]。系统界面显示新闻时间、标题、链接等信息,每一页显示检索前30條新闻信息,可通过点击“下一页”向Solr发出请求获得其它相关新闻信息。系统响应过程为:用户向客户端发出检索请求,检索词以链接形式提供给Solr,Solr将检索结果以JSON格式返回,客户端对数据进行处理后显示给用户。Solr提供类似Web Service的API接口,因此在一个局域网内均可通过链接或者客户端的形式实现新闻检索。
4 系统总体结构
系统使用模块化的设计方法,具有易扩展、易维护等优点,主要包括数据收集模块,即网络爬虫、数据预处理模块、数据存储模块和数据显示模块。爬虫程序定时在网络上采集新闻信息,这些数据经数据预处理模块处理后,被插入数据库并定时更新到Solr服务中,当用户向服务器发出查询请求时,服务器会根据查询关键词,将查询结果返回给客户端。
5 结语
本文通过使用Scrapy爬虫框架进行网络新闻信息搜集,系统设计过程中,首先考虑系统需求,根据需求设计相应模块;其次需考虑数据本身,根据数据特质设计相应方法。本文使用Slor服务对新闻信息进行索引并检索排序,在帮助新闻阅读用户快速发现自己感兴趣的新闻的同时,还可保证新闻质量。
参考文献:
[1] 张树涛,谭海波,陈良锋,等. 一种高效的分布式爬虫系统负载均衡策略[J/OL]. 计算机工程:1-7. [2019-03-10]. https://doi.org/10.19678/j.issn.1000-3428.0053439.
[2] 安靖. 面向网络舆情的检索系统设计研究[J]. 软件导刊,2013,12(7):40-41.
[3] 吕振辽,翟莹莹,魏彦婧. 面向新闻网的智能抓取技术[J]. 控制工程,2013,20(4):707-710.
[4] 魏冬梅,何忠秀,唐建梅. 基于Python的Web信息獲取方法研究[J]. 软件导刊,2018,17(1):41-43.
[5] 刘芳云,张志勇,李玉祥. 基于Hadoop的分布式并行增量爬虫技术研究[J]. 计算机测量与控制,2018,26(10):269-275+308.
[6] 马联帅. 基于Scrapy的分布式网络新闻抓取系统设计与实现[D]. 西安:西安电子科技大学,2015.
[7] 程增辉,夏林旭,刘茂福. 基于Python的健康数据爬虫设计与实现[J]. 软件导刊,2019,18(2):?60-63.
[8] 刘灿,任剑宇,李伟,等. 面向个性化推荐的教育新闻爬取及展示系统[J]. 软件工程,2018,21(2):38-40+34.
[9] 姚白羽. 个性化新闻抓取与聚合系统的研究及实现[D]. 北京:中国科学院大学,2014.
[10] 范传辉. Python爬虫开发与项目实战[M]. 西安:机械工业出版社,2017.
[11] 徐文杰,陈庆奎. 增量更新并行Web爬虫系统[J]. 计算机应用, 2009,29(4):1117-1119.
[12] 陆浩,卢军,修榕康. 密码字典数据去重算法研究[J]. 软件导刊,2017,16(2):57-59.
[13] 杨颂. 面向电子商务网站的增量爬虫设计与实现[D]. 长沙:湖南大学,2010.
[14] 成功,李小正,赵全军. 一种网络爬虫系统中URL去重方法的研究[J]. 中国新技术新产品,2014(12):23-23.
[15] 贾贺,艾中良,贾高峰,等. 基于Solr的司法大数据检索模型研究与实现[J]. 计算机工程与应用,2017,53(20):249-253.
[16] GRAINGER T. Solr实战[M]. 范炜,译. 北京:电子工业出版社, 2017.
[17] 郝强,高占春. 基于SolrCloud的网络百科检索服务的实现[J]. 软件,2015,36(12):103-107.
[18] 霍庆,刘培植. 使用Solr为大数据库搭建搜索引擎[J]. 软件. 2011,32(6):11-14.
[19] 苏潭英,郭宪勇,金鑫. 一种基于Lucene的中文全文检索系统[J]. 计算机工程,2007(23):94-96.
[20] 段国仑,谢钧,郭蕾蕾,等. Web文档分类中TFIDF特征选择算法的改进[J]. 计算机技术与发展,2019(5):1-4.
[21] 张文超,胡玉兰. 基于PyQt的全文搜索引擎平台开发[J]. 软件导刊,2018,17(9):132-135.
[22] SUMMERFIELD M. Rapid GUI programming with Python and Qt: the definitive guide to PyQt programming[M]. New Jersey: Prentice Hall Press,2008.
(责任编辑:江 艳)