基于PythonScrapy技术的新闻线索汇聚实现
2020-02-21施金龙
摘要:本文探讨利用Py thon技术从HTML网页信息中提取需要的、有价值的数据和链接。本文采用的Scrapy网络爬虫框架,从海量数据中获取所需要的新闻线索汇聚给媒体编辑记者。
关键词:Python; Scrapy框架;大数据;新闻线索汇聚
在目前全媒体时代下,面对大量新涌现出来的媒介,全通过媒体数据采集、智能化数据分析提高新闻工作者的效率。大数据的集聚发展,用户通过互联网获取信息已经成为日常习惯。当移动端的快速发展,用户可以随时访问互联网获取相关信息,多样化的信息在网络上获取和生成,信息的拷贝转发也在同时进行,使得数据量在成倍的不断增长。这些数据量多并且冗余,要从这些数据中能够快速精准的获取相关的信息,同时能够尽可能全的获取相应的新闻信息,将这些新闻汇聚是新闻工作者研究的重要前沿课题。基于Python的Scrapy框架开发的新闻汇聚系统,能够将数据快速进行全面的汇聚。系统根据指定的主网、数据类型等一些关键字,收集相应的新闻数据,然后将这些数据经过预处理筛选和数据分类。实时快速的获取新闻数据以及精准的数据内容,能够提高新闻工作者的工作效率。
1
Python Scrapy简介
1.1 Python Scrapy框架
Scrapy是在Python语言基础上实现的一套应用框架,主要用途是爬取网站数据并且提取数据,其用途非常广泛。Scrapy是事件驱动的网络框架,当前Scrapy使用非常广泛,用于各行各业,可以对网站的数据进行挖掘,并且能够监测数据,整体框架大致分为以下:
(1)引擎:该功能主要是承担控制系统中各个组件的数据流,监测相应的动作,从而触发相应的事件;
(2)调度器:该功能主要是接受上面引擎发来的请求,将这些请求放入在已有的队列中里,当引擎再一次的请求触发数据返回。这个队列是自动对URL进行智能化排序,自动分配下次需抓取的网站,并且能够剔除队列中重复的网站;
(3)下载器:该功能主要是用于或网页中的内容,获取完后将内容传递给EGINE,该下载器是在异步模型上的,能够处理并发的数据请求;
(4)爬虫:该功能是代码开发自定义的类,主要用于解析responses,同时能够对items进行提取工作,还能发送新的请求;
(5)项目管道:该功能是在items提取后,对其进行数据处理,其工作主要有数据清理、数据验证、持久化等等一系列操作,下载器的中间件存在于引擎和下载器的中间层,其目的是处理从EGINE传到DOWLOADER的请求request处理,以及从DOWNLOADER传到EGrNE的响应response请求处理;
(6)爬虫中间件:位于EGINE和SPIDERS之间,主要工作是处理SPIDERS的输入(即responses)和输出(即requests)。
1.2 Scrapy 工作原理
Scrapy中的数据流由引擎控制,其操作流程按如下进行:
(1)爬虫主程序工作是将需要下载的页面请求requests传递给引擎,当引擎获取到该请求是,同时转发给Scrapy调度器;
(2)调度的工作是进行优先级排序以及去重处理,调度再从排序和优化好的队列中提取一个请求,再通过引擎传递到下载器;
(3)下载器下载页面,将生成的响应通过下载器中间件发送到引擎;
(4)爬虫主程序执行数据解析,程序的解析函数返回两种类型的数据,一种数据时是items,一种数据是链接,这些requests按上面步骤交给调度器;items交给数据管道;
1.3 基于PythonScrapy爬蟲方法
PythonScrapy爬虫主流的方法有:
(1)构建 IP代理池方法;爬虫软件需要极短的时间内产生大量的访问请求操作,当爬虫的IP地址一直固定使用,很有可能会被某些网站禁用,这时使用IP代理方法解决被禁用问题。
(2)构建cookies池方法:在实际应用中有很多网站是需要登录才能进行相应的访问操作,爬虫软件需要产生cookies信息并且访问时能够携带。为防止被认定为异常账户,需要对账号进行随机的处理,因为使用同一的cookies信息很有可能导致账户异常。所以爬虫软件需要构建本地cookies池,在执行爬虫操作是,能够随机切换cookies信息。
(3)突破登陆限制方法:有些网站登陆更加复杂,不仅仅是简单点的账户密码,还会添加验证码操作才能执行访问网页操作,主要步骤如下:第一步是分析其登陆页面源码,提取其xsrf值,因为登陆国产中需要用到这个值,同时还有验证码校验,提取正确验证码才能进行下一步的访问;第二步用PythonScrapy框架编写爬虫软件,通过spiders文件中的parse方法,通过该方法提取页面源码里的xsrf值,再将xsrf值写入代码的post方法;第三步针对部分页面的验证码,通过手动输入或者图像识别的方法。采用手动输入方法,是事先获取到验证码图片,然后用PIL库中的Image类里面的show方法函数,提取网页的图片,通过人为手动输入进去。采用图像自动识别方法,是直接接入系统平台使用图像算法进行识别,系统自动输入验证码;第四步得到网页的cookies信息对其进行数据提取操作。
(4) Selenium处理动态网页方法:随着爬虫软件框架的不断进步和发展,出现了一些网站页面已经开始采用动态页面,必须对其页面进行相应的操作,通过动态得出数据。首先通过分析网页发来的Ajax请求,利用爬虫软件直接请求其相应的接口获取有效数据,这种分析方法比较复杂,还有比较简单的方式是Selenium。
2 基于Scrapy架构的新闻汇聚平台设计
2.1 系统平台整体架构
系统平台系统采用BlS架构,系统主要分为:前端、后端、数据库。
如图1所示,新闻平台系统由新闻(信息)采集、数据存取、内容展示和管理四大部分组成:
(1)新闻(信息)采集模块负责抓取主流权威媒体新闻、本地职能部门权威发布信息、所辖县、市政府权威发布信息和具有参考价值的其他相关网站信息。当抓取网页数据时,需要从访问到的HTML源码中提取数据。
(2)数据库负责存储采集的素材、各网站爬虫配置参数、单位组织结构、用户信息和系统必要的保护和备份等信息。
(3)内容展示模块由前端展示页面和后台管理组成,包括登录页面、管理页面、展示页面、错误提示页面组成。
(4)管理使用Web应用程序框架。新闻工作者用的WEB前端页面可以输入根据自定义的关键字来搜索信息,定制基于关键词爬虫的界面。用户可以根据网络新闻主题跟踪功能的主题词云推荐的主题词,自行添加需要定制的主题及其关键词。
2.2 新闻汇聚平台各个模块设计
2.2.1 Web前端设计
新闻汇聚平台前端是在Bootstrap框架上拓展开发的,该Web使用html语言来编写新闻汇聚网页内容,通过JavaScript脚本语言定义网页行为函数,新闻工作者可以在浏览器上执行相应的编辑操作,执行后给浏览器,这时浏览器与后端服务器建立TCP连接,并且使用HTTP进行数据通信和交互,将新闻工作者在浏览器上执行的操作和输入提交内容通过http传送到后端服务器。新闻工作者无需关心数据时如何提交和获取,只需简单的输入操作,并获得页面展示。
Web前端主要有用户登录、任务新建、任务管理、数据查询组成
(1)用户登录功能:该功能是判别该用户是否合法,对数据内容起到保护作用,用户需输入正确的用户名、密码和验证码才能进行主功能的操作;
(2)任务新建功能;该功能是根据用户操作新建相应的子任务,同时根据自动识别该任务的属性归类。新建所需爬取的相应字段,包括该字段的名称、字段XPath表达式以及字段正则表达式;
(3)任务管理:该功能是将所有任务进行归类和统一处理,新闻工作可以对任务进行增查删改等操作,也可以修改每个任务的属性,还可修改任务间的关系;
(4)数据查询功能:新闻工作者可以根据需求输入相应的关键字或者多个关键字,得到一系列相关的URL展示。
2.2.2 系统数据库设计
在平台应用系统中,数据库设计的好坏直接影响应用软件是运行效率,设计有效的数据库表,能够极大的帮助平台应用系统软件的有效执行,在满足系统需求的基础上设计高效的数据表。在本系统中,数据库使用到的是MySql。本系统数据库的表如下:
(1)用户信息数据表:表的字段主要有用户名、邮箱、手机号、改用户的创建时间以及修改时间等等;
(2)任务信息数据表:表的字段主要有任务名、任务英文缩写、任务的目标网址、关键字、任务的创建时间以及任务的更新时间,表中的网址关键字主要使用在任务在执行时url的爬取筛选处理,爬取得到有用的url并且过滤了大量的无效url;
(3)字段数据表:表的字段主要有字段名、字段的英文缩写、正则表达式项、XPath表达式项、字段的创建时间以及更新时间,XPath表达式字段主要用于定位网页的数据位置,其中正则表达式是依据实际需求用于解析数据;
(4)任务树数据表:表的字段主要有节点名称、父节点名称、任务数的创建时间以及任务树的更新时间,在这当中根节点即代表用户名,其中剩余非叶子节点的父节点代表任务类型,这里的叶子节点就是实际单采集任务。
2.2.3 后台系统设计
本子系统在开发过程中使用了基于Python的Request庫以及lxml库,其中Re quest库是用于系统和所需Web站点的HTTP协议通信,所用的lxml库对网页内容进行解析,最核心的是采用Python Scrapy爬虫框架。
本系统主要功能分为两个部分网页解析和数据处理:
(1)网页解析设计:Scrapy提取数据内部有一套框架运行,即选择器,选择器使用所需的正则表达式或者Xpath匹配HTML文件中的相应内容。其中所使用的XPath和正则表达式是通过任务新建的子系统中设置;其中Scrapy的所有数据处理环节交给Scrapy的引擎进行控制处理;
(2)数据处理设计:每次完成任务后,数据处理将得到的数据进行初步的筛选和剔除,同时把数据与任务种类进行关联处理,以便后续数据查询操作。
3 结论
大数据快速发展的环境下,针对新闻汇聚领域相关的网络应用需求,提出了基于PythonScrapy的网络新闻数据汇聚实现,并将大数据的优势进行充分的利益,有效应对互联网竞争的大潮。本系统实现了通过关键字或者组合关键字,实时、聚集的获取相关新闻数据,在建设过程中,解决对新闻线索的汇聚和聚类方案,以及如何推广也是至关重要的。
参考文献
[1]左卫刚,基于Python的新闻聚合系统网络爬虫研究[J].长春师范大学学报,2018,37 (12):29-33.
[2]王婷婷.新闻大数据的应用与展望[J].广播电视信息,201 8,315:25-26.
[3]张维楚.互联网热点搜索与追踪的研究和实现[J].广播与电视技术2015,42 (z1):2 7-29.
[4]杨君.基于Scrapy技术的数据采集系统的设计与实现[J].计算机技术与发展201 8,28 (10):177-181.
[5]白剑飞,基于层次主题模型的网络新闻汇聚[c].浙江大学,201 5.
[6]雷鑫.网络舆情引导平台系统及其关键技术的研究与实现[c].电子科技大学,2016.
作者简介
施金龙(1972-),男,大学本科学历。高级工程师。研究方向为广播电视采编系统网络数据应用和媒体融合平台建设运营。