python爬取公交车站数据_利用Python爬取全国250m精度的人口数据、房价数据和公交站(线路)等数据(一)...

我的第一篇博客写的就是爬取人口数据,精度是1000m,后来有朋友和我说有个网站开放过250m精度的人口分布数据,而且人口分布有年龄分段等属性。

所以我决定试一下能不能爬到这个网站的人口信息,首先得注册登录到达创建地图的界面,可以看到如下网页,人口数据可以按照行政区来显示:

如果放大的话可以看到精确到250m格网的人口数据,不同的放大级别的爬取方法不一样,这里我就主要分析下如何爬取格网的数据。

其实去年该网站开放过api,可以通过api获取人口数据 (结果图如下,比1000m精度的更加精细)

但是现在接口已经关闭,也没办法再去申请key。而且好像通过以前的key还可以抓数据,但是返回数据的大小有限制,这里我们通过自行抓包分析如何爬取人口数据。

我们查看Header, 即可知道url和参数

网页分析好了之后写代码就容易了,下面代码我只是获取的8000m精度的格网,范围是南京市,代码仅仅用来测试。而且一开始我是获取成表格数据,经纬度和人口数存成excel。

0-11是格网图形坐标,12是人口数

但是后来一想这么做费力不讨好,因为features就是一种geojson格式的数据,其实可以直接保存成json格式数据,然后直接转成shp,里面的属性信息也全部保存,岂不美哉!

response = requests.request('POST', url, data=values)

print(response.url)

datas=response.text

dictdatas=json.loads(datas)#dumps是将dict转化成str格式,loads是将str转化成dict格式

result=dictdatas['result']

features=result['features']

time.sleep(0.001)

c1 = pd.DataFrame(features)

c1.to_json('GeoqPop.json')

以上其实抓的都是一定范围内的数据,比如那个extent,就是南京市的范围,配合着的是8000m精度的格网。

"extent":"[117.73498535156251,31.03834440994876,119.92675781250001,32.722136436046284]",若想获得全国的格网,则需要按照extent和radius的规律写个循环即可,这里不再赘述(下篇文章详细讲解)。另外下图是随便选择经纬度范围获取的格网中心点集合(上海地区):

定义成北京 坐标系之后,我查看了下格网中心点之间距离428m,根本不是250m,求解释。

当然这个网站还有其他很棒的数据,比如全国房价格网数据:

全国公交站点和公交线路的数据

当然了,这个网站其他数据获取方法都是大同小异的,大家可以亲手试一试。

下图这些数据的获取请见下一篇文章

你可能感兴趣的:(python爬取公交车站数据)