zoukankan      html  css  js  c++  java
  • 获取全国省市区数据 (提供json数据下载)

    获取全国省市区数据

    起因

    最近在做项目时需要用户选择配送地点,需要一个省市区的选择器,但是网上找了半天没有找到合适的数据,要么就是数据太久远,不全,要么就是要收费,还有些第三方api可以用,但是调用次数有限制等,想起之前高德有一个获取地图绘制坐标点的接口,就写了个脚本把他的数据爬了下来,写入一个json文件,只拿codename就够用了

    温馨提示

    为了方便使用我已经将抓好的json数据放到了仓库中 ./JSON/all.json,可以直接取用,当然你也可以执行脚本抓取最新的数据

    数据来源

    http://datav.aliyun.com/tools/atlas/

    开源地址

    https://gitee.com/yang230147961/get-city-list.git

    环境

    Python3.x

    requests

    安装使用

    拉取代码

    git clone https://gitee.com/yang230147961/get-city-list.git

    cd ./get-city-list

    安装依赖

    pip install -r requirements.txt or pip3 install -r requirements.txt

    执行脚本

    python getCityList.py or python3 getCityList.py

    实现逻辑

    他这个接口逻辑是按层查询的,获取到第一层的 省份列表后,拿code去查这个省下面的市,然后拿每一个市的code再去查下面的区,以此类推,但是有些城市例如北京,只有2层,有的城市例如山东,有3层的,所以选择使用递归的方式去抓取数据

    实现代码

    import requests
    mainCode = 100000
    mainName = '中华人民共和国'
    def getList(rootCode,rootName,lv):
        myData={
            'code':rootCode,
            'name':rootName,
        }
        api = 'https://geo.datav.aliyun.com/areas/bound/geojson?code={}_full'.format(rootCode)
        data = requests.get(api)
        if data.json():
            arr = []
            index = 1
            for i in data.json().get('features'):
                item = i.get('properties')
                mycode = item.get('adcode')
                myname = item.get('name')
                print('{}>  {}'.format('|' + '=========' * lv, myname))
                childrenNum = item.get('childrenNum')
                if not mycode == rootCode and mycode and myname and not childrenNum == 0:
                    thisData = getList(mycode, myname,lv+1)
                    arr = [*arr, thisData]
                else:
                    arr = [*arr, {
                        'code': mycode,
                        'name': myname,
                    }]
            if not len(arr) == 0:
                myData['list'] = arr
            return myData
        else:
            return {}
    def main():
        arr = getList(mainCode,mainName,1)
        with open('./省市区.json','w') as file:
            file.write(str(arr))
            file.close()
    if __name__=='__main__':
        main()
    
  • 相关阅读:
    Oracle函数应用与查询聚合统计
    Oracle子查询与分页查询
    DB2端口(转自百度文库http://wenku.baidu.com/view/47809b26aaea998fcc220e65.html)
    职场生涯
    git 管理多个私钥
    ubuntu 解压 windows 生成的 zip 文件乱码问题
    js实现类似于add(1)(2)(3)调用方式的方法
    webkit内核浏览器的CSS写法
    python 单例模式
    Javascript模块化编程:AMD规范及require.js用法【转】
  • 原文地址:https://www.cnblogs.com/WXGC-yang/p/14596855.html
Copyright © 2011-2022 走看看