在想要爬取百度地图中的店铺数据时候往往是加密的 在开发平台中申请自己的账号主要在爬取中需要AK验证 直接上代码代码中只获取店铺名和电话 …其他注释 需要的自己调整 最终结果如图所示
import requests
import json
import pandas as pd
def request_hospital_data():
ak=" " # 换成自己的 AK,需要申请
url = "http://api.map.baidu.com/place/v2/search?query=律师&page_size=20&scope=1®ion=郑州&output=json&ak="+ak
params = {'page_num':0} # 请求参数,页码
request = requests.get(url,params=params) # 请求数据
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(url,params=params)
for item in json.loads(request.text)['results']:
if "telephone" in item:
# telephone = item['telephone']
name = item['name']
telephone = item.get('telephone', '')
print('店名:' + name + "\t\t" + '电话:' + telephone)
else:
print("")
# name = item['name']
# lat = item['location']['lat']
# lng = item['location']['lng']
# address = item.get('address', '')
# street_id = item.get('street_id', '')
# telephone = item.get('telephone', '')
# print(name,telephone)
# detail = item.get('detail', '')
# uid = item.get('uid', '')
# # print(name, lat, lng, address, street_id, telephone, detail, uid)
# new_item = (name, lat, lng, address, street_id, telephone, detail, uid)
# items.append(new_item)
# 使用pandas的DataFrame对象保存二维数组
# df = pd.DataFrame(items, columns=['name', 'lat', 'lng', 'adderss', 'street_id', 'telephone', 'detail', 'uid'])
# df.to_csv('liaozhong_hospital_info.csv', header=True, index=False)
request_hospital_data()