本篇目录如下:
1. 百度地图开放平台注册,AK获取
2.关于ak的说明
3.请求URL说明
4.百度地图坐标拾取器
5.以坐标范围获取兴趣点POI
6.将POI导出CSV表格
其中前5步是对百度API的熟悉了解,具体可参考零基础掌握百度地图兴趣点获取POI爬虫(python语言爬取)(基础篇)_零基础掌握百度地图兴趣点获取poi爬虫(python语言爬取)(代码篇)-CSDN博客
本篇具体讲解第6部分。
直接在Python中复制以下代码即可。
1.适用于行政区划区域检索,以爬取北京市公园为例。首先替换为自己的AK,其次可根据自己需求改代码最后一行的 公园 北京等关键字。
import requests
import json
import pandas as pd
def get_poi_data(query, region, output):
"""
从百度地图API获取特定区域内的兴趣点数据
:param query: 查询关键词
:param region: 查询的行政区域
:param output: 输出CSV文件名
"""
url = 'http://api.map.baidu.com/place/v2/search'
params = {
'query': query,
'region': region,
'output': 'json',
'ak': '改为你的AK'
}
all_data = []
for page in range(0, 10): # 假设最多获取10页数据
params['page_num'] = page
response = requests.get(url, params=params)
data = response.json()
if data.get('status') == 0: # 请求成功
for result in data['results']:
all_data.append({
'name': result['name'],
'address': result['address'],
'latitude': result['location']['lat'],
'longitude': result['location']['lng'],
})
else:
print(f"请求失败: {data.get('message')}")
break
df = pd.DataFrame(all_data)
df.to_csv(output, index=False, encoding='utf-8')
# 使用示例
get_poi_data('公园', '北京', 'beijing_parks.csv')
2.适用于多边形区域检索。以爬取北京市39.915,116.404,39.975,116.414矩形范围的银行为例。首先替换为自己的AK,其次可根据自己需求改代码最后一行的 银行 经纬度 导出的表格名等关键字。
import requests
import json
import pandas as pd
def get_poi_data(query, bounds, output):
"""
从百度地图API获取特定区域内的兴趣点数据
:param query: 查询关键词
:param bounds: 查询的经纬度区域
:param output: 输出CSV文件名
"""
url = 'http://api.map.baidu.com/place/v2/search'
params = {
'query': query,
'bounds': bounds,
'output': 'json',
'ak': '改为你的AK'
}
all_data = []
for page in range(0, 10): # 假设最多获取10页数据
params['page_num'] = page
response = requests.get(url, params=params)
data = response.json()
if data.get('status') == 0: # 请求成功
for result in data['results']:
all_data.append({
'name': result['name'],
'address': result['address'],
'latitude': result['location']['lat'],
'longitude': result['location']['lng'],
})
else:
print(f"请求失败: {data.get('message')}")
break
df = pd.DataFrame(all_data)
df.to_csv(output, index=False, encoding='utf-8')
# 使用示例
get_poi_data('银行', '39.915,116.404,39.975,116.414', 'beijing_banks.csv')