抓取一个连续的网页_技术分享:带你认识数据抓取利器,对数据采集工作say easy!...

文章来源于湖南设计

fd881d2625a58bc962ce6cc063cd19dc.png

湖南省建筑设计院有限公司官微

随着国土空间规划智慧赋能与技术转型的需要,在对城市群网络空间结构特征进行分析时,往往需要基于“流空间”的视角开展铁路客运班次、汽车客运班次等数据深挖掘,以提高规划决策的科学性。那么问题来了,数据如何高效获取?

本文以长株潭“3+5”城市群8个城市连续一周内的车次信息为例(需统计两两城市共计8*7=56个城市对之间的铁路车次、汽车车次信息,则一周总共需要8*7*2*7=784条数据信息),数据来源于携程网(https://www.ctrip.com/)。

493e0a8fd6382bf425c68b3b642e3fb5.png

 传统的方法:

人肉搜索、耗时耗力、效率低、准确度低 。人工搜索并记录,前提是网速好,眼神好使、能像机器一样不眠不休,输入查询参数后人工计数(1,2,3…)并记录查询结果。保守估计(就算数学够好、一目十行、还不出错)最快30秒一个记录,也需要满满一天8个小时,显然不符合实际、效率过低、准确率无法保证。

 我们的方法:

自动抓取、省时省力、效率高、数据正确率100% 。基于python语言,编写采集程序,通过模拟网页、自动解析获取研究范围内的数据,并且程序可复制(换一个研究区域,只需更改少许参数,程序依然可以运行),大大提高了效率。让程序跑一会儿,即可获得我们的研究数据。

爬虫利器

网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。

 数据采集主要流程:“获取网页地址”—“分析网页内容”—“准备数据文件”—“编写采集程序”—“抓取结果数据”

 步骤一:获取网页地址 

打开携程网(https://www.ctrip.com/),点击火车标签进入火车查询网址。在网页左侧输入出发城市与到达城市,此次出发城市选择长沙,到达城市选择衡阳,时间为2020年10月15日

53b95b976fd11d50f7f1363e80992483.png

点击开始搜索进入火车车次信息网址

1cd5023bbff3d5a079a08b21d12ec9ba.png

数据网址为:

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车次信息。

4491758fa630045799da7b3417fc644f.png具体的车次信息、出发时间、达到时间、票价等信息则在div中。trainname="G541"则是不同的车次信息。通过查找所有的div即可获取全部的车系信息。

964307a5e29ea515b4b63786771bf479.png

72a6e6a2f4d0bba68d3bcfdcd8f57b76.png

9d3e09d44927b95df3fd011253089faf.png

 步骤三:准备数据文件 

文件stations.txt。用来存放研究范围内的城市列表。

文件days.txt。用来存放需要抓取的日期。

文件ctripSpider.py。抓取数据的python程序。

文件result.txt。用来存放抓取的结果。

2b62ba769708cf1525ac4aa24170b751.png

 步骤四:编写采集程序 

首先读取通用数据文件stations.txt和days.txt,获得研究范围内的城市列表和日期列表。

e712528e4b50d7727f53fe0e375dde47.png

读取通用文件列表

通过城市列表信息和日期列表信息,分别构建两两城市对的火车客运车次网页地址信息以及汽车客运车次网页地址信息。

3ec6b8365c3692885ed253f7e586ac1a.png

读取通用文件列表

火车客运车次结果可以在网页上直接解析(可以理解为静态网页),属于比较常规也是最简单的网页解析。9bb2170e66082179070603c14c6ca90a.png

火车车次解析网页

1bf788c3be55ca32b75ccc1cbd8b923f.png

火车车次解析函数

汽车客运车次结果无法在网页上直接解析(可以理解为动态网页),需要多次下拉到网页底部动态加载相关数据。本文借助selenium自动化工具,通过浏览器驱动插件webdriver.exe模拟网页登录,并自动下拉到底部来获取全部数据。9e18b977dc7cd6c7927fd6423197f285.png

汽车车次解析网页

a8e21adff62a62dd7fffb162947b04d1.png

汽车车次解析函数

 步骤五:抓取结果数据 

程序编写完毕,启动程序,我们看看抓取效果,包含出发城市、到达城市、火车车次、汽车车次、日期的数据信息成功写入文件,同时随机进行了数据检验,准确率高,完全满足我们的需要。

0abfc0ec0695ec886c86ca5d83bd4fb3.png

数据抓取结果示意图

数据应用

以永州市为例,依据抓取的铁路车次、客运车次信息,基于“流空间”视角,测度城市间客流联系强度情况。

9df15fa863af75ab717c5b5b240a9dbc.png

永州市与湘粤桂其他城市直达铁路客运班次数(湖南省部分数据)

从铁路客运车次看,永州市铁路联系与衡阳、长沙、南宁、柳州等城市联系度高,沿湘桂铁路形成“长沙-永州-南宁”方向的偏“一”字形走廊,省内与广西两翼轴线格局,永州市与省内其他城市的联系较弱,同时缺失对粤联系廊道。a68fcefa966717009f8cae2d610b03c5.png

基于客运班次的铁路客流联系强度图

汽车车次分析

b86316dd45a8d9959825b47a200b8e4a.png

永州市与省内其他城市直达汽车客运班次数(湖南省部分数据)

从公路客运车次看,公路客运联系省内联系强、省外联系弱;省内主要联系衡阳、邵阳,省外主要联系广州市、桂林市,永州市与省内各市联系要明显强于与粤、桂两省的联系,且与广东的联系要强于与广西的联系。

725c7c418a840fa0b16ad7bfd7458305.png

基于客运班次的公路客流联系强度图

 总 结 

本文简要介绍了利用网络爬虫技术从携程网采集车次信息的主要过程。网络爬虫的目的是为了解决我们日常工作中获取数据存在的技术难点、痛点,提高我们的工作效率,存在很多不足之处还望大家进行批评与指正。HD大数据中心期待与您合作、交流和学习。

温馨提示:python虽好,但禁止非法获取个人隐私、知识产权、商业机密等敏感信息,使用过程中请遵守国家互联网信息办公室发布的《数据安全管理办法》。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值