Python3 | 通过百度地图API获取商家详细信息
Python3 | 通过百度地图API获取商家详细信息(包括店名,地址,经纬度,电话)
一、打开百度地图开放平台,选择Web服务API 。
官方文档对API接口的调用描述的比较详细,在调用之前先要申请百度地图的账号,然后申请密钥,获取密钥的步骤官方也有说明。
二、通过百度地图API获取商家详细信息是调用的地点检索接口,总共有四种方式的服务,按情况选择适合的一种。
行政区划区域检索
http://api.map.baidu.com/place/v2/search?query=ATM机&tag=银行®ion=北京&output=json&ak=您的ak //GET请求
参数含义在文档中也有说明,除了必选的,其他的都可以看情况选择哪一个的。以下代码调用的是行政区划区域检索的服务。
python代码:
-
# coding=gbk
-
# 指定编码格式,防止乱码
-
-
import requests
-
-
-
#百度地图API搜索
-
def baidu_search(query, region):
-
url = \'http://api.map.baidu.com/place/v2/search?\'
-
output = \'json\'
-
ak = \'vLyZjPkryKy5Mn2LG1fp6ColMGFfFFiu\'
-
uri = url + \'query=\' + query + \'®ion=\'+region+\'&output=\' + output + \'&ak=\' + ak
-
r = requests.get(uri)
-
response_dict = r.json()
-
results = response_dict["results"]
-
for adr in results:
-
name = adr[\'name\']
-
location= adr[\'location\']
-
lng = float(location[\'lng\'])
-
lat = float(location[\'lat\'])
-
address = adr[\'address\']
-
telephone = adr[\'telephone\']
-
print(\'名称:\'+name)
-
print(\'坐标:%f,%f\' %(lat,lng))
-
print(\'地址:\'+address)
-
print(\'电话:\'+telephone)
-
-
baidu_search(\'海底捞\',\'广州\')
运行结果:
-
名称:海底捞(珠影星光城店)
-
坐标:23.100115,113.328013
-
地址:广州市海珠区新港中路354号珠影星光城F1
-
电话:(020)89440008
-
名称:海底捞(广州百信广场店)
-
坐标:23.200748,113.268490
-
地址:白云区机场路1309号百信广场3层3037号
-
电话:(020)36636088
-
名称:海底捞(奥园广场店)
-
坐标:22.929717,113.363430
-
地址:广州市番禺区福德路317号奥园广场F4
-
电话:(020)39180790
-
名称:海底捞(奥园广场店)
-
坐标:22.929696,113.363434
-
地址:番禺区桥南街福德路奥园广场4层
-
、
import requests
import json
import pandas as pd
def request_hospital_data():
ak="换成自己的 AK" # 换成自己的 AK,需要申请
ct = (\'衢州\',\'宁波\',\'台州\',\'温州\',\'丽水\',\'杭州\',\'湖州\',\'金华\')
keywords=(\'粥\')
url = ["http://api.map.baidu.com/place/v2/search?query="+keywords+"&page_size=20&scope=1®ion=" + cs + "&output=json&ak=" + ak for cs in ct]
params = {\'page_num\':0} # 请求参数,页码
for url1 in url:
#print(url1)
request = requests.get(url1,params=params)
#print(request)# 请求数据
total = json.loads(request.text)[\'total\'] # 数据的总条数
#print(total)
total_page_num = (total+19) // 20 # 每个页面大小是20,计算总页码
items = [] # 存放所有的记录,每一条记录是一个元素
for i in range(total_page_num):
params[\'page_num\'] = i
request = requests.get(url1,params=params)
for item in json.loads(request.text)[\'results\']:
if "telephone" in item:
name = item[\'name\']
telephone = item.get(\'telephone\', \'\')
province = item[\'province\']
city = item[\'city\']
area = item[\'area\']
address = item[\'address\']
#print(name,telephone,province,city,area,address)
new_item = (name,telephone,province,city,area,address)
#print(new_item)
items.append(new_item)
#使用pandas的DataFrame对象保存二维数组
df = pd.DataFrame(items, columns=[\'name\',\'telephone\',\'province\',\'city\',\'area\',\'address\'])
print(df)
#df.drop_duplicates(inplace=True)
df.to_csv(\'粥1.csv\', index=False,encoding=\'\',mode=\'a\')
request_hospital_data()
原文链接:https://blog.csdn.net/weixin_45206990/article/details/108251724