文章来源于湖南设计
湖南省建筑设计院有限公司官微
随着国土空间规划智慧赋能与技术转型的需要,在对城市群网络空间结构特征进行分析时,往往需要基于“流空间”的视角开展铁路客运班次、汽车客运班次等数据深挖掘,以提高规划决策的科学性。那么问题来了,数据如何高效获取?
本文以长株潭“3+5”城市群8个城市连续一周内的车次信息为例(需统计两两城市共计8*7=56个城市对之间的铁路车次、汽车车次信息,则一周总共需要8*7*2*7=784条数据信息),数据来源于携程网(https://www.ctrip.com/)。
传统的方法:
人肉搜索、耗时耗力、效率低、准确度低 。人工搜索并记录,前提是网速好,眼神好使、能像机器一样不眠不休,输入查询参数后人工计数(1,2,3…)并记录查询结果。保守估计(就算数学够好、一目十行、还不出错)最快30秒一个记录,也需要满满一天8个小时,显然不符合实际、效率过低、准确率无法保证。
我们的方法:
自动抓取、省时省力、效率高、数据正确率100% 。基于python语言,编写采集程序,通过模拟网页、自动解析获取研究范围内的数据,并且程序可复制(换一个研究区域,只需更改少许参数,程序依然可以运行),大大提高了效率。让程序跑一会儿,即可获得我们的研究数据。
爬虫利器
网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。
数据采集主要流程:“获取网页地址”—“分析网页内容”—“准备数据文件”—“编写采集程序”—“抓取结果数据”
步骤一:获取网页地址
打开携程网(https://www.ctrip.com/),点击火车标签进入火车查询网址。在网页左侧输入出发城市与到达城市,此次出发城市选择长沙,到达城市选择衡阳,时间为2020年10月15日
点击开始搜索进入火车车次信息网址
数据网址为:
https://trains.ctrip.com/trainBooking/search?ticketType=0&fromCn=%25E9%2595%25BF%25E6%25B2%2599&toCn=%25E8%25A1%25A1%25E9%2598%25B3&day=2020-10-15
%25E9%2595%25BF%25E6%25B2%2599
表示长沙
%25E8%25A1%25A1%25E9%2598%25B3
表示衡阳
网址可替换为:
https://trains.ctrip.com/trainBooking/search?ticketType=0&fromCn=长沙&toCn=衡阳&day=2020-10-15
通过观察网站可以发现,汽车客运车次查询结果和铁路客运车次的查询结果可以由固定字符串+出发城市+到达城市+日期构成。
步骤二:分析网页内容
点击F12,打开网页开发者模式,可以查询相应的信息。网页中显示68车次表示2020年10月15日当天从长沙到衡阳的火车直达车次共计68个,包括G、K、T、Z车次信息。
具体的车次信息、出发时间、达到时间、票价等信息则在div中。trainname="G541"则是不同的车次信息。通过查找所有的div即可获取全部的车系信息。
步骤三:准备数据文件
文件stations.txt。用来存放研究范围内的城市列表。
文件days.txt。用来存放需要抓取的日期。
文件ctripSpider.py。抓取数据的python程序。
文件result.txt。用来存放抓取的结果。
步骤四:编写采集程序
首先读取通用数据文件stations.txt和days.txt,获得研究范围内的城市列表和日期列表。
读取通用文件列表
通过城市列表信息和日期列表信息,分别构建两两城市对的火车客运车次网页地址信息以及汽车客运车次网页地址信息。
读取通用文件列表
火车客运车次结果可以在网页上直接解析(可以理解为静态网页),属于比较常规也是最简单的网页解析。
火车车次解析网页
火车车次解析函数
汽车客运车次结果无法在网页上直接解析(可以理解为动态网页),需要多次下拉到网页底部动态加载相关数据。本文借助selenium自动化工具,通过浏览器驱动插件webdriver.exe模拟网页登录,并自动下拉到底部来获取全部数据。
汽车车次解析网页
汽车车次解析函数
步骤五:抓取结果数据
程序编写完毕,启动程序,我们看看抓取效果,包含出发城市、到达城市、火车车次、汽车车次、日期的数据信息成功写入文件,同时随机进行了数据检验,准确率高,完全满足我们的需要。
数据抓取结果示意图
数据应用
以永州市为例,依据抓取的铁路车次、客运车次信息,基于“流空间”视角,测度城市间客流联系强度情况。
永州市与湘粤桂其他城市直达铁路客运班次数(湖南省部分数据)
从铁路客运车次看,永州市铁路联系与衡阳、长沙、南宁、柳州等城市联系度高,沿湘桂铁路形成“长沙-永州-南宁”方向的偏“一”字形走廊,省内与广西两翼轴线格局,永州市与省内其他城市的联系较弱,同时缺失对粤联系廊道。
基于客运班次的铁路客流联系强度图
汽车车次分析
永州市与省内其他城市直达汽车客运班次数(湖南省部分数据)
从公路客运车次看,公路客运联系省内联系强、省外联系弱;省内主要联系衡阳、邵阳,省外主要联系广州市、桂林市,永州市与省内各市联系要明显强于与粤、桂两省的联系,且与广东的联系要强于与广西的联系。
基于客运班次的公路客流联系强度图
总 结
本文简要介绍了利用网络爬虫技术从携程网采集车次信息的主要过程。网络爬虫的目的是为了解决我们日常工作中获取数据存在的技术难点、痛点,提高我们的工作效率,存在很多不足之处还望大家进行批评与指正。HD大数据中心期待与您合作、交流和学习。
温馨提示:python虽好,但禁止非法获取个人隐私、知识产权、商业机密等敏感信息,使用过程中请遵守国家互联网信息办公室发布的《数据安全管理办法》。