Python for Infomatics 第13章 网页服务四(译)
这几天因为其他事务,打断了自己的学习计划,今天继续我的翻译,避免又中途而废。
注:文章原文为Dr. Charles Severance 的 《Python for Informatics》。文中代码用3.4版改写,并在本机测试通过。
13.7 谷歌的 geocoding 网页服务
谷歌公司有一个非常优秀的网页服务叫做geocoding。这个服务允许我们使用他们庞大的地理信息数据库。当我们向geocoding API提交一个"Ann Arbor, MI"的地理位置查找字符串后,谷歌将返回它推测出来的,在地图上可能找到搜索字符串的最佳地理位置,并告诉我们周边的地标。
geocoding网页服务是免费的,但是为了防止盈利性程序无限制使用此API,它对速率进行了限制。如果你拥有的一些调查数据,是终端用户通过自由格式的输入框输入位置信息的,那么你可以利用这个API很好的整理你的数据。
当你们使用类似像谷歌 geocoding 免费API时,你需要尊重使用这些资源。如果太多的人滥用这个服务,谷歌可能停止或者显著减少它的免费服务。
你可以阅读这个服务的在线文档,但它非常简单,你甚至在你的浏览器中输入以下URL来测试它。
http://maps.googleapis.com/maps/api/geocode/json?sensor=false&address=Ann+Arbor%2C+MI
在复制粘贴这个URL到你的浏览器之前,请确认解包和删除中间的任何空格。
下面这个简单的程序,首先提示用户输入搜索的字符串,然后调用geocoding API,并从返回的JSON中抓取信息。
import urllib.request
import urllib.parse
import json serviceurl='http://maps.googleapis.com/maps/api/geocode/json?' while True:
address = input('Enter location: ')
if len(address) < 1 :
break
url = serviceurl + urllib.parse.urlencode({'sensor':'false','address':address})
print('Receiving', url)
try:
uh = urllib.request.urlopen(url)
except:
print('Can not connect the server')
break
data = uh.read()
print('Received',len(data),'characters') try:
js = json.loads(data.decode('utf-8'))
except:
js = ''
if 'status' not in js or js['status'] != 'OK':
print('==== Failure To Retriev ====')
print(data.decode('utf-8'))
continue print(json.dumps(js, indent = 4)) lat = js["results"][0]["geometry"]["location"]["lat"]
lng = js["results"][0]["geometry"]["location"]["lng"] print('lat', lat, 'lng', lng)
location = js['results'][0]['formatted_address']
print(location)
这个程序先获取查找字符串,然后创建一个URL,并将这个字符串进行适当编码作为参数包含在URL中,之后用urllib从geocoding API处获得文本信息。我们得到的数据依赖于我们发送的这个参数和存储在谷歌中的数据,而不是一个固定的网页。
一旦我们获取了JSON数据,我们就可以用JSON库来分析它,并做一些检验,来确保我们获取的是正确的数据,然后我们抓取寻找的数据。
程序的输出如下:
Enter location: china
Receiving http://maps.googleapis.com/maps/api/geocode/json?sensor=false&address=china
Received 1182 characters
{
"results": [
{
"formatted_address": "China",
"types": [
"country",
"political"
],
"address_components": [
{
"types": [
"country",
"political"
],
"long_name": "China",
"short_name": "CN"
}
],
"geometry": {
"viewport": {
"southwest": {
"lat": 18.1576156,
"lng": 73.4994136
},
"northeast": {
"lat": 53.56097399999999,
"lng": 134.7728099
}
},
"location_type": "APPROXIMATE",
"bounds": {
"southwest": {
"lat": 18.1576156,
"lng": 73.4994136
},
"northeast": {
"lat": 53.56097399999999,
"lng": 134.7728099
}
},
"location": {
"lat": 35.86166,
"lng": 104.195397
}
},
"place_id": "ChIJwULG5WSOUDERbzafNHyqHZU"
}
],
"status": "OK"
}
lat 35.86166 lng 104.195397
China
你可以从www.py4inf.com/code下载geojson.py和geoxml.py,浏览比较谷歌geocoding API JSON格式和XML格式的区别。
(译者注:因为国际出口拥堵的原因,访问geocoding API成功率较低,需要多试几次)
Python for Infomatics 第13章 网页服务四(译)的更多相关文章
- Python for Infomatics 第13章 网页服务三(译)
注:文章原文为Dr. Charles Severance 的 <Python for Informatics>.文中代码用3.4版改写,并在本机测试通过. 13.6 应用程序接口API 现 ...
- Python for Infomatics 第13章 网页服务二(译)
注:文章原文为Dr. Charles Severance 的 <Python for Informatics>.文中代码用3.4版改写,并在本机测试通过. 13.4 JavaScript ...
- Python for Infomatics 第13章 网页服务一(译)
注:文章原文为Dr. Charles Severance 的 <Python for Informatics>.文中代码用3.4版改写,并在本机测试通过. 一旦利用程序通过HTTP协议获得 ...
- Python for Infomatics 第12章 网络编程四(译)
注:文章原文为Dr. Charles Severance 的 <Python for Informatics>.文中代码用3.4版改写,并在本机测试通过. 12.7 用BeautifulS ...
- #Python学习笔记:1-3章 (基于《python编程,从入门到实践)
第1-3章 这个文档是记录我学习python时一些学习笔记以及一些想法也可以称作复习笔记 第一章:起步这一章主要是从第一个"hello world"程序到python环境的搭建与配 ...
- Python for Infomatics 第12章 网络编程六(译)
注:文章原文为Dr. Charles Severance 的 <Python for Informatics>.文中代码用3.4版改写,并在本机测试通过. 12.9 词汇表 Beautif ...
- Python for Infomatics 第12章 网络编程一(译)
注:文章原文为Dr. Charles Severance 的 <Python for Informatics>.文中代码用3.4版改写,并在本机测试通过. 本书中的许多例子关注的是读取文件 ...
- Python for Infomatics 第14章 数据库和SQL应用一(译)
14.1 什么是数据库 数据库一种存储结构数据的文件.绝大多数数据库类似字典——映射键和值的关系.最大的区别是数据库是保存在硬盘或其它永久性的存储上,所以在程序结束后它仍然存在.而保存在内存中的字典容 ...
- Python for Infomatics 第12章 网络编程三(译)
注:文章原文为Dr. Charles Severance 的 <Python for Informatics>.文中代码用3.4版改写,并在本机测试通过. 12.5 HTML分析和网页抓取 ...
随机推荐
- 3d转换-正方体-Html5Css3-遁地龙卷风
(-1) 写在前面 我用的是chrome49,这个案例是从网上看到的,向这位同行致敬,建议大家在记录自己学习感悟时,向我一样加上笔名,被转载的时候还能留下点东西. 在研究slice-box.js的时候 ...
- json和jsonp
JSON是一种数据交换格式! JSONP是一种依靠开发人员的聪明才智创造出的一种非官方跨域数据交互协议! 一般使用JSON来传数据,靠JSONP来跨域. JSON的优点: 1.基于纯文本, ...
- jQuery中的选择器
(1)基本#id element .class * selector1,selector2,selectorN (2)层次选择器:ancestor descendant parent > chi ...
- SDN/NFV运营商商业化部署
三大运营商发布未来网络架构,并逐步加快SDN/NFV商业化部署的步伐.中国联通发布其新一代网络架构<CUBE-Net 2.0白皮书>,并与20多家合作伙伴共同启动了“新一代网络”合作研发计 ...
- powershell使用
主要语法点: -match -notmatch -replace -join -split -and -or -xor -not ! +.-.*./.% =.+=.-=.*=./=.%= -eq.-n ...
- R语言进阶
一.初学入门:<R in Action><The Art of_R Programming>入门者可首选两本,前者从统计角度入手,分高中低三部分由浅入深的讲解了如何用R来实现统 ...
- Winform自定义控件基础(二)
protected override void WndProc(ref Message m)
- 多预览小图焦点轮播插件lrtk
多预览小图焦点轮播插件lrtk // JavaScript Document $(document).ready(function(){ //$('#select_btn li:first').css ...
- android学习第一篇 基本概念
一. 1. Android 四大組件 Activity , Service , BroadcastReceiver ,ContentProvider 2. 多個Activity組成棧,當前A ...
- 51nod1183(Edit Distance)
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1183 题意:中文题啦- 思路:dp 用dp[i][j]表示从 ...