共计 6276 个字符,预计需要花费 16 分钟才能阅读完成。
百度地图提供了开放的 API,使用方法
WEB 服务 API
右上角登陆账号 -> 点击“获取密钥”->“创建应用”-> 填写应用名称 & 白名单 IP -> 然后复制 AK(例如 u2uqy7Gxui0XyBdcHLU0D3hQINLKokc0)
然后直接上代码
API 提供了 3 种方式
1 行政区划区域检索
2 圆形区域检索
3 矩形区域检索
详情可见 API 详情
本文以 1,3 为例
import requests
url = "http://api.map.baidu.com/place/v2/search"
querystring = {"query":"市场","region":"深圳","output":"json","ak":"你的 ak","page_size":20,"page_num":0}
response = requests.request("GET", url, params=querystring)
r = response.json()
print(r['results'])
print(len(r['results']))
返回结果如下
[{'name': '南山市场', 'location': {'lat': 22.531757, 'lng': 113.926754}, 'address': '南新路 2008', 'province': '广东省', 'city': '深圳市', 'area': '南山区', 'street_id': 'd6df91c124f80073f7b9164d', 'telephone': '13590117093', 'detail': 1, 'uid': 'd6df91c124f80073f7b9164d'}, {'name': '笋岗文具玩具礼品批发市场', 'location': {'lat': 22.564115, 'lng': 114.114963}, 'address': '宝安北路 1025 号', 'province': '广东省', 'city': '深圳市', 'area': '罗湖区', 'street_id': '28e700f171893318095cb34a', 'telephone': '(0755)82268844', 'detail': 1, 'uid': '28e700f171893318095cb34a'}, {'name': '嶂背综合市场', 'location': {'lat': 22.692344, 'lng': 114.255645}, 'address': '广东省深圳市龙岗区嶂背路 216 号', 'province': '广东省', 'city': '深圳市', 'area': '龙岗区', 'street_id': '4fc3161a8a8d3db03a13fd59', 'detail': 1, 'uid': '4fc3161a8a8d3db03a13fd59'}, {'name': '圳美市场', 'location': {'lat': 22.796433, 'lng': 113.951935}, 'address': '广东省深圳市光明区光明新区喜乐多百货(康明路东)', 'province': '广东省', 'city': '深圳市', 'area': '光明区', 'street_id': '5ffe414874a5986d9fec2b06', 'detail': 1, 'uid': '5ffe414874a5986d9fec2b06'}, {'name': '牛湖农贸市场', 'location': {'lat': 22.730088, 'lng': 114.095257}, 'address': '观澜镇牛湖村高尔夫大道旁', 'province': '广东省', 'city': '深圳市', 'area': '龙华区', 'street_id': '8f6d8c61968269a36c47605b', 'detail': 1, 'uid': '8f6d8c61968269a36c47605b'}, {'name': '坪山综合批发市场', 'location': {'lat': 22.695807, 'lng': 114.346117}, 'address': '坪山区新区东纵路 470 号坪山批发市场公交车站旁六和工地', 'province': '广东省', 'city': '深圳市', 'area': '坪山区', 'street_id': '550fd5f96c6d9060931fc955', 'detail': 1, 'uid': '550fd5f96c6d9060931fc955'}, {'name': '坪西市场', 'location': {'lat': 22.765712, 'lng': 114.292258}, 'address': '吉祥一路 23 号', 'province': '广东省', 'city': '深圳市', 'area': '龙岗区', 'street_id': '87248d96c13e62aa2806ce5a', 'detail': 1, 'uid': '87248d96c13e62aa2806ce5a'}, {'name': '友信冷冻食品城', 'location': {'lat': 22.66691, 'lng': 114.13473}, 'address': '深圳市龙岗区南湾街道上李朗社区平吉大道 78 号', 'province': '广东省', 'city': '深圳市', 'area': '龙岗区', 'street_id': 'd8ef3b08c51b727a58bbbc69', 'telephone': '(0755)88263688', 'detail': 1, 'uid': 'd8ef3b08c51b727a58bbbc69'}, {'name': '石岩新村综合市场', 'location': {'lat': 22.679288, 'lng': 113.930496}, 'address': '深圳市宝安区王家庄市场 1 号 301', 'province': '广东省', 'city': '深圳市', 'area': '宝安区', 'street_id': '593850fb068b9720df1e526b', 'detail': 1, 'uid': '593850fb068b9720df1e526b'}, {'name': '新陂头农贸市场', 'location': {'lat': 22.807519, 'lng': 113.948556}, 'address': '深圳市光明区康弘路 13 号', 'province': '广东省', 'city': '深圳市', 'area': '光明区', 'detail': 1, 'uid': '3a0a78bd2b341d86631809d9'}, {'name': '爱华肉菜市场', 'location': {'lat': 22.544775, 'lng': 114.098053}, 'address': '爱华路 47 号', 'province': '广东省', 'city': '深圳市', 'area': '福田区', 'street_id': 'b533ea4af6bb89584f6d4645', 'telephone': '(0755)83620019', 'detail': 1, 'uid': 'b533ea4af6bb89584f6d4645'}, {'name': '茜坑老村综合市场', 'location': {'lat': 22.69478, 'lng': 114.036412}, 'address': '新区观澜', 'province': '广东省', 'city': '深圳市', 'area': '龙华区', 'street_id': '50fb64ff5a658e20e9f8531b', 'telephone': '13885524446', 'detail': 1, 'uid': '50fb64ff5a658e20e9f8531b'}, {'name': '利民农贸批发市场', 'location': {'lat': 22.742953, 'lng': 114.289898}, 'address': '广东省深圳市龙岗区深惠路 1256 号', 'province': '广东省', 'city': '深圳市', 'area': '龙岗区', 'street_id': '61f634f6fce2e8616a49f3aa', 'detail': 1, 'uid': '61f634f6fce2e8616a49f3aa'}, {'name': '龙岗第一市场', 'location': {'lat': 22.73833, 'lng': 114.287002}, 'address': '广东省深圳市龙岗区龙岗第一市场(龙岗大道西)', 'province': '广东省', 'city': '深圳市', 'area': '龙岗区', 'street_id': '0143dd2b837c3381cf06a435', 'detail': 1, 'uid': '0143dd2b837c3381cf06a435'}, {'name': '回龙埔综合市场', 'location': {'lat': 22.736316, 'lng': 114.241372}, 'address': '深圳市龙岗区龙平西路 26', 'province': '广东省', 'city': '深圳市', 'area': '龙岗区', 'street_id': 'd219bb1dc2beb792f50e775d', 'telephone': '18926789088', 'detail': 1, 'uid': 'd219bb1dc2beb792f50e775d'}, {'name': '公明综合市场', 'location': {'lat': 22.786351, 'lng': 113.899172}, 'address': '光明区公明街道振明路 145-5', 'province': '广东省', 'city': '深圳市', 'area': '光明区', 'detail': 1, 'uid': '1eeed5464e94e5ebb5147f4c'}, {'name': '民治综合街市', 'location': {'lat': 22.630651, 'lng': 114.045652}, 'address': '深圳市龙华区民治大道 412', 'province': '广东省', 'city': '深圳市', 'area': '龙华区', 'street_id': 'd0b8923fcf5d4bfbb5f42f5f', 'detail': 1, 'uid': 'd0b8923fcf5d4bfbb5f42f5f'}, {'name': '荔园集贸批发市场', 'location': {'lat': 22.698857, 'lng': 114.141112}, 'address': '平湖镇景秀三巷 7 号', 'province': '广东省', 'city': '深圳市', 'area': '龙岗区', 'street_id': '7ee3ccf7b8aed470047ce87c', 'telephone': '(0755)28852881', 'detail': 1, 'uid': '7ee3ccf7b8aed470047ce87c'}, {'name': '富民铁路市场', 'location': {'lat': 22.617064, 'lng': 114.126306}, 'address': '广东省深圳市龙岗区布李路 164 号', 'province': '广东省', 'city': '深圳市', 'area': '龙岗区', 'street_id': '96e3e1a27685cb82cae33c57', 'detail': 1, 'uid': '96e3e1a27685cb82cae33c57'}, {'name': '盐田海鲜批发市场', 'location': {'lat': 22.590926, 'lng': 114.284179}, 'address': '深圳市盐田区海鲜街 28', 'province': '广东省', 'city': '深圳市', 'area': '盐田区', 'street_id': 'fc7675243816e6e34f776ea2', 'telephone': '(0755)25202868', 'detail': 1, 'uid': 'fc7675243816e6e34f776ea2'}]
返回 20 条
page_size 最大为 20
page_num 参数可以控制页码数
下面是重点!
但是通过行政区地点检索 最多返回 400 个这是百度的限制
这时就需要 通过矩形区域检索
将深圳划分为多个区域进行检索
a 和 b 的坐标在这里定位坐标拾取网站
import requests
import time
import json
keyword = "菜市场"
city = "深圳"
url = "http://api.map.baidu.com/place/v2/search"
a = "22.4717881915,113.7808575851"
b = "22.7960248910,114.3961567319"
#a 为深圳左下角坐标,b 为深圳右上角坐标
left_bottom = [113.7808575851,22.4717881915] # 设置区域左下角坐标(百度坐标系)right_top = [114.3961567319,22.7960248910] # 设置区域右上角坐标(百度坐标系)part_n = 5 # 设置区域网格(5*5)x_item = (right_top[0]-left_bottom[0])/part_n
y_item = (right_top[1]-left_bottom[1])/part_n
n = 0 # 切片计数器
url0 = 'http://api.map.baidu.com/place/v2/search?'
data = []
for i in range(part_n):
for j in range(part_n):
left_bottom_part = [left_bottom[0]+i*x_item,left_bottom[1]+j*y_item]; # 切片的左下角坐标
right_top_part = [right_top[0]+i*x_item,right_top[1]+j*y_item]; # 切片的右上角坐标
for k in range(20):
time.sleep(0.6)
url = url0 + 'query=' + '市场' + '&page_size=20&page_num=' + str(k) + '&scope=1&bounds=' + str(left_bottom_part[1]) + ',' + str(left_bottom_part[0]) + ',' + str(right_top_part[1]) + ',' + str(right_top_part[0]) + '&output=json&ak=' + '你的 ak'
print(str(left_bottom_part[1]) + ',' + str(left_bottom_part[0]))
print(str(right_top_part[1]) + ',' + str(right_top_part[0]))
print('===================================================')
response = requests.request("GET", url)
response = response.json()
print(response)
r = response['results']
data.append(r)
这样就可以突破深圳区域 400 的限制了, 可以分为 1010 更细化 1010 共返回 1200+ 结果
正文完