点击控制台
点击控制台右侧应用管理中的‘我的应用’
点击‘创建应用’
应用名称可以随便填写一个
IP白名单填写 0.0.0.0/0 即可,然后点击提交。
这样我们的AK就有了,接下来爬取的时候,我们就会用到。
本次我们就爬取北京地区公园的位置信息。需要注意是,要把get_json函数中的ak的值替换为你刚申请的AK。
# -*- coding: utf-8 -*-
import requests
import json
import osr
import shapefile
class point:
def __init__(self, name, lat,lon):
self.name = name
self.lat = lat
self.lon=lon
def get_json(loc,page_num=0):
header={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Firefox/78.0'}
pa={
'q':'公园',
'region':loc,
'scope':'2',
'page_size':20,
'page_num':page_num,
'output':'json',
'ak':'替换为你的AK'
}
r=requests.get("http://api.map.baidu.com/place/v2/search",params=pa,headers=header)
my_json=json.loads(r.text)
return my_json
page=0
last_page=False
info_list=[]
while not last_page:
park_info=get_json(loc='北京',page_num=page)
if park_info['results']:
for each_park in park_info['results']:
try:
park_name=each_park['name']
except:
park_name=None
try:
park_lat=each_park['location']['lat']
except:
park_lat=None
try:
park_lon=each_park['location']['lng']
except:
park_lon=None
info_list.append(point(park_name,park_lat,park_lon))
print('正在爬取第{}页'.format(page+1))
page=page+1
else:
last_page=True
接下来我们就需要把爬取下来的信息存储为shp文件,这里我们使用的是shapefile库(pip install pyshp安装)。
save_path=r'E:\park.shp'
file = shapefile.Writer(save_path,encoding='gbk')
file.field('name', 'C', '40')
for j in info_list:
if j.lat==None or j.lon==None:
continue
else:
file.point(j.lon,j.lat)
file.record(j.name)
file.close()
proj = osr.SpatialReference()
proj.ImportFromEPSG(4326)
wkt = proj.ExportToWkt()
f = open(save_path.replace(".shp", ".prj"), 'w')
f.write(wkt)#写入投影信息
f.close()
好了,现在我们就把北京所有的公园信息爬取下来了。我们在ArcGIS中看一看我们存储的数据吧。
今天的内容就分享到这里啦!如果感觉文章内容对您有帮助的话,欢迎点赞、关注、转发!