高德接口的使用——爬取过程

此次爬取需要引用包有

import sheet
import time
import json
import requests

此处做的为函数,需要mian函数来调用,为了方便程序运行统一成功。

def read_poi():

    #各下级行政区的代码,若是嫌逐个复制麻烦可以通过读取文件的方式实现,此处不进行讲解
    # arr= ['120100','120101','120102','120103','120104','120105','120106','1201010','120111','120112','120113','120114','120115','120116','120117','120118','120119']
    #API的URL,在这里进行了结构化处理
    arr = sheet.read_excel()
    url1="https://restapi.amap.com/v3/place/text?key=807c3aaf8b58a288aa83b28d11c817e4&keywords=景区&types=风景名胜&city="
    url2="&output=JSON&children=&offset=20&page="
    url3="&extensions=all"
    #用于储存数据
    x=[]
    #用于计数
    num=0

    #循环各下级行政区进行POI检索
    for i in range(0,len(arr)):
        #当前行政区
        city=arr[i]
        #因为官方对API检索进行了45页限制,所以只要检索到45页即可
        for page in range(1,46):
            #若该下级行政区的POI数量达到了限制,则警告使用者,之后考虑进行POI类型切分
            if page==45:
                print("警告!!POI检索可能受到限制!!")
            #构造URL
            thisUrl=url1+city+url2+str(page)+url3
            #获取POI数据
            data=requests.get(thisUrl)
            #转为JSON格式
            s=data.json()

            #解析JSON
            aa = s["pois"]

            #若解析的JSON为空,即当前行政区的数据不够45页(即没有达到限制),返回
            if len(aa)==0:
                break
            #对每条POI进行存储
            for k in range(0,len(aa)):
                b={}
                b["name"]=aa[k]["name"]
                b["type"]=aa[k]["type"]
                b["address"]=aa[k].get("address")
                b["adname"]=aa[k]["adname"]
                b["location"]=aa[k]["location"]
                b["citycode"]=aa[k]["citycode"]
                b["adcode"]=aa[k]["adcode"]
                b["pname"]=aa[k]["pname"]
                b["cityname"]=aa[k]["cityname"]
                x.append(b)
                num+=1
                print("爬取了 "+str(num)+" 条数据")
            print(city);
            time.sleep(0.5)


    #将数据结构化存储至规定目录的CSV文件中
    result = json.dumps(x, sort_keys=True, indent=2)
    with open('./jingqu/datapoi.json','w',encoding='utf-8') as file:
        for i in result:
                file.write(i)
        print('数据已写入json文件...')

 

上一篇:NOI模拟赛 6.17


下一篇:操作系统实战45讲-1