推荐星级:
- 1
- 2
- 3
- 4
- 5
基于Python的网络新闻爬虫与检索
资料介绍
网络上存在众多新闻门户网站,新闻信息繁多,造成严重的新闻信息过载。针对该类问题,设计一个基于Python的网络新闻信息搜集与检索系统。该系统通过使用Scrapy网络爬虫框架进行网络新闻信息搜集,同时对新闻链接、标题进行去重,最后使用Slor检索服务对爬虫获得的新闻数据进行全文检索。与传统方法相比,该系统设计的去重方法在保证链接不重复的情况下,对标题进行去重,并引入Solr检索服务,可以帮助读者更快速地找到想要阅读的新闻。
部分文件列表
文件名 | 大小 |
基于Python的网络新闻爬虫与检索.pdf | 2M |
部分页面预览
(完整内容请下载后查看)第 18 卷 第 5 期
2019 年 5 月
软 件 导 刊
Software Guide
Vol. 18 No. 5
May. 2019
基于 Python 的网络新闻爬虫与检索
1
1,2
1
1
1
陈 欢 ,黄 勃 ,刘文竹 ,高永彬 ,姜晓燕
(1. 上海工程技术大学 电子电气工程学院,上海 201620;
2. 江西省经济犯罪侦查与防控技术协同创新中心,江西 南昌 330000)
摘
要:网络上存在众多新闻门户网站,新闻信息繁多,造成严重的新闻信息过载。针对该类问题,设计一个基
于 Python 的网络新闻信息搜集与检索系统。该系统通过使用 Scrapy 网络爬虫框架进行网络新闻信息搜集,同
时对新闻链接、标题进行去重,最后使用 Slor 检索服务对爬虫获得的新闻数据进行全文检索。与传统方法相
比,该系统设计的去重方法在保证链接不重复的情况下,对标题进行去重,并引入 Solr 检索服务,可以帮助读者
更快速地找到想要阅读的新闻。
关键词:爬虫;信息检索;Scrapy;Solr;数据去重
DOI:10. 11907/rjdk. 191232
中图分类号:TP393
文献标识码:A
文章编号:1672-7800(2019)005-0168-04
Python-based Web News Crawler and Retrieval
1
1
1
1
CHEN Huan ,HUANG Bo1,2,LIU Wen-zhu ,GAO Yong-bin ,JIANG Xiao-yan
(1. School of Electrical and Electronic Engineering,Shanghai University of Engineering and Technology,Shanghai 201620,China;
2. Jiangxi Collaborative Innovation Center for Economic Crime Detection and Prevention and Control,Nanchang 330000,China)
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. Com-
pared 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
则自动从网络上抓取信息的一段程序或者脚本。使用爬
虫技术能够获取海量网络数据并进行结构化存储[1-2]。文
0
引言
献[3]使用主题爬虫的方法对新闻网进行抓取,与本文使
用方法不同的是主题爬虫通过网页和主题相关度计算判
断网页价值;文献[4]根据网络爬虫原理和爬虫算法,对数
据存储等基本信息进行全面、细致的介绍,但未讨论爬虫
过程中可能遇到的问题;文献[5]使用 Hadoop 增量式更新
分布式并行科技进行视频爬虫,考虑链接指向视频内容的
情况,在层内使用合并去重的增量式方法,但该方法不适
用于本文新闻门户网站;文献[6]使用 Scrapy+MySql+Djan-
go 进行网络爬虫、存储和查询,在查询方法上与 Slor 检索
新闻作为社会事件的记录,是反映日常生活的常见文
体之一,具有十分重要的意义。在互联网时代,网络新闻
具有传播速度快、内容多面化、来源多渠道等特点,但在给
公众快速提供新闻信息的同时,也因信息量过大导致信息
过载,使公众反而无法全面了解新闻事件真相。如何从海
量新闻数据中获取高质量新闻信息,帮助新闻用户快速获
得自己感兴趣的网络新闻是本文要解决的问题。
网络爬虫又称网络蜘蛛、网络机器人,指按照一定规
收稿日期:2019-03-19
基金项目:江西省经济犯罪侦查与防控技术协同创新中心开放基金项目(JXJZXTCX-030)
作者简介:陈欢(1992-),男,上海工程技术大学电子电气工程学院硕士研究生,研究方向为文本分析、推荐系统;黄勃(1985-),男,上
海工程技术大学电子电气工程学院讲师、江西省经济犯罪侦查与防控技术协同创新中心特聘研究员,研究方向为需求工
程、软件工程、形式化方法、人工智能。本文通讯作者:黄勃。
· 169 ·
第 5 期
陈
欢,黄 勃,刘文竹,等:基于 Python 的网络新闻爬虫与检索
方法有较大差距;文献[7]利用 WebDriver 和 Selenium 对
微博、新闻网站的健康信息进行爬虫,并比较了不同线程
下爬虫程序抓取速度,使用该技术可以在一定程度上规避
反爬,但会导致爬虫效率低下。
新链接库链接与数据库新闻内容,需要设计一种简单有效
的去重算法[11]。常见去重算法有 Hash 去重、BloomFilter 去
重、利用集合内元素的唯一性去重。Hash 去重的基本原理
是利用不同的 Hash 函数如 MD5、SHA 等,生成 Hash 索引,
通过遍历 Hash 索引,去除重复数据,即通过把一个比较大
网络新闻媒体的快速发展逐渐取代了传统新闻传播
媒介,并且降低了新闻制作和传播成本,由此导致某一事
件爆发时,网络上容易产生各种主观性较强的报道,使新
闻丧失真实性[8-9]。针对以上问题,本文使用 Scrapy 爬虫框
架收集网络新闻信息,并使用集合去重、查询去重等去重
策略,保证每条新闻信息唯一性,同时使用 Solr 检索服务
排序算法,实现新闻内容全文检索。
的数据集映射到一个比较小的数据集中,以此加快查询速
[12]
度。随着数据量的增大,利用 Hash 去重会浪费大量内存
,
因此在 Hash 去重的基础上引入 BloomFileter 算法,通过 K
个 Hash 函数将新加入的元素映射成一个位阵列中的 K 个
点,当有一个新元素加入时,通过 K 个点的值判断其是否
存在[13-14]
。
爬虫爬取的新闻信息中有许多重复的内容,对爬虫过
程去重不能保证数据库某一条信息唯一性。如图 1 所示,
由于该条新闻来自腾讯转载自人民网,导致一条新闻对照
多个链接。传统去重方法只是对 URL 进行去重,无法处理
新闻存在一个标题对照多个 URL 的情况。因此进行 Scra-
py 爬虫去重之后,在存入数据库的过程中执行 Sql 查询操
作决定是否将本条信息插入到数据库中。Sql 查询语句
为:
1
网络新闻信息采集
信息采集是收集、检索网络新闻的基础,由于新闻门
户网站繁多,系统为了保证数据来源选取几个主流新闻网
站进行爬虫研究。爬虫程序的作用包括新闻标题、内容、
时间及来源等信息获取。新闻网页相对于其它复杂的网
站构成较为简单,本文通过使用正则表达式与 Beautiful-
Soup 库可基本获取目标信息。
cursor.execute(“select * from news_tb3 where news_ti-
tle=%s”,item[‘title'])
1.1 基于 Scrapy 的网络新闻采集
Scrapy 是一个健壮的网络框架,支持从各种数据源中
抓取数据。Scrapy 是一种基于事件的框架,能够将数据清
洗、格式化,并进行装饰后存储到数据库中。Scrapy 框架包
含 Scrapy Engine(Scrapy 引擎)、Scheduler(调度器)、Down-
loader(下载器)、Spiders(爬虫)、Item Pipeline(管道),Down-
loader Middlewares(下载器中间件)等组件[10]
。
爬虫过程中需要对 URL 链接及页面进行分析,以便
提高爬虫程序工作效率,例如腾讯新闻每篇文章的链接构
成 如 下‘https://new.qq.com/cmsn/20190227/201902270099-
55.html',‘https://new.qq.com/'表 示 腾 讯 新 闻 主 页 面 ,
‘cmsn'表 示 文 章 归 属 板 块 ,‘20190227'表 示 文 章 发 布 日
期,‘2019022700995'表示文章 ID。文章内容包含在<p> </
p>标签内,文章主题包含在<h1> </h1>标签内。使用 Beau-
tifulSoup 库可以很容易地获得文章内容、标题等信息。腾
讯新闻的详细时间信息、来源信息包含在<script></script>
标签内,使用 BeautifulSoup 库无法解析到目标信息,但是
可以通过正则表达式进行匹配。例如匹配新闻时间信息
的正则表达式为 time=re.findall(b"""pubtime":(.*?),""",
source)。
图 1 <script>标签中的文章信息
2
使用 Solr 检索服务的新闻数据检索
Solr 是 Apache 基金会开源搜索引擎库 Lucene 下的子
项目,Lucene 是一种基于 Java 语言的开源信息检索库,Solr
在 Lucene 的基础上进一步扩展,包含丰富的查询语言,功
能也更加完善,擅长处理以文本为中心、读为主导、面向文
档且具有灵活模式的数据,其在数据检索速度方面远远快
使用 Scrapy 限制域名的方法使爬取下来的新闻信息
更加有针对性,例如腾讯新闻中视频模块不是目标内容,
如果也对其进行爬取会导致爬虫资源浪费,降低爬虫程序
工作效率。同时设计过滤方法,将依据提取规则提取的特
殊字符串进行替换,保证爬取的新闻文本信息不包含其它
特殊字符串,特殊字符串在写入 JSON 文件时会引起错误,
导致新闻不能被完整地写入。
于 MySQL 查询语言,并且可以实现模糊匹配[15-16]
。
2.1 Solr 排序算法
传统数据库查询对用户输入进行精确匹配,如果找不
到任何精确匹配结果,则没有返回内容。在文本类查询
中,简单利用字符串匹配,会使查询效率低下,在本文实验
1.2 增量式网络爬虫
网络新闻更新速度快、内容丰富,为了及时、准确地更
全部评论(0)