上篇关于爬虫的文章,我们讲解了如何运用Python的requests及BeautifuiSoup模块来完成静态网页的爬取,总结过程,网页爬虫本质就两步:

1、设置请求参数(url,headers,cookies,post或get验证等)访问目标站点的服务器;

2、解析服务器返回的文档,提取需要的信息。

而API的工作机制与爬虫的两步类似,但也有些许不同:

1、API一般只需要设置url即可,且请求方式一般为“get”方式

2、API服务器返回的通常是json或xml格式的数据,解析更简单

也许到这你就明白了,API简直就是开放的“爬虫”呀,可以告诉你,基本就是这个意思。好的,言归正传,本篇我们就演示如何运用Python结合百度地图API来批量获取POI(兴趣点)。

所谓POI(兴趣点),指的是人们感兴趣,比较常去的地方,比如银行、医院、学校等,利用城市的POI的空间属性可以做非常多的事情,至于什么事情呢,此处省略10000字。。。

说干就干,Let's go!

(1)创建百度地图应用

访问百度地图API需要一个信令(AK),打开百度地图开放平台,点击右上角“API控制台”,即进入了百度地图的开发界面。

选择“创建应用”-应用类型勾选“浏览器端”–勾选所用到的服务(一般全选即可),此时就创建好了应用账号,得到“AK”

(2)Place API 及Web服务API

打开百度地图API的POI模块,网址:http://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-placeapi,这个页面详细介绍了Place API的请求参数及返回数据的情况。

可以看到,Place API 提供区域检索POI服务与POI详情服务。

1. 区域检索POI服务提供三种区域检索方法:

a.城市内检索(对应JavaScriptAPI的Search方法)

b.矩形检索(对应JavaScript API的SearchInBound方法)

c.圆形区域检索(对应JavaScript的SearchNearBy方法)。

2. POI详情服务提供查询单个POI的详情信息,如好评。

并给出了请求的一个示例,设置检索城市为北京,检索关键字为“饭店”,检索后返回10条数据:

http://api.map.baidu.com/place/v2/search?q=饭店&region=北京&output=json&ak=您的AK

将上述url粘贴到浏览器里,返回的数据如下:

上图是将返回的json数据解析之后的结果,可以看到,服务器返回了10条北京市的饭店的信息,包括饭店名称、经纬度、地址、联系电话等。

具体的参数设置,自行去该网页去看吧,这里就不再赘述,这里我们主要利用“矩形检索”的方式来获取整个城市的特定POI信息,其url格式如下:

http://api.map.baidu.com/place/v2/search?query=美食&page_size=10&page_num=0&scope=1&bounds=39.915,116.404,39.975,116.414&output=json&ak={您的密钥}

通过实验可以发现,一个矩阵区域最多返回400(20*20)个POI点,即page_size = 20 & page_total = 20,虽然官方文档里说一个区域返回760+都不成问题的,但是测试了一下,发现并没有这么多,最多400个。

显然,整个城市不可能仅400个特定描述的POI点,所以我们需要对整个城市进行分片操作,然后每片进行访问,通过Python的循环实现。

(3)获取城市特定POI点集合

比如:我们想获取北京市四环以内所有饭店的信息,即可通过上述步骤借助Python快速实现,废话不多说,直接上代码:

# -*- coding: utf-8 -*-

# Python 2.7

# 提取城市的POI点信息并将其保存至MongoDB数据库

import urllib2

import json

from pymongo import MongoClient

left_bottom = [116.282387,39.835862]; # 设置区域左下角坐标(百度坐标系)

right_top = [116.497405,39.996569]; # 设置区域右上角坐标(百度坐标系)

part_n = 2; # 设置区域网格(2*2)

client = MongoClient('localhost',27001)

db = client.transdata

db.authenticate("user", "password")

col = db.taxi; # 连接集合

url0 = 'http://api.map.baidu.com/place/v2/search?';

x_item = (right_top[0]-left_bottom[0])/part_n;

y_item = (right_top[1]-left_bottom[1])/part_n;

query = '饭店'; #搜索关键词设置

ak = 'xxxxxxxxxxxxxxxxxxxxxx'; #百度地图api信令

n = 0; # 切片计数器

for i in range(part_n):

for j in range(part_n):

left_bottom_part = [left_bottom[0]+i*x_item,left_bottom[1]+j*y_item]; # 切片的左下角坐标

right_top_part = [right_top[0]+i*x_item,right_top[1]+j*y_item]; # 切片的右上角坐标

for k in range(20):

url = url0 + 'query=' + query + '&page_size=20&page_num=' + str(k) + '&scope=1&bounds=' + str(left_bottom_part[1]) + ',' + str(left_bottom_part[0]) + ','+str(right_top_part[1]) + ',' + str(right_top_part[0]) + '&output=json&ak=' + ak;

data = urllib2.urlopen(url);

hjson = json.loads(data.read());

if hjson['message'] == 'ok':

results = hjson['results'];

for m in range(len(results)): # 提取返回的结果

col.insert_one(results[m]);

n += 1;

print '第',str(n),'个切片入库成功'

执行为上述代码,运行结果如下:

可以看到,我们将北京市四环以内区域分成4个切片来进行处理,之所以分切片处理,主要是单个区域访问最多返回400个结果,当区域较大的时候,区域内往往不止400个,所以讲大区域进行切片处理,最后,我们通过数据聚合操作,发现返回的结果总共1014个。(理论上应该返回1600,实际返回1014,说明切片的数量是合适的)

好的,我们本篇的分享到这里就要结束了,最后只想说,API真的是个好东西,科学地使用它我们可以做出很多炫酷的应用,像现在比较活跃的数据型应用,其数据接口基本都是基于API形式的,后面的分享我们还会用到更多API的,大家一起期待吧,哈哈,今天就到这里了,各位回见。

本文标题: Python爬虫实例_利用百度地图API批量获取城市所有的POI点

本文地址: http://www.cppcns.com/jiaoben/python/217284.html

python批量爬取小网格区域坐标系_Python爬虫实例_利用百度地图API批量获取城市所有的POI点...相关推荐

  1. 【python】python利用百度地图API:获取经纬度、地图撒点

    本文目的: python通过百度地图API,获取所给地址的经纬度,并且在百度地图上进行撒点. 另:百度地图API功能强大,如: GPS功能(单个点沿线运动). 信息窗口示例(添加纯文字的信息窗口). ...

  2. python爬取b站搜索结果_Python爬虫实例:爬取猫眼电影——破解字体反爬,Python爬虫实例:爬取B站《工作细胞》短评——异步加载信息的爬取,Python爬虫实例:爬取豆瓣Top250...

    字体反爬 字体反爬也就是自定义字体反爬,通过调用自定义的字体文件来渲染网页中的文字,而网页中的文字不再是文字,而是相应的字体编码,通过复制或者简单的采集是无法采集到编码后的文字内容的. 现在貌似不少网 ...

  3. mysql地名模糊匹配合并_调用百度地图API批量搜索地名并返回地址及坐标

    批量获取模糊搜索地址名称及坐标 搜索城市 地名关键词 显示结果 function $(id){ return document.getElementById(id);//定义$,以便调用 } var ...

  4. python爬取京东商品图片_python利用urllib实现爬取京东网站商品图片的爬虫实例

    本例程使用urlib实现的,基于python2.7版本,采用beautifulsoup进行网页分析,没有第三方库的应该安装上之后才能运行,我用的IDE是pycharm,闲话少说,直接上代码! # -* ...

  5. python 接入百度地图数据包下载_Python爬虫-利用百度地图API接口爬取数据并保存至MySQL数据库...

    首先,我这里有一份相关城市以及该城市的公园数量的txt文件: 分析-02.png 其次,利用百度地图API提供的接口爬取城市公园的相关信息. 所利用的API接口有两个: 1.http://api.ma ...

  6. 【实用工具系列之爬虫】python实现爬取代理IP(防 ‘反爬虫’)

    系列 [实用工具系列之爬虫]python实现爬取代理IP(防 '反爬虫') [实用工具系列之爬虫]python实现快速爬取财经资讯(防 '反爬虫') 本文使用python实现代理IP的爬取,并可以防' ...

  7. python爬取公交车站数据_Python爬虫实例_城市公交网络站点数据的爬取方法

    爬取的站点:http://beijing.8684.cn/ (1)环境配置,直接上代码: # -*- coding: utf-8 -*- import requests ##导入requests fr ...

  8. python实践 爬取豆瓣各个标签的电影 爬虫

    python实践 爬取豆瓣各个标签的电影 实践题目 爬取豆瓣电影中,华语.欧美.韩国.日本电影每个标签下按评价排序的全部电影,需要如下信息: (1)每个电影的电影名.导演.编剧.主演.类型.国家.上映 ...

  9. python可以爬取的内容有什么_Python爬取视频(其实是一篇福利)过程解析 Python爬虫可以爬取什么...

    如何用python爬取视频网站的数据 如何用python爬取js渲染加载的视频文件不是每个人都有资格说喜欢,也不是每个人都能选择伴你一生! 有哪位大神指导下,有些视频网站上的视频文件是通过 js 加载 ...

最新文章

  1. More Effective C++: 01基础议题
  2. java怎么创建二进制文件_Java:如何编写二进制文件?
  3. SSDT表与ShadowSSDT表
  4. java rowmapper 通用实现_必经之路!各大网站力推Java代码优化:77案例+28技巧
  5. c语言机考答案,全国计算机等级考试C语言上机试题题库(内附答案)
  6. 一个奇怪的MySQL慢查询,打懵了一群不懂业务的DBA!
  7. vba mysql_VBA连接Mysql数据库
  8. Java链表——创建链表对象
  9. 审计工作存在的难点和问题_浅谈审计整改工作存在的困难及对策
  10. 手提电脑无法管理计算机,细说笔记本键盘无法输入怎么办
  11. 写Python爬虫又被屏蔽了,你现在需要一个稳定的代理IP
  12. 吴恩达Course1《神经网络与深度学习》week2:神经网络基础 测验及作业
  13. 如何设计出优秀的EDM邮件营销模板
  14. RuoYi框架首页问题
  15. 体验腾讯云区块链服务平台TBaaS
  16. GAT - Graph Attention Network 图注意力网络 ICLR 2018
  17. 强大的长江干线水运能力
  18. 都匀三中2021高考成绩查询,2017年黔南州高考各县市600分以上人数统计表,都匀市仅排第九。...
  19. 熬之滴水穿石:Delphi曾经的利器(2)
  20. 内网渗透系列:横向渗透方法小结

热门文章

  1. Delphi XE4 For IOS之部署问题
  2. zabbix 源码编译安装
  3. 20180320作业1:源代码管理工具调查
  4. MYSQL使用存储过程插入中文数据的疑似bug(UTF8)
  5. RH442-10 内存回收之二
  6. text-size-adjust: 100% 有什么作用?
  7. 【转】VMware虚拟机中CentOS设置固定IP
  8. P114、面试题17:合并两个排序的链表
  9. HTML5 网站大观:应用图片大背景的优秀 HTML5 网站作品
  10. VC2005与IE8的冲突解决