互联网电视集成平台数据爬虫软件
2018-01-25付茗
付茗
(国家新闻出版广播电影电视总局二八二台,湖南长沙,410146)
1 问题提出
由于互联网电视机顶盒系统是基于Android系统而开发的,因此可以根据Android相关的特性搭建对应的环境,对该软件进行协议分析,逆向相关的API(Application Programming Interface,应用程序编程接口),分析相关的数据,从而得到监看统计所需要的源数据。本论文以互联网电视机顶盒“芒果嗨Q H5”为例进行分析。
2 软件要求
该软件旨在取代互联网电视机顶盒,而直接对机顶盒的部分数据进行数据采集和数据分析,同时进行数据整理。
2.1 软件功能
自动采集:该软件能自动采集互联网电视机顶盒的部分数据,并分析所需要的数据。
自动解析:该软件能解析相关的数据,并提取有用数据,为统计做前提准备。
自动统计:该软件能按照监看的需求,对相关数据进行分析并统计。
自动导出:该软件能按照监看的需求,进行数据导出,并形成报表。
2.2 软件的特性
(1)易用性:该软件可采用两种方式工作:“定时后台服务模式”和“人工主动运行模式”。当采用“定时后台服务模式”时,可达到无人干预的效果,软件会定时采集、分析并输出,完全取代人工操作。当采用“人工主动模式”时,工作人员可选择在监看工作需要的时候,手动运行一下该软件即可,软件会自动进行采集、分析和输出。
(2)智能性:该软件无论采用哪种模式,其运行过程中,均无需人为干预,软件会自动进行采集、分析、统计并导出相关数据。
(3)跨平台性:该软件可运行于Windows、Linux、MacOS、Unix,甚至嵌入式设备中。此外,该软件也可作为一个模块嵌入到其他系统中。
3 软件设计
该软件主要分为以下4个模块。
(1)采集模块:采集模块主要是根据特殊数据,按相关API自动发送网络请求包,来代替互联网电视机顶盒的功能进行相应的数据获取。
(2)解析模块:解析模块主要是将API返回的数据,按照对应的格式进行解析,得到统计所需要的数据。该数据一般为程序的数据结构数据。
(3)统计模块:统计模块主要是对解析后的数据进行归纳整理,按特定的统计算法算出相关的数值,并暂存到内存中。
(4)导出模块:导出模块主要是将统计好的数据,按照特定的报表进行输出和归档。
4 软件实施
4.1 抓包环境搭建
该软件使用了抓包工具Charles。Charles 是一款网络调试代理应用(Web Debugging Proxy Application),能代理、截获、转发电脑上的http收发请求数据。该软件的抓包环境搭建步骤如下所示。
(1)在电脑上启动软件Charles,进入Charles的使用界面。进入“Proxy”(代理)菜单,点击“Proxy Settings”(代理设置)。
图1 软件Charles代理设置示意图
(2)设置Proxies(代理)的HTTP Proxy端口。
图2 HTTPPeoxy端口设置示意图
4.2 互联网电视机顶盒代理设置
打开互联网电视机顶盒的“网络设置”,在已连接的网络连接处长按遥控器OK键,出现菜单后点击“修改网络”,再勾选“高级选项”。
点击“手动”配置,添加http代理,将代理的ip设为Charles 所在电脑的ip,将代理的端口设为Charles中所设置的端口。
4.3 协议分析
EPG是英文Electronic Program Guide(电子节目指南)的缩写。它描述了提供给电视节目观众的所有节目的信息,同时它的更新或异常也能反映出内容的变化和异常,是需要重点监控的警报信息。要想统计互联网电视集成平台所传播的节目数量,则需要抓取域名“epgcdn.hifuntv.com”下的所有http包。
图3 修改网络示意图
图4 添加http代理示意图
4.3.1 获取主页目录数据API
表1 获取主页目录数据表
通过解析数据,获取所有版块的id和名称,以便后续API的请求。
xpath: meta_data_list/meta_data[id==4.0menu]/page/item_data[action!=m_open_web
&&action!=m_open_search_page]/arg_list/a/[k==media_asset_id]/v
xpath: meta_data_list/meta_data[id==4.0menu]/page/item_data[action!=m_open_web
&&action!=m_open_search_page]/arg_list/a/[k==name]/v
通过分析这两个xpath,可以分别得到版块的id以及版块的名字。
原始数据示例:
4.3.2 获取版块的主页数据API
表2 获取版块的主页数据表
此API的作用是获取每个版块的主页数据,返回json类型的数据。
API参数中的“MediaAssetId”,是版块的id,主要是用来控制该API取哪个版块。如表2中所示,参数是“movie”,则表示是电影版块,该值来源于获取主页目录数据API返回的数据。
该示例中的“l”节点,描述的是总体数据,即“电影”版块的基本数据,如下所示:
①media_asset_id:版块的id
②media_asset_name:版块的名称
③media_asset_count:版块的资源个数
该示例中的“il”节点,描述的是“电影”版块下的二级子版块数据,该示例只展示了其中的一条二级子版块“最新强档”,其它二级子版块类似。
①name:“二级子版块”名称
②arg_list/total_video_rows:该“二级子版块”中的节目个数
③arg_list/total_special_rows:该“二级子版块”下的“三级子版块”的个数
④arg_list/special_list/il:该“三级子版块”的信息,其中id表示该版块的id,name表示该版块的名称(只有当arg_list/total_special_rows的值不为0时,才有此节点)。
4.3.3 获取三级版块的主页数据API
此API的作用是获取每个三级子版块的主页数据,返回json类型的数据。
API参数中的“SpecialId”,是三级子版块的 id,主要是用来控制该API取哪个三级子版块。如表3中所示,参数是SpecialId,该值来源于接口二API返回的数据,其具体路径为:arg_list/special_list/il[@id]。
图5 程序关键代码流程图
表3 获取三级版块的主页数据表
4.4 程序算法设计
4.5 程序关键代码流程图
该软件可采用简单的python[3]脚本去爬取监看所需的数据。具体程序关键代码流程图如图5所示。
4.6 系统的定时任务模式
例如,在linux中,可以使用crontab设置定时任务,达到定时执行的目的。
crontab的基本用法如下所示:
5 报表导出
该软件经过数据统计,可将统计结果形成报表导出。该报表统计了每一个版块的节目个数、所占百分比以及总节目数,并按照节目数从多到少对各版块进行了排序。(如表4所示)
表4 和丰互联网电视集成平台传播节目数量统计表
6 软件扩展
该软件可进行进一步的改进,让导出的报表更丰富。或者将统计好的数据,发送给web服务器,让web服务器以web的方式呈现给数据分析人员。
7 总结
前文详细阐述了该软件的抓包环境搭建、协议分析、程序设计、程序实现和报表导出。通过这个软件,可以让开发人员实现更多数据的统计和更丰富的报表功能。
[1][美]亨特,[译]吴文国.XML入门经典[M].清华大学出版社.2009-2:2.
[2][美]Lindsay Bassett,[译]魏嘉汛.JSON必知必会[M].人民邮电出版社.2016-5:17.
[3][美]埃里克.马瑟斯,[译]袁国忠.Python编程:从入门到实践[M].人民邮电出版社. 2016-7-1:15.