关键词:
目前,大厂的服务范围越来越广,提供的数据信息也是比较全的,在生活服务,办公领域,人工智能等方面都全面覆盖,相对来说,他们的用户基数大,通过用户获取的信息也是巨大的。除了百度提供api,国内提供免费API获取数据的还有很多,包括新浪、豆瓣电影、饿了么、阿里、腾讯等今天使用百度地图API来请求我们想要的数据。
第一步.注册百度开发者账号
注册成功后就可以获取到应用服务AK也就是API秘钥,这个是最重要的,应用名称可以随便取,如果是普通用户一天只有2000调用限额,认证用户一天有10万次调用限额
在百度地图web服务API文档中我可以看见提供的接口和相关参数,其中就有我们要获取的AK参数,使用的GET请求
一.下面我们尝试使用API获取获取北京市的城市公园数据,需要配置参数
import requests import json def getjson(loc): headers = ‘User-Agent‘ : ‘Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6‘ pa = ‘q‘: ‘公园‘, ‘region‘: loc, ‘scope‘: ‘2‘, ‘page_size‘: 20, ‘page_num‘: 0, ‘output‘: ‘json‘, ‘ak‘: ‘填写自己的AK‘ r = requests.get("http://api.map.baidu.com/place/v2/search", params=pa, headers= headers) decodejson = json.loads(r.text) return decodejson getjson(‘北京市‘)
二.获取所有拥有公园的城市
import requests import json def getjson(loc): headers = ‘User-Agent‘ : ‘Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6‘ pa = ‘q‘: ‘公园‘, ‘region‘: loc, ‘scope‘: ‘2‘, ‘page_size‘: 20, ‘page_num‘: 0, ‘output‘: ‘json‘, ‘ak‘: ‘填写自己的AK‘ r = requests.get("http://api.map.baidu.com/place/v2/search", params=pa, headers= headers) decodejson = json.loads(r.text) return decodejson province_list = [‘江苏省‘, ‘浙江省‘, ‘广东省‘, ‘福建省‘, ‘山东省‘, ‘河南省‘, ‘河北省‘, ‘四川省‘, ‘辽宁省‘, ‘云南省‘, ‘湖南省‘, ‘湖北省‘, ‘江西省‘, ‘安徽省‘, ‘山西省‘, ‘广西壮族自治区‘, ‘陕西省‘, ‘黑龙江省‘, ‘内蒙古自治区‘, ‘贵州省‘, ‘吉林省‘, ‘甘肃省‘, ‘新疆维吾尔自治区‘, ‘海南省‘, ‘宁夏回族自治区‘, ‘青海省‘, ‘西藏自治区‘] for eachprovince in province_list: decodejson = getjson(eachprovince) #print(decodejson["results"]) for eachcity in decodejson.get(‘results‘): print(eachcity) city = eachcity[‘name‘] #print(city) num = eachcity[‘num‘] output = ‘\\t‘.join([city, str(num)]) + ‘\\r\\n‘ with open(‘cities.txt‘, "a+", encoding=‘utf-8‘) as f: f.write(output) f.close()
import requests import json def getjson(loc): headers = ‘User-Agent‘ : ‘Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6‘ pa = ‘q‘: ‘公园‘, ‘region‘: loc, ‘scope‘: ‘2‘, ‘page_size‘: 20, ‘page_num‘: 0, ‘output‘: ‘json‘, ‘ak‘: ‘填写自己的AK‘ r = requests.get("http://api.map.baidu.com/place/v2/search", params=pa, headers= headers) decodejson = json.loads(r.text) return decodejson decodejson = getjson(‘全国‘) six_cities_list = [‘北京市‘,‘上海市‘,‘重庆市‘,‘天津市‘,‘香港特别行政区‘,‘澳门特别行政区‘,] for eachprovince in decodejson[‘results‘]: city = eachprovince[‘name‘] num = eachprovince[‘num‘] if city in six_cities_list: output = ‘\\t‘.join([city, str(num)]) + ‘\\r\\n‘ with open(‘cities789.txt‘, "a+", encoding=‘utf-8‘) as f: f.write(output) f.close()
保存到文件
三.获取所有城市的公园数据,在从各个城市获取数据之前,先在MySQL建立baidumap数据库,用来存放所有的数据
#coding=utf-8 import pymysql conn= pymysql.connect(host=‘localhost‘ , user=‘root‘, passwd=‘*******‘, db =‘baidumap‘, charset="utf8") cur = conn.cursor() sql = """CREATE TABLE city ( id INT NOT NULL AUTO_INCREMENT, city VARCHAR(200) NOT NULL, park VARCHAR(200) NOT NULL, location_lat FLOAT, location_lng FLOAT, address VARCHAR(200), street_id VARCHAR(200), uid VARCHAR(200), created_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id) );""" cur.execute(sql) cur.close() conn.commit() conn.close()
city_list = list() with open("cities.txt", ‘r‘, encoding=‘utf-8‘) as txt_file: for eachLine in txt_file: if eachLine != "" and eachLine != "\\n": fields = eachLine.split("\\t") city = fields[0] city_list.append(city) txt_file.close()
#接下来爬取每个城市的数据,并将其加入city数据表中
import requests import json import pymysql conn= pymysql.connect(host=‘localhost‘ , user=‘root‘, passwd=‘********‘, db =‘baidumap‘, charset="utf8") cur = conn.cursor() def getjson(loc,page_num): headers = ‘User-Agent‘ : ‘Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6‘ pa = ‘q‘: ‘公园‘, ‘region‘: loc, ‘scope‘: ‘2‘, ‘page_size‘: 20, ‘page_num‘: page_num, ‘output‘: ‘json‘, ‘ak‘: ‘填写自己的AK‘ r = requests.get("http://api.map.baidu.com/place/v2/search", params=pa, headers= headers) decodejson = json.loads(r.text) return decodejson for eachcity in city_list: not_last_page = True page_num = 0 while not_last_page: decodejson = getjson(eachcity, page_num) #print (eachcity, page_num) if decodejson[‘results‘]: for eachone in decodejson[‘results‘]: try: park = eachone[‘name‘] except: park = None try: location_lat = eachone[‘location‘][‘lat‘] except: location_lat = None try: location_lng = eachone[‘location‘][‘lng‘] except: location_lng = None try: address = eachone[‘address‘] except: address = None try: street_id = eachone[‘street_id‘] except: street_id = None try: uid = eachone[‘uid‘] except: uid = None sql = """INSERT INTO baidumap.city (city, park, location_lat, location_lng, address, street_id, uid) VALUES (%s, %s, %s, %s, %s, %s, %s);""" cur.execute(sql, (eachcity, park, location_lat, location_lng, address, street_id, uid,)) conn.commit() page_num += 1 else: not_last_page = False cur.close() conn.close()
四.获取所有公园的详细信息
baidumap数据库已经有了city这个表格,存储了所有城市的公园数据,但是这个数据比较粗糙,接下来我们使用百度地图检索服务获取没一个公园的详情
#coding=utf-8 import pymysql conn= pymysql.connect(host=‘localhost‘ , user=‘root‘, passwd=‘*******‘, db =‘baidumap‘, charset="utf8") cur = conn.cursor() sql = """CREATE TABLE park ( id INT NOT NULL AUTO_INCREMENT, park VARCHAR(200) NOT NULL, location_lat FLOAT, location_lng FLOAT, address VARCHAR(200), street_id VARCHAR(200), telephone VARCHAR(200), detail INT, uid VARCHAR(200), tag VARCHAR(200), type VARCHAR(200), detail_url VARCHAR(800), price INT, overall_rating FLOAT, image_num INT, comment_num INT, shop_hours VARCHAR(800), alias VARCHAR(800), keyword VARCHAR(800), scope_type VARCHAR(200), scope_grade VARCHAR(200), description VARCHAR(9000), created_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id) );""" cur.execute(sql) cur.close() conn.commit() conn.close()
import requests import json import pymysql conn= pymysql.connect(host=‘localhost‘ , user=‘root‘, passwd=‘********‘, db =‘baidumap‘, charset="utf8") cur = conn.cursor() sql = "Select uid from baidumap.city where id > 0;" cur.execute(sql) conn.commit() results = cur.fetchall() cur.close() conn.close()
import requests import json import pymysql conn= pymysql.connect(host=‘localhost‘ , user=‘root‘, passwd=‘********‘, db =‘baidumap‘, charset="utf8") cur = conn.cursor() sql = "Select uid from baidumap.city where id > 0;" cur.execute(sql) conn.commit() results = cur.fetchall() #print(results) def getjson(uid): headers = ‘User-Agent‘ : ‘Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6‘ pa = ‘uid‘: uid, ‘scope‘: ‘2‘, ‘output‘: ‘json‘, ‘ak‘: ‘填写自己的AK‘ r = requests.get("http://api.map.baidu.com/place/v2/search", params=pa, headers= headers) decodejson = json.loads(r.text) return decodejson for row in results: print(row) uid = row[0] decodejson = getjson(uid) #print (uid) info = decodejson[‘result‘] try: park = info[‘name‘] except: park = None try: location_lat = info[‘location‘][‘lat‘] except: location_lat = None try: location_lng = info[‘location‘][‘lng‘] except: location_lng = None try: address = info[‘address‘] except: address = None try: street_id = info[‘street_id‘] except: street_id = None try: telephone = info[‘telephone‘] except: telephone = None try: detail = info[‘detail‘] except: detail = None try: tag = info[‘detail_info‘][‘tag‘] except: tag = None try: detail_url = info[‘detail_info‘][‘detail_url‘] except: detail_url = None try: type = info[‘detail_info‘][‘type‘] except: type = None try: overall_rating = info[‘detail_info‘][‘overall_rating‘] except: overall_rating = None try: image_num = info[‘detail_info‘][‘image_num‘] except: image_num = None try: comment_num = info[‘detail_info‘][‘comment_num‘] except: comment_num = None try: key_words = ‘‘ key_words_list = info[‘detail_info‘][‘di_review_keyword‘] for eachone in key_words_list: key_words = key_words + eachone[‘keyword‘] + ‘/‘ except: key_words = None try: shop_hours = info[‘detail_info‘][‘shop_hours‘] except: shop_hours = None try: alias = info[‘detail_info‘][‘alias‘] except: alias = None try: scope_type = info[‘detail_info‘][‘scope_type‘] except: scope_type = None try: scope_grade = info[‘detail_info‘][‘scope_grade‘] except: scope_grade = None try: description = info[‘detail_info‘][‘description‘] except: description = None sql = """INSERT INTO baidumap.park (park, location_lat, location_lng, address, street_id, uid, telephone, detail, tag, detail_url, type, overall_rating, image_num, comment_num, keyword, shop_hours, alias, scope_type, scope_grade, description) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s);""" cur.execute(sql, (park, location_lat, location_lng, address, street_id, uid, telephone, detail, tag, detail_url, type, overall_rating, image_num, comment_num, key_words, shop_hours, alias, scope_type, scope_grade, description,)) conn.commit() cur.close() conn.close()
使用百度地图api查地理坐标(代码片段)
...是API?如何使用API呢?本文分享了一下我对API的理解以及百度地图API的使用。API是"ApplicationProgrammingInterface(应用程序编程接口)"的缩写。如果那一大堆的术语和定义让你头晕,不妨试着这样理解:网络服务商(比如百度... 查看详情
taro之使用百度地图(代码片段)
适配h5的时候要使用地图功能获取位置,选取了百度地图。首先在index.html文件引入。<scripttype="text/javascript"src="http://api.map.baidu.com/api?v=2.0&ak=你的key"></script>之后的实现参考了些资料。具体代码如下:(这样就实现... 查看详情
百度地图根据输入地址获取坐标(代码片段)
首先新建一个html页面,然后引用百度地图api:<htmlxmlns="http://www.w3.org/1999/xhtml"><head><title>根据地址查询经纬度</title><metahttp-equiv="Content-Type"content="text/html;charset=utf-8"><scrip 查看详情
百度地图api图标文本图例与连线(代码片段)
百度地图开放平台功能强大,使用简单,为地图的自定义提供了非常方便的途径!本文以绘制一张全国机器辐射图为例记录其基本使用方法,效果如下图:图中包括了带图标和文本的标注,连线以及图例。1.关于坐标说到地图,... 查看详情
vue中调用百度地图获取经纬度(代码片段)
...取经纬度信息,我使用的的是vue,地图使用的是百度地图。默认自动获取当前位置经纬度拖动小红标获取经纬度关键词查询获取经纬度前期准备首先,我们需要取百度官方申请一个地图api秘钥,https://lbsyun.baidu.com/... 查看详情
数据可视化大屏百度地图绘制行政区域标注实战案例解析(个性化地图标注视频控件定位检索)(代码片段)
百度地图开发系列目录数据可视化大屏应急管理综合指挥调度系统完整案例详解(PHP-API、Echarts、百度地图)数据可视化大屏百度地图API开发:停车场分布标注和检索静态版百度地图高级开发:map.getDistance计算多... 查看详情
百度地图api——多点路径连线问题(代码片段)
...线问题,我的一些解决方式,以及对于之前所学习的一些百度地图API基本使用的一个小结。如果有小伙伴没有看过之前的百度地图API基本使用(一)|8月更文挑战,百度地图API基本使用(二)|8月更文挑战,百度地图API基本使... 查看详情
js调用百度地图api(代码片段)
...API调用就好。在国内google地图是用不了了,只能选了百度地图。首先需要引用百度地图的API<scripttype="text/javascript"src="http://api.map.baidu.com/a 查看详情
前端vue3项目中百度地图的使用api及实例(代码片段)
目录一、使用百度地图的准备工作?二、百度地图的简单Demo三、百度地图的常用api有哪些?1、百度地图的类型?2、百度地图控件一、使用百度地图的准备工作?1、先注册百度账号-->申请成为百度开发者-->获... 查看详情
地图(用echarts绘制)(代码片段)
...出不同地理位置上数据的差异地图图表的两种使用方式①百度地图API ②矢量地图数据基本实现1.ECharts最基本的代码结构2.准备中国地图的矢量数据下载地址3.使用Ajax获取矢量地图数据4.在Ajax的回调函数中注册地图矢量数据... 查看详情
高级接口--获取用户地理位置(代码片段)
...坐标到地址:WGS-84,GCJ-02(腾讯地图,Google中国地图),百度坐标系统。(百度地图支持将 WGS-84,GCJ-02转换成百度坐标的功能) 当微信公众号获取用户地理位置坐标以后,需要将坐标转换成用户的真实所在地,以便更直... 查看详情
如何调用百度地图api
在百度搜索框输入“百度地图api”查找到百度地图api的网站。如下图:进入到上图的百度地图api首页。把网页滚动到下面可以看见“申请密钥”功能,如下图:点击“申请密钥”按钮,进入登陆界面。没有百度帐号则注册一个。... 查看详情
浅谈百度地图的简单开发之实现地图全景,内景展示功能(代码片段)
今天,我就接着来浅谈一下关于百度地图的内景,外景的展示功能。今天具体要实现的功能就是输入该地点的名称然后就展示该地点的内景图片,有内景就展示内景,没有则显示该地点的街景,该功能是参考... 查看详情
百度地图api爬取不同类型poi的详细数据(代码片段)
一、相关概念查询某个范围内的所有POI参数介绍:page_size:单次查询返回的POI的数量,最大值为20page_num:查找的POI数量超过20时,会分页显示;比如60个POI就会分3页;此时,page_num=1/2/3会先显示... 查看详情
百度地图(代码片段)
1.创建ak,加载百度地图SDKhttps://www.easy-mock.com/mock/5a7278e28d0c633b9c4adbd7/api/order/detail?orderId=1在public文件夹的index.html里添加<scripttype="text/javascript"src="http://api.map.baidu.com/api?v=2.0&ak 查看详情
tw实习日记:第13天(代码片段)
昨天困扰的问题终于解决了。因为是百度地图api提供的函数,所以这个解决办法并不适用于所有异步请求,仅仅针对百度地图api的调用接口函数和回调函数。有两种解决方法可以解决百度地图api中常出现的请求回调的顺序问... 查看详情
关于百度地图(代码片段)
本篇文章主要记录js应用百度地图或者h5获取gps信息时在安卓手机、ios手机浏览器、微信以及app中的不同表现;首先贴一下h5获取gps和百度地图获取gps信息的代码:1.h5获取gps:varposition_option=enableHighAccuracy:false,//是否启用高精度设备... 查看详情
百度api使用说明(代码片段)
.初始化地图,并设置地图中心点复制代码https://www.cnblogs.com/zqzjs/p/5293698.htmlvarmap=newBMap.Map("allmap");//创建Map实例map.centerAndZoom(newBMap.Point(116.404,39.915),11);//初始化地图,设置中心点坐标和地图级别当然也可以根据城市名称设置地图的... 查看详情