基于 ASP.NET 网络爬虫技术的公路货运价格数据采集方法研究
2018-12-27宋小满王怀相
宋小满,黄 鑫,王怀相
(1.中国铁道科学研究院集团有限公司 运输及经济研究所,北京 100081;2.中国铁路总公司 货运部,北京 100844)
近年来,随着铁路货运价格市场化步伐的加快,铁路运输企业非常重视对竞争对手——公路货运价格数据的采集与分析,而通过人工去获取数据需要花费大量的人力、财力、时间,容易出现数据采集成本高、应用不及时等问题,难以应对快速变化的市场环境。随着互联网的快速发展,以及企业网站的逐步建立和完善,网络上大量与公路货运价格有关的信息,可以运用科学的计算机技术去实现信息的采集,以有效地节省人力、物力,提高数据的采集效率,降低数据采集成本。同时,铁路价格管理人员也可以将更多的精力用于分析数据、利用数据进行决策,从而提高企业管理人员的管理决策水平[1]。
1 公路货运价格信息来源
目前,政府机构、行业协会、公路货运企业在网络上公布了大量的公路货运价格信息[2],主要的公路货运价格信息如下。
(1)政府机构的网络公开信息。国家发展和改革委员会和交通运输部分别在其官网上公布了系列的公路货运价格信息。其中,国家发展和改革委员会在“36个大中城市服务收费平均价格表”[3]中公布了“省际、定期定线、整车”和“省内、定区不定线、零担”的公路货运价格;交通运输部在“全国道路货运价格与成本监测信息”[4]中公布了公路普货整车、集装箱运价指数。
(2)中国采购与物流联合会的网络公开信息。公开信息显示,中国采购与物流联合会从2013年1月开始每周发布全国主要节点城市间的9.6 m整车、13.5 m整车、17.5 m整车、零担重货、零担轻货的公路货运价格数据[5]。主要节点城市名称如表1所示。
表1 主要节点城市名称Tab.1 Name of main city
(3)内蒙古煤炭交易市场的公开信息。公开信息显示,内蒙古煤炭交易市场从2014年1月每周发布煤炭短途、中途、长途“点到点”的公路货运价格[6]。短途运输主要是监测鄂尔多斯地区矿区到火车站之间的公路运输价格;中途运输主要是矿区至省内电厂、铝厂等煤炭消耗地的运输价格;长途运输主要是通过公路运往其他省市的运输价格。
(4)其他公路货运价格信息。德邦物流在其官网上公布了快递、零担不同运输产品的报价,在阿里巴巴物流服务平台上可以查询主要线路不同物流企业货运(大件)、快递(小件)、整车的公路货运报价,也可以在其他物流企业如佳吉快运的企业网站上查询不同起讫点不同产品的公路货运报价。
2 公路货运价格网络数据采集的实现
2.1 网络数据的采集技术
网络数据的采集技术主要有网络爬虫(Web Spider)和基于API二次开发包的方式[7]。网络爬虫技术是一个实现自动提取网页信息的程序,一般的实现过程为:从一个初始的URL集出发,将这些URL全部放入到一个有序的待采集队列里。而采集器从这个队列里按顺序取出URL,通过Web上的协议,获取URL所指向的页面,然后从这些已获取的页面中提取出新的URL,并将其继续放入到待采集队列里,然后重复上面的过程,直到采集器根据自己的策略停止采集[8]。基于API二次开发包的方式,主要包括目前主流的网络地图服务商,如百度、谷歌、高德等。通过调用地图服务商提供的二次开发API相关函数,获取其数据,并进行保存[9]。
2.2 网络数据采集需求及实现流程
(1)采集需求。在公开的公路货运价格信息中,中国采购与物流联合会公开的信息量大,公开的信息较多。为此,通过开发软件对中国采购与物流联合会公开公路运价信息,包括起点、讫点、运输方式(9.6 m整车、13.5 m整车、17.5 m整车、零担重货、零担轻货)、发布日期、运输价格进行采集,存储到本地文件中,并对采集的数据进行格式转换和图表展示。
(2)实现流程。需要实现的功能包括:数据采集、格式转换和图表展示。通过开发软件实现上述功能,网络数据采集的基本流程如图1所示。首先,通过开发的程序对页面中的指定数据进行采集;其次,将采集的数据存到数据中心;最后,利用相关控件对采集的数据进行格式转换和图表展示。
为实现上述采集需求,采用ASP.NET Framework 4.0作为开发环境,使用visual C#作为程序语言进行软件开发。同时,为了实现数据转换、图表展示的功能,还需要利用相关控件,包括运用第三方控件NPOI组件进行格式转换,分别运用DataGridView控件、Chart控件进行表格展示和图形展示。
2.3 主要模块和关键技术
软件采用模块化的设计结构,根据各模块完成的任务将其划分为参数设置模块、参数过滤模块、数据采集模块、数据分析模块、数据存储模块、数据导出模块和数据展示模块,其中,前5个模块主要实现数据采集、存储的功能。网络数据采集主要功能模块及关键技术如图2所示。
图1 网络数据采集的基本流程Fig.1 Basic process of network data acquisition
图2 网络数据采集主要功能模块及关键技术Fig.2 Main function modules and key technologies of network data acquisition
2.4 主要功能模块的任务和实现
(1)参数设置模块。参数设置模块主要是收集中国采购与物流联合会发布的公路运价有关信息,包括城市名称、运输方式信息,运用程序算法生成运输路线中的起点和讫点,将收集的运输方式信息和生成的运输路线信息存储到指定的数据表中。
(2)参数过滤模块。参数过滤模块是将待抓取的运输路线参数存放在队列中,根据条件读取数据库中未采集的运输路线信息,并存放到运输路线参数队列,再根据需要读取参数队列中的运输路线信息,数据采集对运输路线信息使用完成后会及时弹出该条运输路线信息出列并同时更新数据库中的该条运输路线信息;然后会从数据库中获取新的运输路线参数,继续放入运输路线队列;运输路线参数队列中初始存放指定的运输路线参数。参数过滤模块在读取运输路线信息的同时也读取了运输方式并存放到其他队列中。参数过滤模块是软件运行中一项关键的步骤,由于进行网页抓取主要消耗时间的地方在于网络交互中,因而需要采取一定的手段避免重复的网络交互。
(3)数据采集模块。数据采集采用多线程定时器的方式实现页面数据的自动采集工作。具体实现为:当启动数据采集模块的同时启动多线程定时器,软件根据需求启动WebBrowser控件进行指定的页面浏览,多线程定时器根据用户设置的参数向页面提交参数过滤模块队列中的运输路线和运输方式,用于启动系统,当系统正常运行后读取存放在城市运输路线参数队列中的参数和运输方式队列中的参数,直到所有的运输路线队列和运输方式队列为空时程序终止。软件对同一条运输路线的不同运输方式分别采集。软件开发过程中,为提高页面采集效率,根据运输路线参数的相关度、权重等特点采取排序算法,对待采集页面中的运输路线参数进行最优处理。
(4)数据分析模块。数据分析模块是对数据采集模块采集到的大量数据进行分析,提取有用信息后,对数据加以分析的过程。该模块采用ASP.NET框架中正则表达式分析类库进行数据分析和挖掘,再利用C#正则表达式类库中的Match类和MatchCollection类进行匹配。
(5)数据存储模块。数据存储模块是将数据采集和分析完成的数据储存到本地JSON文件格式的过程,在文件存储的过程中使用了File类方法。
(6)数据导出模块。数据导出模块将存储在本地的数据通过相关算法把数据导出成Excel文件,存储到本地Excel文件中。其中需要将本地的JSON格式文件读取到服务器内存中并进行数据处理,将JSON数据转换成DataTable数据格式,然后使用NOPI类库将数据导出。
(7)数据展示模块。数据展示模块是通过表格、图表的方式进行数据展示。表格展示使用了DataGridView 控件,通过程序算法将DataTable数据源进行数据处理,达到指定的表现形式。图表展示方式使用Chart控件。
通过开发软件实现了对指定数据的采集、格式转换、图表展示的功能,最终形成的数据表格展示界面和数据图形展示界面分别如图3、图4所示。
3 结束语
随着互联网的逐步发展以及公路货运规模的不断扩大,网络中的公路货运价格信息在逐步增加,运用传统的数据采集方法难以满足日常管理中快速响应的需要,而网络采集技术可以很好地克服传统采集方法的缺点,快速获取批量数据,提高效率。通过运用ASP.NET技术可以实现对指定网页的指定数据进行抓取,并根据网站新发布的数据进行更新。软件拥有很好的实用性、较好的稳定性和较优的性能,可以为后续的分析研究提供基础数据。在使用过程中,收集了160万余条的公路货运价格信息数据,表明该技术能很好地满足数据采集工作。运用的采集方法也可运用于其他网站数据的采集,为其他数据的批量获取提供参考。
图3 数据表格展示界面Fig.3 Data form display interface
图4 数据图形展示界面Fig.4 Data graphic display interface