百度API地点检索并用python进行数据爬取

本文主要介绍百度地图API中地点检索功能的应用以及如何运用python爬取这些数据并保存。

1、密钥申请

搜索“百度地图API”,找到官网(百度地图开放平台 | 百度地图API SDK | 地图开发 (baidu.com))进入,点击上方控制台,进入控制台后找到左侧“应用管理”里的“我的应用”,然后点击创建应用,随便起一个应用名称,应用类型选择服务端,IP白名单简单起见可以直接用0.0.0.0/0,但需注意阅读网页内红字提醒,点击提交,如下图所示。

2、地点检索

回到官网首页,找到上方“开发文档”点击“Web服务API”,点击地点检索——地点检索v2.0,可以查看官网给的使用说明,这里简单介绍我自己使用到的一些功能。

本文介绍的是行政区划区域检索,以搜索济南市的医院位置数据为例。

https://api.map.baidu.com/place/v2/search?query=医院&region=济南市&output=json&page_size=10&page_num=1&ak= “申请的AK”

链接中,query为要查找的建筑类型,比如医院、超市、机场、火车站等等,output为数据输出的格式,page_size为一页里面包含的数据条数,默认为10最大可设置为20,page_num是要查看的页数默认为0,即第一页,ak即为上一步申请的密钥。

将上述链接加上自己的AK,直接新建网页搜索即可显示结果,如图。

 

 最上方的"total"为查找的结果数量,共139条,设置的是每页显示10条,因此一共有14页,也就是page_num可设置的值为0-13.

从图中可以看出,搜出的数据包括医院名称、医院位置的经纬度、医院地址、医院所处省份、地市、区。接下来通过python将这些数据进行保存。

3、数据爬取

由于一共有14页的数据需要获取,所以需要访问14次网页,每次访问时,只有链接中的page_num值不同

代码示例:

import urllib.request
import json
a='https://api.map.baidu.com/place/v2/search?query=%E5%8C%BB%E9%99%A2&region=%E6%B5%8E%E5%8D%97&tag=%E5%8C%BB%E7%96%97&scope=2&page_num='
c='&output=json&ak=FTjDtNlzXGG3x4yfGlMLqXHyzSk4PHbN'
#a为链接中page_num值之前的部分,c为之后的部分,这两部分不变,变得只有page_num的值

location=[]
for k in range(14): #一共有14页数据
    b=str(k)
    d=a+b+c    #d为完整链接
    path=urllib.request.urlopen(d)
    m=json.loads(path.read())
    if k ==13:   #最后一页只有9条数据因此只向数组中填加9次。
        for i in range(9):
            location.append(m['results'][i])
    else:
        for i in range(10):
            location.append(m['results'][i])

 结果如图

获取的结果可以存储在excel中,代码如下,只存储了名称和经纬度。

import xlwt
wb=xlwt.Workbook()
sheet=wb.add_sheet('sheet1') #在excel里建立一个表,名称为'sheet1'
sheet.write(0,0,'医院名称')#  ()里分别为(第几行,第几列,存储的数据),0代表第一行或第一列
sheet.write(0,1,'纬度')
sheet.write(0,2,'经度')
p=1
for i in range(len(location)):
    sheet.write(p,0,location[i]['name'])
    sheet.write(p,1,location[i]['location']['lat'])
    sheet.write(p,2,location[i]['location']['lng'])
    p=p+1
wb.save('医院位置数据.xls')

结果如图

  • 8
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值