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

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))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/526490.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

oracle 对两列加唯一性束_oracle中创建unique唯一约束(单列和多列) 。

oracle中的unique约束是用来保证表中的某一类,或者表中的某一类组合起来不重复的一种手段。我们在可以在创建表时或者创建好后通过修改表的方式来创建oracle中的unique约束。下面是一些创建unique约束的例子:create table unique_test(id number,fname varchar2(20)…

foc 电流环解耦_永磁同步电机矢量控制的解耦及电流环的设计

闸的情况下,系统的初始加速度均为LTJ,如此看来,不管如何优化设定系统的参数,能够改变的仅仅是加速度的变化模式及其经历过程的时间长短,而其最大加速度数值是无法改变的。实际系统当然不会这么理想,至少传…

vivoy9s怎么设置返回键_vivoy9s怎么设置返回键 可以使用虚拟导航键

vivoy9s是支持全面屏手势的,若用户想要返回操作的话,主要看用户选择的手势导航方式,一般来说可以通过上滑返回到手机桌面,当然了,若用户不习惯手势导航,可以设置虚拟导航键,这样的话手机屏幕下方…

1万并发服务器配置_小程序后端服务器搭建:云服务器配置(1)

起因最近在搞小程序,有一个留言与图片上传并展示的功能,用小程序自带云服务器也可以实现,但如果与别的端进行多端互动就需要一个服务器来做为后端,进行图片与留言的上传,并把留言内容和上传后的图片地址保存到sql数据库…

cgo的效率 golang_golang CGO FAQ TIPS : cgo 从 C 传递 slice 到 go

cgo 从 C 传递 slice 到 go这里一般会用在c的callback中。需要加一个wrapper,比直接调用go函数中间多了一个转换步骤,但方便了许多。执行流程为,c调用发起 -> c wrapper -> go export.go://export a_function_callbackfunc a_function_…

php 图片印章_php工具型代码之印章抠图

能将白底红字的印章抠出来,用的是php,框架是laravel,其他框架请自行调节。扣其他颜色也可以,把里面的那段rgb参数判断改改就行了,最后抠出来的效果就是白底变透明,然后只留下红色的章,放在其他页…

vb mysql_VB连接MYSQL实例

VB连接MYSQL实例电脑需安装数据库mysql server和mysql connector net相关版本软件。在工程的‘项目’-‘添加引用’中添加引用‘mysql.data’实现代码如下:Imports System.IOImports SystemImports System.DataImports System.Windows.FormsImports MySql.Data.MySq…

c web mysql数据库_C连接Mysql数据库代码

//vc工具中添加E:\WAMP\BIN\MYSQL\MYSQL5.5.8\LIB 路径//在工程设置-》链接》库模块中添加 libmysql.lib#include #include #include #include #include "E:\wamp\bin\mysql\mysql5.5.8\include\mysql.h"void main(){MYSQL *conn;MYSQL_RES *res;MYSQL_ROW row;char …

ext 如何判断是否是整数_Excel表格技巧—如何用ISNUMBER判断是否是数值

在EXCEL的单元格中,有些单元格为填写的不是数值,在某些情况下,会影响计算结果,例如,以下的表格中,红框内的单元格一个是输入了一个空格,另一个“—”符号,后面平均值的计算未将该单元…

ensp安装对电脑配置要求高吗_直线导轨有哪些安装方法?为什么直线导轨安装精度要求高?...

要点:1、为什么直线导轨安装精度要求高;2、直线导轨的安装流程;3、直线导轨不同安装方法介绍。点击链接加入群聊【solidworks机械设计学习】:正在跳转​jq.qq.comhttps://www.zhihu.com/video/1197242052088516608

mysql查看版本号_十分钟了解MySQL事务机制

读书百遍其义自现。MySQL数据库在我们平时工作学习中的使用频率是相当之高,彻底掌握MySQL的事务机制对我们平时工作会有非常大的帮助,仔细回忆一下,你是否对MySQL事务相关的知识是否完全掌握?是否感觉有的地方有些模糊&#xff1f…

mysql 字符串类型 分区_MySQL分区类型

博文大纲:1、RANGE分区2、LIST分区3、HASH分区4、key分区5、MySQL分表和分区的区别6、附加:如何实现将分区放在不同的目录下进行存储MySQL分区类型如下:RANFGE分区LIST分区HASH分区key分区上面的四种分区的条件必须是整形,如果不是…

h5获取http请求头_nodejs 中http请求头,响应头

-------------------- 1.request常见的属性 -----------------------var httprequire("http");var serverhttp.createServer(); //创建服务器server.on("request",function(req,res){// request.headers 打印全部请求头信息--对象形式// request.rawHeader…

mysql邮箱认证_邮件服务系列postfix+sasl+mysql实现用户认证功能

1、卸载bind[rootmail ~]# rpm -e bind-utils2、安装bind97-utils bind97-libs bind97[rootmail ~]# yum install bind97 bind97-utils #bind97-libs依赖于utils3、启动dns服务[rootmail ~]# service named start4、编写配置文件和区域数据文件[rootmail ~]# vim /etc/named.…

python多进程队列中的队列_python 多进程队列数据处理详解

我就废话不多说了,直接上代码吧!# -*- coding:utf8 -*-import paho.mqtt.client as mqttfrom multiprocessing import Process, Queueimport time, random, osimport camera_person_numMQTTHOST "172.19.4.4"MQTTPORT 1883mqttClient mqtt.…

UOS nginx

 安装 nginx 软件包;  配置文件名为 ispweb.conf,放置在/etc/nginx/conf.d/目录下;  网站根目录为/mut/crypt(目录不存在需创建);  启用 FastCGI 功能,让 nginx 能够解析 php 请求&a…

mysql数据库重做日志文件_mysql数据库重做日志

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里云数据库专家保驾护航,为用户…

mysql免安装如何改密码_mysql免安装版配置与修改密码的教程

第一步:配置环境变量(我的解压路径:G:\mysql\mysql-5.7.21-winx64 )MYSQL_HOME你解压的路径PATH ;%MYSQL_HOME %\bin;PATH变量是在原来的基础上多添加的,不要把其它的设置给删掉了第二步在解压的目录下添加my.ini 文件(如果已经有了这个文件&#xff0c…

unix 登录mysql_实例分析mysql用户登录。

今天,在学习mysql授权认证时,遇到了一个问题,看下,我是如何分析的:我在数据库内添加了一个帐号:create databases firstdb;grant all on firstdb.* to ‘firstdb’’’ identified by ‘xxxxx’;flush priv…

拉普拉斯时域卷积定理_如何证明频域卷积定理

展开全部设抄IF表示傅立叶逆变换,则因此有袭故频域卷积定2113理5261得证。4102扩展资料频域卷积定理频域卷积定理表明两信号1653在时域的乘积对应于这两个信号傅立叶变换的卷积除以2π。卷积定理揭示了时间域与频率域的对应关系。这一定理对Laplace变换、Z变换、Mel…