python爬虫_抓取瓦片图片信息并将其拼接_以mapbar为例(适用交通工程类专业)
爬虫是抓取数据的高效率方法,本次介绍爬取瓦片图片并进行拼接:
瓦片信息就是,类似于拼图,一块块小的拼图本身所含的信息并不多,将所有的拼图碎片全部抓取之后,再将其拼接成完成的拼图,才能运用其中的数据。
瓦片图片主要存在在地图(包含道路交通等等以不同图层layer的方式展现),每块瓦片碎片的大小、类别都是一样的,只是所代表的位置不同罢了。也因此每块瓦片碎片都有它自己的标号来标定当前瓦片的位置(一般是以某种方向的坐标系为准)。
所以,首先解析瓦片标号并构建瓦片所在的坐标系,之后按照一定的范围依次爬取,最后进行拼接就可以得到想要的数据了。流程大概如下:
这次就以mapbar为例爬取道路交通拥堵情况
绿色、黄色、红色的线就是北京市的道路交通拥堵情况了,目标是尽可能详细地抓出来然后拼接。
第一步,瓦片标号解析
打开开发者工具F12,进一步放大地图会弹出很多.png格式的图,前面是一连串序号。在network的preview里就能看到图的样子,明显就是道路交通拥堵的图层瓦片。
这里就直接解析这张图的序列号:o b 16bd l 9bd
这是一个16位进制编码的标号,o为开头,b代表大小层级,16bd是x轴,l为xy轴分隔,9bd是y轴。顺序从左到右,从下到上,典型的xy坐标系啊。
因此大概找了北京等其他城市的大致范围,并将其存到了表格方便依次读取,表格大概长这样:
df1=pd.read_excel('pic.xlsx',sheet_name='cityinf',header=0,index=False)
data_citypic=df1.values
citynum=data_citypic.shape[0] #city num=42
然后是对坐标解析:
'''xy坐标信息'''
def city_loc(number):
n=number #表格里的序号,代表城市
city_inf=data_citypic[n,1:4] #读取需要的信息
cityname=city_inf[0]
xy1_16=city_inf[1]
xy2_16=city_inf[2] #16位进制坐标
x1_16=xy1_16[2:6