谷歌地图公交查询 Python 爬取 Google Map POI
Google Map 的 API文档:
这里使用的其中的 Place Search 接口。需要先注册谷歌地图的开发者平台获取 key。
原理上是按照一定的格点来请求周围的POI。每次请求会返回大约十几个POI点信息谷歌地图公交查询 Python 爬取 Google Map POI,类似于一种采样谷歌地图公交查询,如果在POI比较密集的地区谷歌地图公交查询产品目录,格网比较大会漏过许多POI。
下面这段代码爬取的是曼谷城区的部分POI
# 从谷歌API获取POI
import urllib.request
from urllib.parse import quote
import string
import json
import codecs
import numpy
# 参数
lonRange = [100.30, 100.60] # the range of longitude 经度的范围
latRange = [13.50, 14] # the range of latitude 纬度的范围
lonDivision = 0.005 # 分块查询,每格约0.4km
latDivision = 0.005 # 分块查询,每格约0.4km
radius = 500 # 查询参数 半径 500m
TIMEOUT = 30
outfile = "output.csv"
# Google Key
googleKey = "在这里填你自己的key"
#restaurant_j = json_format(res_test)
print('开始爬取')
print('共有'+str(((lonRange[1]-lonRange[0])/lonDivision+1)*((latRange[1]-latRange[0])/latDivision+1))+'次请求')
count = 0
countLine = 0
place_id_list = []
csvFile=codecs.open(outfile,'a','utf-8')
csvFile.write('lat,lon,types\n')
for lon in numpy.arange(lonRange[0], lonRange[1], lonDivision):
print('已进行'+str(count)+'次请求,得到'+str(countLine)+'条有效信息')
for lat in numpy.arange(latRange[0], latRange[1], latDivision):
print('已进行'+str(count)+'次请求,得到'+str(countLine)+'条有效信息')
# 发请求
latlon = str(lat)+','+str(lon)
basic_url = 'https://maps.googleapis.com/maps/api/place/nearbysearch/json?key={0}&location={1}&radius={2}'
url = basic_url.format(googleKey,latlon,radius)
url = quote(url, safe = string.printable)
req = urllib.request.urlopen(url,timeout=TIMEOUT)
response = req.read().decode('utf-8')
responseJSON = json.loads(response)
for item in responseJSON['results']:
#对每个POI
place_id = item['place_id']
types = item['types']
#如果id不在已有的list里
if not place_id in place_id_list:
#如果类型中有point_of_interest
if "point_of_interest" in types:
place_id_list.append(place_id)
line = str(item['geometry']['location']['lat']) + ',' + str(item['geometry']['location']['lng'])
for type in types:
line = line + ',' + str(type)
csvFile.write(line + '\n')
countLine = countLine + 1
count = count + 1
csvFile.close()
print('结束')
爬取结果使用 ArcGIS Pro 可视化如下:
【本文来源于互联网转载,如侵犯您的权益或不适传播,请邮件通知我们删除】