python抓取某城市全部道路名称信息

 更新时间:2023年02月03日 09:44:04   作者:起不好名字就不起了  
本文主要介绍了python抓取某城市全部道路名称信息,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

引子

这两天碰到一个需求,要获取某个城市所有道路的车辆通行速度。首先自然是想到用高德或百度的Web服务 API 来请求交通路况信息,结果一看高德的交通态势服务API从2020年12月31日起就下线了,遂转而奔向百度,百度的实时路况查询服务倒是还能用,但是在使用上确有许多限制,主要是检索限定范围太小,无法通过直接设置矩形范围查询区域内所有道路路况信息,最终想到如果能获取该城市的所有道路名称信息,直接根据道路名去请求接口,就能又准又全的采集所有道路通行状况数据。所以,就有了本次标题的目标:怎么获取城市全部道路名称信息?

思路

在网上一番检索,并未直接找到有收录城市所有道路名的网站,还是太天真了。最终还是选择了从百度自身下手,百度Web服务是提供POI检索的,道路也算是POI的一种,所以可以通过这种曲线救国的方式,来实现道路名称信息的抓取,具体步骤如下:

1.确定检索范围,也就是待查询区域的经纬度边界,这个可以网上搜。如果有对应区域的地理空间数据,也可以在ArcGIS内以查看坐标信息的形式获取经纬度。
2.确定检索形式,百度提供行政区划区域检索、圆形区域检索、矩形区域检索、地点详情检索四种POI检索形式,最理想的是矩形区域检索,但该检索功能已不再免费对外开放,所以退而求其次,选择圆形区域检索,尽可能多的获取道路相关POI信息。
3.确定检索步长,圆形检索是通过设定好中心坐标点,并按设定半径来请求该圆形区域内的所有道路名称,由于半径不可能无限延伸,所以要把第一步确定的矩形范围分解成多个小圆形范围,来分批次请求检索结果。
4.编写实现代码,代码实现过程比较简单,需要主要是获取道路信息后逐一保存。

实现

实现代码如下,写的比较糙,不过能用。

f = open('F:\\路名信息.json', 'w+')
#经纬度范围设置,按每次偏移两公里来移动检索圆心
for lat in np.arange(30.895038,31.424064,0.02):
        for long in np.arange(107.183609,107.800848,0.02):
            latstr=str(lat)
            longstr=str(long)
            bounds=latstr+','+longstr
            #query的参数值设为道路,检索半径设置为2公里
            api= "http://api.map.baidu.com/place/v2/search?query=道路&location={0}&radius=2000&output=json&ak={你的开发者秘钥}".format(bounds)
            r = requests.get(api, headers={'User-Agent': 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)','Connection': 'close'}, timeout=(5, 5))
            try:
                result=r.json()
                #是否成功返回结果
                if result['status'] == 0:
                    #是否包含路况信息
                    results = result['results']
                    if len(results) != 0:
                        for road in results:
                              #每条路的json文件单独保存
                              print(json.dumps(road, ensure_ascii=False))
                              f.write(json.dumps(road, ensure_ascii=False,indent=4))

            except:
                print('哇塞,出错了')
                continue
f.close()

结果

最后请求得到的道路信息类似如下格式,可以看到当我们以道路作为检索关键字来请求POI时,确实能够获取道路的详细信息,但是也有一些非标准道路名称结果被检索到,比如某某路口这种。所以,如果再对数据做一遍清洗修正,应该能得到更多道路名称信息。总之通过POI这种形式来获取城市所有道路名是有一定可操作性的,但在数据的全量性上还没法完全保证,需要进一步优化该方法,以后有时间再研究研究。

{
        "name": "踏水桥",
        "location": {
            "lat": 30.908352,
            "lng": 107.244304
        },
        "address": "四川省达州市大竹县",
        "province": "四川省",
        "city": "达州市",
        "area": "大竹县",
        "detail": 0,
        "uid": "ce658bf70958ecccda13183b"
},
{
        "name": "华农街/将军西街(路口)",
        "location": {
            "lat": 30.90876,
            "lng": 107.241049
        },
        "address": "达州市大竹县X168",
        "province": "四川省",
        "city": "达州市",
        "area": "大竹县",
        "detail": 1,
        "uid": "2355baab46ba127551e5c541"
},
{
        "name": "将军西街",
        "location": {
            "lat": 30.911387,
            "lng": 107.243157
        },
        "address": "四川省达州市大竹县",
        "province": "四川省",
        "city": "达州市",
        "area": "大竹县",
        "detail": 0,
        "uid": "09979f7c1c1aa5cb09f5eb47"
},
......

到此这篇关于python抓取某城市全部道路名称信息的文章就介绍到这了,更多相关python抓取道路信息内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python内置函数delattr()与dict()举例详解

    python内置函数delattr()与dict()举例详解

    这篇文章主要介绍了关于python内置函数delattr()与dict()的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • Python代码部署的三种加密方案

    Python代码部署的三种加密方案

    本文主要介绍了Python代码部署的三种加密方案,主要介绍了代码混淆、代码编译、代码打包这三种,具有一定的参考价值,感兴趣的可以了解一下
    2023-02-02
  • Python中json文件的读取实现

    Python中json文件的读取实现

    在许多编程语言中,都有内置的JSON解析器和生成器,可以方便地处理JSON数据,本文主要介绍了Python中json文件的读取实现,具有一定的参考价值,感兴趣的可以了解一下
    2023-08-08
  • 使用Python实现PDF与SVG互转

    使用Python实现PDF与SVG互转

    SVG(可缩放矢量图形)和PDF(便携式文档格式)是两种常见且广泛使用的文件格式,本文将详细介绍如何使用 Python 实现 SVG 和 PDF 之间的相互转换,感兴趣的可以了解下
    2025-02-02
  • python使用redis实现消息队列(异步)的实现完整例程

    python使用redis实现消息队列(异步)的实现完整例程

    本文主要介绍了python使用redis实现消息队列(异步)的实现完整例程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • python使用生成器实现可迭代对象

    python使用生成器实现可迭代对象

    这篇文章主要为大家详细介绍了python如何使用生成器实现可迭代对象,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • python中from import的使用解读

    python中from import的使用解读

    本文总结了Python中from和import的使用方法,包括导入模块和导入模块中的对象,强调了模块和对象的概念,并给出了具体的使用示例,最后,建议根据代码维护性和团队编码风格来选择合适的导入方式
    2025-03-03
  • 浅谈python函数调用返回两个或多个变量的方法

    浅谈python函数调用返回两个或多个变量的方法

    今天小编就为大家分享一篇浅谈python函数调用返回两个或多个变量的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • appium中常见的几种点击方式

    appium中常见的几种点击方式

    本文主要介绍了appium中常见的几种点击方式,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • Python把csv数据写入list和字典类型的变量脚本方法

    Python把csv数据写入list和字典类型的变量脚本方法

    今天小编就为大家分享一篇Python把csv数据写入list和字典类型的变量脚本方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06

最新评论