引入:
我想通过 python,将百度地图网页端上,检索到的“深圳市”“星巴克”咖啡厅列表,以表格形式导出,请给出代码,并输出 csv 格式。
- 直接从网页端抓取数据通常涉及复杂的 HTML 解析和 JavaScript 执行,操作难度大,且容易受网站资源权限和更新影响。百度地图提供了 Place API,可以用来搜索特定区域内的 POI(兴趣点)
- 手动整理,稳定性佳,当检索项达到一定规模时,耗时增加,效率难以保证。
工具:
![[ 数据]:百度地图抓取 POI- 尝试与反思 [数据]:百度地图抓取 POI- 尝试与反思](https://lifetruth.top/wp-content/uploads/2024/11/image.png)
操作:
1、开放平台
① 获取 ak ②生成代码 ③运行,详情可参考视频演示
2、代码获取
①kimi、②文心 4.0,详见附录
3、运行终端 Python
①pip installl pandas requests
②代码修正
以上效果:
替代在线工具:https://lbsyun.baidu.com/, 路径:
- 开发文档 >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")
正文完