最近工作需要整理了一些百度地图接口查询北京住宅小区的相关信息。该篇文章主要从如下3个方面的说明:Web服务API -地点检索服务、需求分析 和 PYTHON实现 。

Web服务API -地点检索服务:

链接:http://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-placeapi

API接口服务

该服务提供多种场景的地点(POI)检索功能,包括行政区划区域检索、圆形区域检索、矩形区域检索。开发者可通过接口获取地点(POI)基础或详细地理信息。

  • 行政区划区域检索:检索某一行政区划内(目前最细到城市级别)的地点信息。
  • 圆形区域检索:设置圆心和半径,检索圆形区域内的地点信息(常用于周边检索场景)。
  • 矩形区域检索:设置检索区域左下角和右上角坐标,检索坐标对应矩形内的地点信息(常用于手机或PC端地图视野内检索)
  • 地点详情检索:不同于以上三种检索功能。地点详情检索针对指定POI,检索其相关的详情信息。开发者可以通过三种区域检索(或其他服务)功能,获取POI id。使用“地点详情检索”功能,传入id,即可检索POI详情信息,如评分、营业时间等(不同类型POI对应不同类别详情数据)。

需求分析

需求内容:抓取全北京的住宅小区的数据,通过分析接口有单次返回记录数 和 最大分页为20的限制,因此采用 矩形区域检索 来抓取相关数据。

矩形区域检索请求接口:http://api.map.baidu.com/place_abroad/v1/search?query=房地产&page_size=10&page_num=0&scope=2&bounds=35.66597,139.797339,35.677669,139.813544&output=json&ak={您的密钥} //GET请求

该接口重点输入参数:

  1. query:检索关键字。周边检索和矩形区域内检索支持多个关键字并集检索,不同关键字间以$符号分隔,最多支持10个关键字检索。如:”银行$酒店”。
  2. page_size:单次召回POI数量,默认为10条记录,最大返回20条。多关键字检索时,返回的记录数为关键字个数*page_size。
  3. scope:检索结果详细程度。取值为1 或空,则返回基本信息;取值为2,返回检索POI详细信息
  4. bounds:检索矩形区域,多组坐标间以","分隔
  5. 其他参数见接口规范。

PYTHON代码实现

首先将北京划分成40*40 的栅格,一个一个栅格进行数据抓取,再通过解析获取最终数据。

具体代码实现如下:

# -*- coding: utf-8 -*-import numpy as np  # 导入数值计算扩展模块import pandas as pdimport requests     # 导入网页请求模块import time, mathunit = 40 #40*40个栅格lat_partion = [round(x,6) for x in list(np.linspace(39.340000,41.180000, unit))]    # 维度划分,保留6位小数lng_partion = [round(y,6) for y in list(np.linspace(115.420000,117.500000, unit))]  # 经度划分,保留6位小数community_data_list = []def get_community():            # 自定义按区域获取小区名称的函数    for i in range(7, 39):      # 横向栅格索引        # time.sleep(10)        for j in range(0, 39):  # 纵向栅格索引            not_max_page = True # 没有到达最大页面时循环            page_num = 0        # 从第一页开始            while not_max_page:                url = "http://api.map.baidu.com/place/v2/search?query=房地厂&scope=2&page_size=20&page_num=" + str(page_num) + "                &bounds=" + str(lat_partion[i]) + "," + str(lng_partion[j])+"," + str(lat_partion[i+1]) + "," + str(lng_partion[j+1]) +                 "&output=json&ak={您的密钥}"  # 构造请求网址,其中你的ak是你要向百度申请的密钥                header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36'}  # 构造请求头                response = requests.get(url, headers = header)  # 发出请求                time.sleep(1)                print(str(lat_partion[i]) ,str(lng_partion[j]), str(lat_partion[i+1]) , str(lng_partion[j+1]))                answer = response.json()  # json化                total = int(answer["total"])                max_page = math.ceil(total / 20)                if answer['status'] == 0:  # 如果正常返回                    print("# Rectangle (%d,%d)  Page %s" % (i, j, page_num))                    print("# Amount: %s" % len(answer['results']))                    print("# Total: %s" % total)                    page_num += 1                    if page_num > max_page:  # 到达最大页时推出循环到下一个单元                        break                    for k in range(len(answer['results'])):                         try:                            province = answer['results'][k]['province']    # 省份                            if province != "北京市":                                break                            city = answer['results'][k]['city']            # 城市                            area = answer['results'][k]['area']            # 区域                            uid = answer['results'][k]['uid']              # 唯一标识                            community = answer['results'][k]['name']       # 小区名称                            try:                                street_id = answer['results'][k]['street_id']    # 街道ID                            except KeyError:                                street_id = ""                            address = answer['results'][k]['address']      # 地址                            lat = answer['results'][k]['location']['lat']  # 纬度                            lng = answer['results'][k]['location']['lng']  # 经度                               try:                                detail = answer['results'][k]['detail_info']['tag']     # 小区类型                            except KeyError:                                detail = ""                            community_data = [province, city, area, uid,community, address,street_id,lat, lng, detail]  # 组成一条记录                            community_data_list.append(community_data)                            print(community_data)                        except KeyError:                                                       pass                else:                    print("* The rectangle (%d,%d) contains no community"%(i, j))                     break    return community_data_list                 data_tmp = get_community()data = pd.DataFrame(data_tmp)data.columns = ['省份','城市','区域','唯一标识','小区名称','地址','纬度','经度','小区类型']

后续将介绍如何获取该小区的边界及小区面积计算。

怎么获取web开发怎么获取手机的唯一标识_PYTHON实现北京住宅小区数据抓取-(Web服务API-地点检索服务)相关推荐

  1. 手机的唯一标识码 php,android手机获取唯一标识的方法

    获取手机唯一标识 拼接的方式获取手机唯一标识 第一种方式是获取IMEI,但是有的手机如果不是正品的话,就获取不到所以通过这一种方式还是会出现有的设备是没有唯一标识的 第二种方式获取手机卡的序列号,当然 ...

  2. Android登录客户端,验证码的获取,网页数据抓取与解析,HttpWatch基本使用

    大家好,我是M1ko.在互联网时代的今天,如果一个App不接入互联网,那么这个App一定不会有长时间的生命周期,因此Android网络编程是每一个Android开发者必备的技能,博主是在校大学生,自学 ...

  3. 全国城市空气质量实时发布平台数据抓取采集获取

    全国城市空气质量实时发布平台(https://air.cnemc.cn:18007/   原http://106.37.208.233:20035/)数据抓取采集获取,数据处理方法 import or ...

  4. python—简单数据抓取四(利用超级鹰的ocr识别图片验证码模拟登录超级鹰网站、利用百度云的ocr识别自如租房网价格图片获取到自如网的价格)

    学习目标: python学习二十四 -简单数据抓取四 学习内容: 1.利用超级鹰的ocr识别图片验证码模拟登录超级鹰网站 2.利用百度云的ocr识别自如租房网的价格图片,获取到自如网的价格数据 1.利 ...

  5. 手机设备唯一标识相关概念

    手机设备唯一标识相关概念 IMEI 定义 IMEI(International Mobile Equipment Identity)是国际移动设备识别码的缩写.俗称"手机串号".& ...

  6. Python爬虫实战:手机APP数据抓取分析!谁说不能爬取app数据的?

    大多数手机APP里面返回的是json格式数据,或者一堆加密过的数据 .这里以超级课程表APP为例,使用python抓取超级课程表里用户发的话题.主要是练习python爬取app的一些方式和技巧. 1. ...

  7. Golang实现web api接口调用及web数据抓取[get post模式]

    前沿: 继续扩展我的golang服务端,这边有些数据库是没有权限的,对方给了我webservices的接口,针对异常的数据,我要去抓数据,再次分析,golang貌似没有python那么多的模拟浏览器访 ...

  8. 手机应用url抓取_Python爬虫入门,快速抓取大规模数据(第六部分)

    在前面的章节中,我们以尽量少的代码演示了爬虫的基本原理.如果只是需要抓取一些简单的数据,那么我们修改一下前面的代码就可以完成任务了.但是当我们需要完成一些复杂的大型抓取任务时,我们就需要考虑更多东西, ...

  9. Jmeter压力测试 Web网页数据抓取-【教学篇】

    Jmeter快速使用 特此郑重声明!该文章是原创作品,小编编写实属不易 ,转载小伙伴请注明出处!谢谢 概述 Apache JMeter Apache组织开发的压力测试工具.目前通过HTTP和FTP服务 ...

最新文章

  1. 有哪些好的科研和学习习惯?
  2. 第一周:信息系统项目管理基础与立项管理作业视频讲解
  3. 国学早教视频 16G
  4. Policy-based RL小结(Policy Gradient ; Natural policy gradient ;TRPO;ACKTR;PPO )
  5. 乐玩插件和大漠插件哪个好_用好这5款Chrome插件,大幅提升你的生产力
  6. LeetCode 1784. 检查二进制字符串字段
  7. mysql删库后恢复_记一次MySQL删库的数据恢复
  8. python断言失败_python异常处理、断言
  9. HTML下拉菜单为什么无线拉长,【CSS】怎么拉长一个div的高度
  10. 博弈论初步(SG函数)
  11. 构建小型Linux跟文件系统镜像(Ext2 或 Ext3)
  12. poj 2560 Freckles
  13. JDK的Proxy技术实现AOP,InvocationHandler和Proxy详解——Spring AOP(三)
  14. Maven镜像源汇总(含国内、国外)
  15. IBM R52和T43 换硬盘报错 信息2010错误 解决方法
  16. diskmark使用教程
  17. CSS动画:梦幻西游
  18. OSChina 周三乱弹 —— 可乐帝国军人们,集结了
  19. fractional max pooling 和 multi-sample dropout
  20. 多因子风险建模-协方差矩阵、投资组合风险

热门文章

  1. 学习多媒体开发的正确姿势?陈功:看书 啃代码 搞插件
  2. 基于AVS2的图片容器——TPG:现状与改进之路
  3. 技术圈盛会!腾讯云+社区开发者大会免费报名!
  4. VSCode配置Python编辑器
  5. WebRtc音视频实时通信--基本术语
  6. Flink Checkpoint 机制:如何保证 barrier 和数据之间不乱序?
  7. leetcode 390. Elimination Game | 390. 消除游戏(Java)
  8. Python文件操作中的a,a+,w,w+,rb+,rw+,ra+几种方式的区别
  9. HTTP系列之:HTTP缓存
  10. 突发!HashiCorp禁止在中国使用企业版VAULT软件