[数据]:百度地图抓取POI-尝试与反思

423次阅读
没有评论

引入:

我想通过 python,将百度地图网页端上,检索到的“深圳市”“星巴克”咖啡厅列表,以表格形式导出,请给出代码,并输出 csv 格式。

  1. 直接从网页端抓取数据通常涉及复杂的 HTML 解析和 JavaScript 执行,操作难度大,且容易受网站资源权限和更新影响。百度地图提供了 Place API,可以用来搜索特定区域内的 POI(兴趣点)
  2. 手动整理,稳定性佳,当检索项达到一定规模时,耗时增加,效率难以保证。

工具:

[数据]:百度地图抓取 POI- 尝试与反思

操作:

1、开放平台

① 获取 ak ②生成代码 ③运行,详情可参考视频演示







2、代码获取

①kimi、②文心 4.0,详见附录

3、运行终端 Python

①pip installl pandas requests

②代码修正

以上效果:

替代在线工具:https://lbsyun.baidu.com/, 路径:

  1. 开发文档 >Web 服务 API> 地点检索 > 快速开始 > 开始使用

总结

1、无代码,api 使用规则和限制超出理解,且在 AI 会话工具协助难以突破,解决办法:求助;

2、探索:及时止损,横向比较,是被接口规则改变、平台配额以及收费限制

3、沉没成本:平台(名词、文档、api、坐标),边际化、耗时多(万事开头难,选对方向)

附录:

import requests
import pandas as pd

# 你的百度访问应用 AK
AK = '你的 AK 密钥'

# 百度地图 Place API 的请求 URL 模板
url_template = 'http://api.map.baidu.com/place/v2/search'

# 请求参数
params = {
    'ak': AK,
    'query': '萨莉亚',
    'region': '深圳市',
    'output': 'json',
    'page_size': 20,  # 每页返回的结果数量
    'page_num': 0     # 页码,从 0 开始
}

# 初始化结果列表
results = []

# 循环获取数据
while True:
    response = requests.get(url_template, params=params)
    data = response.json()
    
    # 检查 API 响应状态
    if data['status'] != 0:
        print(f"API 请求失败,状态码:{data['status']}, 错误信息:{data.get('msg',' 无错误信息 ')}")
        break
    
    # 检查是否有结果返回
    if data['total'] == 0:
        print("没有找到任何结果。")
        break
    
    # 提取结果数据
    results.extend(data['results'])
    params['page_num'] += 1
    
    # 可选:打印原始数据以进行调试
    # print(data)

# 检查是否获取到结果
if not results:
    print("没有获取到任何结果数据。")
else:
    # 将结果转换为 DataFrame(注意:这里假设每个结果都是一个字典)df = pd.DataFrame(results)
    
    # 打印 DataFrame 的列名以进行调试
    print(df.columns)
    
    # 根据实际的列名调整 selected_columns
    # 注意:这里的列名需要根据你的实际数据来调整
    selected_columns = ['name', 'address_detail', 'location', 'tel']  # 示例列名
    
    # 检查 selected_columns 中的列名是否在 df 的列中
    missing_columns = set(selected_columns) - set(df.columns)
    if missing_columns:
        print(f"警告:以下列名在 DataFrame 中不存在:{missing_columns}")
    else:
        # 选择列并导出到 CSV 文件
        df = df[selected_columns]
        df.to_csv('shenzhen_sariya_restaurants.csv', index=False, encoding='utf-8-sig')
        print("数据已导出到 shenzhen_sariya_restaurants.csv")
正文完
 0
评论(没有评论)

执迷者X