1.数据接口:

本次使用百度地图开放平台中的地点检索API来获取城市POI数据,此次以矩形区域检索为例。

2.获取思路:

因为百度出于数据保护目的,单次访问服务最多同时返回400条数据,不过官方也给出了解决方案,即通过添加分类、设置范围等方式,从而缩小检索范围,满足数据获取要求。

要想获取一个大的矩形区域内的数据,就需要先将大区域划分成一个个的小区域,然后通过小区域范围去访问接口获取数据。

3.代码示例:

import requests

import json

import time

import pandas as pd

# 构建URL访问API部分

class BaiduPoi(object):

def __init__(self, query, loc, ak): # query:行业分类,loc:检索的位置坐标,ak:服务秘钥

self.query = query

self.loc = loc

self.ak = ak

# 构建访问URL

def urls(self):

urls = []

for i in range(0, 20):

url = 'http://api.map.baidu.com/place/v2/search?query=' + self.query + '&bounds=' + self.loc + '&page_size=20&page_num=' + str(

i) + '&output=json&ak=' + self.ak

urls.append(url)

return urls

# 访问APIP获取数据

def get_data(self):

for i, url in enumerate(self.urls()):

try:

# print(i,url)

js = requests.get(url).text

data = json.loads(js)

if data['total'] != 0:

for item in data['results']:

js = {}

js['一级行业'] = h1

js['二级行业'] = h2

js['name'] = item['name']

js['lat'] = item['location']['lat']

js['lng'] = item['location']['lng']

yield js

else:

print(url)

print('本页及以后无数据!')

break

except:

print('出现错误!')

with open('./log.txt', 'a') as fl:

fl.write(url+'\n')

# 大网格划分成小网格部分

class LocalDiv(object):

def __init__(self, loc_all,

divd): # loc_all:为构建访问url中的左下角(西南)坐标和右上角(东北)坐标(bounds=39.915,116.404,39.975,116.414);divd:分割网格大小

self.loc_all = loc_all

self.divd = divd

# 划分纬度

def lat_all(self):

lat_sw = float(self.loc_all.split(',')[0]) # 西南方向纬度

lat_ne = float(self.loc_all.split(',')[2]) # 东北方向纬度

lat_list = [str(lat_ne)]

while lat_ne - lat_sw > 0:

m = lat_ne - self.divd

lat_ne = lat_ne - self.divd

lat_list.append("{:.2f}".format(m))

return sorted(lat_list)

# 划分经度

def lng_all(self):

lng_sw = float(self.loc_all.split(',')[1]) # 西南方向经度

lng_ne = float(self.loc_all.split(',')[3]) # 东北方向经度

lng_list = [str(lng_ne)]

while lng_ne - lng_sw > 0:

m = lng_ne - self.divd

lng_ne = lng_ne - self.divd

lng_list.append("{:.2f}".format(m))

return sorted(lng_list)

# 将划分的经纬度进行组合

def ls_com(self):

lat = self.lat_all()

lng = self.lng_all()

latlng_list = []

for i in range(0, len(lat)):

a = lat[i]

for i2 in range(0, len(lng)):

b = lng[i2]

ab = a + ',' + b

latlng_list.append(ab)

return latlng_list

# 构建每个小网格的西南和东北点的坐标对

def ls_row(self):

lat = self.lat_all()

lng = self.lng_all()

latlng_list = self.ls_com()

ls = []

for n in range(0, len(lat) - 1):

for i in range(len(lng) * n, len(lng) * (n + 1) - 1):

coor_a = latlng_list[i]

coor_b = latlng_list[i + len(lng) + 1]

coor = coor_a + ',' + coor_b

ls.append(coor)

return ls

if __name__ == '__main__':

# 行业划分,根据需要可以自己构建行业划分标准

pois = {'商业': ['酒店', '购物'....],

'教育': ['高等院校', '中学', '小学', '幼儿园', ......],

。。。。。。

}

print('----------开始爬取数据!----------')

start_time = time.time()

loc = LocalDiv('填写要查询的坐标范围(例:31.131387,121.413508,31.343321,121.540564)', 0.01) # 查询范围坐标,网格大小,现在采取0.01度进行分割

locs_to_use = loc.ls_row()

for h1, v in pois.items():

print('爬取:', h1)

file_name = './baidu_poi_{}.csv'.format(h1)

for loc in locs_to_use:

for h2 in v: # 获取二级行业

par = BaiduPoi(h2, loc, ak='ak值')

dt = par.get_data()

df = pd.DataFrame(dt)

if len(df) != 0:

print(df)

df.to_csv(file_name,header=0,index=False,encoding='utf_8_sig',mode='a+')

time.sleep(1)

else:

pass

end_time = time.time()

print('所有poi数据已经爬取完毕,共耗时{:.2f}秒'.format(end_time - start_time))

python安装poi第三方库_使用Python获取城市POI数据相关推荐

  1. python安装成功第三方库但import出问题_解析pip安装第三方库但PyCharm中却无法识别的问题及PyCharm安装第三方库的方法教程...

    一.问题具体描述: 在cmd控制台 pip install xxxx 后并显示安装成功后,并且尝试用cmd 的python 中import xxxx ,没有显示异常,说明这个库是安装成功了的.(这里以 ...

  2. python批量安装第三方库_使用Python批量安装第三方库

    Python的很多功能通过第三方库实现,99%的第三方库可以通过Python自带的pip方法进行自动下载和安装.然而Python有几十万个第三方库,最常用的也有几十个.想要一次性地安装几十个常用的第三 ...

  3. python怎么查看安装了哪些库_怎么查看python安装的第三方库

    有时候我们在使用python的时候,想知道自己安装哪些了第三方库以及第三方库的版本,下面来分享一下方法 工具/原料 python 查看安装了哪些第三库 方法一:通过命令查看 1 第一步在我们的电脑上打 ...

  4. python基础和第三方库 笔记(python基础完结包括高级用法,第三方库持续更新中...)

    python基础 注:本笔记面向有一定基础的人 本笔记是本人快速复习python过程中记录的,不适合零基础的人学习python的主工具,可以作为辅工具,本笔记记录了入门阶段常用操作,如有错误的地方,希 ...

  5. 如何查看python安装了什么库-怎么看python安装了哪些库

    随着使用python的时间越来越长,安装的python模块也越来越多,时间久了都不记得自己之前到底对自己的电脑做过些什么了,于是乎就想要查看一下自己安装的python模块,现将查看方法总结如下 一.命 ...

  6. pythonidle安装第三方库_在Python IDLE 下调用anaconda中的库教程

    在Python IDLE 下调用anaconda中的库教程 大家都知道,Anaconda是一个开源的Python发行版本,其包含了conda.Python等180多个科学包及其依赖项.下载了anaco ...

  7. c调用python第三方库_用 Python ctypes 来调用 C/C++ 编写的第三方库

    看到一篇简洁的文章--如何用Python ctypes调用C++(ctypes调用C没这么多麻烦事),不敢独享... 如果需要用 Python 调用 C/C++ 编写的第三方库(这些第三方库很可能就是 ...

  8. python web开发第三方库_以下属于Python中Web开发框架第三方库的是__________

    以下属于Python中Web开发框架第三方库的是__________ 答:Django 关于为何要敬业乐群,下列说法错误的是?() 答:敬业乐群可以作为提升我们学习.工作的效率和成果,乃至提升我们生命 ...

  9. python语言的第三方库_常用的Python第三方库

    今天公司停电,没上班.跑上来更新个博客,跟大家分享一下我常用的几个第三方 Python 库.Python 语言之所以能够如此流行,除了本身内置许多程序库来保障快速开发之外,目不睱接的第三方库也是一大主 ...

最新文章

  1. 链表问题13——删除无序单链表中值重复出现的节点(方法二)
  2. 矩阵快速幂 - 湘潭大学
  3. 特斯拉员工自曝:为应付产能不惜偷工减料,出厂测试得过且过
  4. K8S调度之pod亲和性
  5. 磁盘阵列介绍、进程的查看管理、日志文件的查看分析,systemctl的控制
  6. computer science sticker
  7. ios 开发账号 退出协作_如何在iOS 10中的Notes上进行协作
  8. [2020-11-23 contest]图(dfs剪枝),劫富济贫(字典树),小A的树(树形DP),游戏(贪心/斜率优化)
  9. Sqlite SQL格式化输入函数splite3_mprintf
  10. LeetCode 1089. 复写零
  11. eclipse输入中文乱码,问题已解决
  12. Android下的HttpClient的使用(9.11)
  13. mac mysql 8.0.11安装_Mac下安装mysql8.0.11
  14. Linux Lite下打印机驱动安装及针式打印机校准
  15. java 单点_java实现单点登录的两种方式
  16. [ahk]热键呼叫QQ经常聊天的人
  17. java 无法加载dll_java中调用本地动态链接库(*.DLL)的两种方式详解和not found library、打包成jar,war包dll无法加载等等问题解决办法...
  18. AR与VR的区别在哪?
  19. MAVEN-POM.XML配置解读
  20. [JLOI2008]将军

热门文章

  1. 跑得好好的Java进程,怎么突然就瘫痪了?
  2. 结构化数据存储,如何设计才能满足需求?
  3. Terraform 开发指南
  4. 瑞欧威尔联合创始人兼CEO 李波博士:“工业元宇宙”是为了更好赋能实体经济
  5. 【不吹不黑】详解容器技术架构、网络和生态
  6. Linux里怎么进行路由跟踪,[Linux] traceroute 路由跟踪指令用例
  7. apache php隐藏头信息的方法,apache、php隐藏http头部版本信息的实现方法
  8. 杭州南江机器人现在是否量产_传亚马逊正开发家庭机器人,高约1米可移动
  9. html点击按钮不响应_html 脚本标签
  10. python编程中条件句_简单讲解Python编程中namedtuple类的用法