前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python | 爬取兴趣点详细攻略(POI)

Python | 爬取兴趣点详细攻略(POI)

作者头像
GIS与遥感开发平台
发布2022-04-29 09:17:55
8830
发布2022-04-29 09:17:55
举报
文章被收录于专栏:GIS与遥感开发平台

利用百度地图爬取POI

  • 申请百度地图AK
  • 利用Python爬取POI
  • 将坐标信息转化为shp文件

申请百度地图AK

  • 登录的百度地图开放平台 lbsyun.baidu.com

点击控制台

点击控制台右侧应用管理中的‘我的应用’

点击‘创建应用’

应用名称可以随便填写一个

IP白名单填写 0.0.0.0/0 即可,然后点击提交。

这样我们的AK就有了,接下来爬取的时候,我们就会用到。

爬取POI(以北京地区的公园为例)

本次我们就爬取北京地区公园的位置信息。需要注意是,要把get_json函数中的ak的值替换为你刚申请的AK。

代码语言:javascript
复制
# -*- 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文件

接下来我们就需要把爬取下来的信息存储为shp文件,这里我们使用的是shapefile库(pip install pyshp安装)。

代码语言:javascript
复制
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中看一看我们存储的数据吧。

今天的内容就分享到这里啦!如果感觉文章内容对您有帮助的话,欢迎点赞、关注、转发!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-07-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 GIS与遥感开发平台 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 利用百度地图爬取POI
    • 申请百度地图AK
      • 爬取POI(以北京地区的公园为例)
        • 位置信息储存为shp文件
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档