ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Python | 百度POI获取

2021-10-30 01:04:37  阅读:273  来源: 互联网

标签:info 检索 Python ak python3 POI page 百度 row


地点检索服务
地点检索服务(又名Place API)是一类Web API接口服务;
服务提供多种场景的地点(POI)检索功能,包括城市检索、圆形区域检索、矩形区域检索。开发者可通过接口获取地点(POI)基础或详细地理信息。

百度地图服务文档

import os
import requests
import json
import time


# query	检索关键字。行政区划区域检索不支持多关键字检索。如果需要按POI分类进行检索,请将分类通过query参数进行设置,如query=美食
# tag	检索分类偏好,与q组合进行检索,多个分类以","分隔(POI分类),如果需要严格按分类检索,请通过query参数设置
# region	检索行政区划区域(增加区域内数据召回权重,如需严格限制召回数据在区域内,请搭配使用city_limit参数),可输入行政区划名或对应cityCode
# city_limit	区域数据召回限制,为true时,仅召回region对应区域内数据
# extensions_adcode   是否召回国标行政区划编码,true(召回)、false(不召回)
# output	输出格式为json或者xml
# scope	检索结果详细程度。取值为1 或空,则返回基本信息;取值为2,返回检索POI详细信息
# coord_type	坐标类型,1(wgs84ll即GPS经纬度),2(gcj02ll即国测局经纬度坐标),3(bd09ll即百度经纬度坐标),4(bd09mc即百度米制坐标)注:"ll为小写LL"
# ret_coordtype	可选参数,添加后POI返回国测局经纬度坐标
# page_size	单次召回POI数量,默认为10条记录,最大返回20条。多关键字检索时,返回的记录数为关键字个数*page_size。	int
# page_num	分页页码,默认为0,0代表第一页,1代表第二页,以此类推。常与page_size搭配使用,仅当返回结果为poi时可以翻页。
# ak	开发者的访问密钥,必填项。v2之前该属性为key。


def get_info(ak):
    # 获取poi相关信息
    info_all = []  # 用来存取未解析的数据
    page = 0  # 用于翻页
    flag = True  # 设置标志,判断是否到了页尾,用于退出循环
    while flag:
        url = 'https://api.map.baidu.com/place/v2/search?query=公园&tag=旅游景点&region=惠州市&output=json' \
              f'&ak={ak}&page_size=20&page_num={page}&scope=2&city_limit=true&coord_type=1'
        content = requests.get(url).content.decode('utf-8')  # 发送get请求,获取数据
        # JSON 数据解析:https://www.runoob.com/python3/python3-json.html
        dic = json.loads(content)  # 因为接收的数据是json字符串格式,所以把它转为字典格式
        if dic['total'] == 0:  # 若为0,说明到页尾了,将flag设为False,以退出循环
            flag = False
            continue
        info = dic['results']
        info_all = info_all + info  # 拼接列表,也就是把每页的未解析的数据加到列表里
        page += 1  # 翻页
        time.sleep(1)  # 避免程序访问百度链接出现高并发状态
        print(f"第{page}页...")
    return info_all  # 返回所有未解析的数据


def save_info(info_all):
    # 解析数据并保存信息
    path = '惠州市公园数据.txt'
    # a模式:打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
    with open(path, 'w') as f:  # 打开文件
        # 字符串 join()方法:  https://www.runoob.com/python3/python3-string-join.html
        s = '       '  # 连接符
        # 下面对应内容 纬度 经度 标签 城市 区域 地址 名称 UID 百度地图链接
        seq = s.join(['lat', 'lng', 'tag', 'city', 'area', 'address', 'name', 'uid', 'detail_url'])
        # File write() 方法: https://www.runoob.com/python3/python3-file-write.html
        f.write(seq + '\n')  # 写入文件内容
        for row in range(len(info_all)):
            # 字典:https://www.runoob.com/python3/python3-dictionary.html
            # data各个子项就是提取字典里的数据
            data = [
                str(info_all[row]['location']['lat']),
                str(info_all[row]['location']['lng']),
                info_all[row]['detail_info']['tag'],
                info_all[row]['city'],
                info_all[row]['area'],
                info_all[row]['address'],
                info_all[row]['name'],
                info_all[row]['uid'],
                info_all[row]['detail_info']['detail_url']
            ]
            line = s.join(data) + '\n'
            f.write(line)
    print("保存完毕!")


def main():
    # 主函数
    ak = input("请输入您的ak:")
    if len(ak) == 32:  # 判断输入的ak长度是否符合要求
        info_all = get_info(ak)  # 获取未解析的数据信息
        save_info(info_all)  # 解析并保存
    else:
        print("请确认Ak输入无误后,再重新尝试!")


if __name__ == '__main__':
    # 程序从这里开始运行
    main()

标签:info,检索,Python,ak,python3,POI,page,百度,row
来源: https://www.cnblogs.com/echohye/p/15484094.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有