通过Places API Web Service获取兴趣点数据
实验将爬取新加坡地区的银行POI数据
数据库采用mongodb,请自行安装,同时申请google的key
直接上代码
#coding=utf-8 import urllib import json import requests # import pymongo import pymongo import pymongo.database class PlacesTest(): def __init__(self): self.key = 'your_key' # self.client = googlemaps.Client(self.key) self.location = '48.859294,2.347589' self.type = 'bank' self.language = 'zh-CN' self.radius = 1600 self.baseUrl = 'https://maps.googleapis.com/maps/api/place/nearbysearch/json' mongoClient = pymongo.MongoClient('192.168.0.203',27017) db = pymongo.database.Database(mongoClient,'googlePlace') self.googlePlace_Coll = pymongo.collection.Collection(db,'bank') def getHtml(self,url): page = urllib.urlopen(url) html = page.read() return html def test_places_nearby_search(self): payload = { 'key': self.key, 'location': self.location, 'type': self.type, 'radius': self.radius, 'language': self.language, } headers = {'User-Agent':"Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Firefox/31.0", "Accept": "image/png,image/*;q=0.8,*/*;q=0.5" } # url = 'https://maps.googleapis.com/maps/api/place/nearbysearch/json' r = requests.get(self.baseUrl, timeout=200, headers=headers, params=payload) data=r.json() # html = self.getHtml() # # print html # data = json.loads(html) print r.url,data['results'].__len__() for row in data['results']: old = self.googlePlace_Coll.find_one({'id':row['id']}) # print old if old==None: self.googlePlace_Coll.insert_one(row) # print data['results'] latitude=1.2392984960090898 longitude=103.61274719238281 _latitude=1.4644553893995902 _longitude=104.00619506835939 i=0 PlacesTest=PlacesTest() while (latitude<=_latitude): while (longitude<=_longitude): # d=getFlatternDistance(latitude,longitude+1,latitude,longitude); # L.circle([latitude,longitude+0.5], {radius: d/2,color: "#ff7800"}).addTo(map); PlacesTest.location=str(latitude)+','+str(longitude) PlacesTest.test_places_nearby_search() i=i+1 longitude=longitude + 0.02 longitude=103.61274719238281 # console.warn(d); latitude=latitude + 0.02 # // console.warn(latitude,longitude); # // continue;
使用限制:
Google Places API Web Service 强制执行每 24 小时 **1,000 次免费请求的默认限制,该默认限制由计算客户端和服务器端请求数量之和得出。
如果超过初始限制,应用将会开始出现故障。 您可以在 Google API Console 上启用收费来验证自己的身份,免费将此限制增加到每 24 小时 150,000 次请求。
验证身份时要求提供信用卡。 要求信用卡纯粹是为了验证您的身份。 不会由于您使用 Google Places API Web Service 而通过您的信用卡收取费用。
免费使用的最大限制为每 24 小时 150,000 次请求。 如果您的应用超过该限值,将会再次开始出现故障。 购买 Google Maps APIs Premium Plan 许可证可获得每 24 小时超过 150,000 次请求的限值。
如果您预期请求次数会超过默认的允许请求次数,请提前采取措施增大限值。
Google Places API Web Service 也有使用率限制。 无论有多少位用户共享同一项目,均以用户会话为单位施加使用率限制。
注:文本搜索服务在计算请求次数时需要乘以 10 倍。 也就是说,您进行的每个“文本搜索”请求将按 10 次请求从配额中扣除。
如果您的 Google Maps APIs Premium Plan 购买合同中已包含 Google Places API Web Service,倍数可能不同。