引入:
我想通过python,将百度地图网页端上,检索到的“深圳市”“星巴克”咖啡厅列表,以表格形式导出,请给出代码,并输出csv格式。
- 直接从网页端抓取数据通常涉及复杂的HTML解析和JavaScript执行,操作难度大,且容易受网站资源权限和更新影响。百度地图提供了Place API,可以用来搜索特定区域内的POI(兴趣点)
- 手动整理,稳定性佳,当检索项达到一定规模时,耗时增加,效率难以保证。
工具:
操作:
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")