Python3爬取高德地图POI

参考文档:https://lbs.amap.com/api/webservice/guide/api/search
思路:高德地图提供了4种查询POI信息的能力,其中包括关键字搜索、周边搜索、多边形搜索、ID查询四种筛选机制,本文采用的是多边形搜索。
产品介绍中提到“无论您指定多少个type,每次请求最多返回1000个POI信息,若场景需要获取更可能多的POI;建议您不要在type之中指定过多的类别,而是分多次请求从而得到更加准确的结果。”因此,本文的方法是将所要采集POI信息的区域(以济南市为例),首先利用arcgis软件对其创建渔网(图1),然后通过渔网对角坐标获取工具(图2),百度网盘免费分享给大家,得到每个渔网对角坐标(左下和右上)(图3)在这里插入图片描述
图1

在这里插入图片描述
图2
在这里插入图片描述
图3

接下来就是写代码的过程,话不多说,代码如下:

import requests
import json
from pymongo import MongoClient
import time

client = MongoClient('localhost',27017)
db = client.POI_Jinanshi
collection = db.table_1
polygon_list = list()


with open("jn2.txt", 'r', encoding='UTF-8') as txt_file:
    for each_line in txt_file:
        if each_line != "" and each_line != "\n":
            fields = each_line.split("\n")
            polygon = fields[0]
            polygon_list.append(polygon)
    txt_file.close()

def getjson(polygon, page):
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36'
    }
    pa = {
        'key': 'xxxxxxxxxxxxxxxxxxxxxx', #从控制台申请
        'polygon': polygon,
        'types':'970000|990000',    #不要过多
        'city':'0531',
        'offset': 20,
        'page': page,
        'extensions': 'all',
        'output': 'JSON'
    }
    r = requests.get('https://restapi.amap.com/v3/place/polygon?', params=pa, headers=headers)
    decodejson = json.loads(r.text)
    return decodejson

for each_polygon in polygon_list:
    not_last_page = True
    page = 1
    while not_last_page:
        decodejson = getjson(each_polygon, page)
        print(decodejson)
        count = decodejson['count']
        print(each_polygon, page)
        if decodejson['pois']:
            for eachone in decodejson['pois']:
                try:
                    name = eachone['name']          #POI名称
                except:
                    name = None
                try:
                    types = eachone['type']           #POI所属类别
                except:
                    types = None
                try:
                    address = eachone['address']    #POI地址
                except:
                    address = None
                try:
                    loaction = eachone['location']   #POI坐标
                except:
                    loaction = None
                try:
                    city = eachone['cityname']    #城市
                except:
                    city = None
                try:
                    county = eachone['adname']   #区县
                except:
                    county = None
                data={
                    'name':name,
                    'types':types,
                    'address':address,
                    'location':loaction,
                    'city':city,
                    'county':county,
                    'count':count,
                    'polygon':each_polygon
                }
                collection.insert_one(data)
                time.sleep(0.2)
            page += 1
        else:
            not_last_page = False

采集的结果如下:
在这里插入图片描述
渔网对角坐标获取工具:
链接:链接:https://pan.baidu.com/s/11nwWHDf75fSVTxs323opFQ
提取码:rduv

谢谢浏览!

  • 7
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 18
    评论
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值