scala实验4

交通态势的爬取

正常接口情况下爬取

引用包

import sheet
import time
import json
import requests

函数定义

def read_poi():

读取各下级行政区的代码

    arr = sheet.du_sql()

循环各下级行政区进行POI检索

url1="https://restapi.amap.com/v3/traffic/status/circle?key=ecbbca20adc1bcb1e1416c23a8929921&location="
    url2="&radius=1500"
    #用于储存数据
    x=[]
    #用于计数
    num=0

    #循环各下级行政区进行POI检索
    for i in range(0,len(arr)):
        #当前行政区
        city=arr[i]['location']
        #因为官方对API检索进行了45页限制,所以只要检索到45页即可
        for page in range(1,46):
            print(city)
            #若该下级行政区的POI数量达到了限制,则警告使用者,之后考虑进行POI类型切分
            #构造URL
            thisUrl=url1+city+url2
            #获取POI数据
            data=requests.get(thisUrl)
            #转为JSON格式
            s=data.json()
            #解析JSON
            centerurl = "https://restapi.amap.com/v3/config/district?keywords="
            centerurl2 = "&subdistrict=2&key=ecbbca20adc1bcb1e1416c23a8929921"
            if(s.get("trafficinfo") == None):
                datacenter = requests.get(centerurl+arr[i]['adname']+centerurl2)
                ss=datacenter.json()
                saa = ss["districts"]
                center = saa[0]["center"]
                thisUrl = url1+center+url2
                data = requests.get(thisUrl)
                s = data.json()
                if(s.get("trafficinfo") == None):
                    datacenter = requests.get(centerurl+arr[i]['adname']+centerurl2)
                    ss=datacenter.json()
                    saa = ss["districts"]
                    center = saa[0]["center"]
                    thisUrl = url1+center+url2
                    data = requests.get(thisUrl)
                    s = data.json()
                    if(s.get("trafficinfo") == None):
                        datacenter = requests.get(centerurl+arr[i]['adname']+centerurl2)
                        ss=datacenter.json()
                        saa = ss["districts"]
                        center = saa[0]["center"]
                        thisUrl = url1+center+url2
                        data = requests.get(thisUrl)
                        s = data.json()
                        aa = s["trafficinfo"]
                    else:
                        aa = s["trafficinfo"]
                else:
                    aa = s["trafficinfo"]
            else:
                aa = s["trafficinfo"]

            #若解析的JSON为空,即当前行政区的数据不够45页(即没有达到限制),返回
            if len(aa)==0:
                break
            #对每条POI进行存储
            b={}
            b["description"] = aa["description"]
            b["expedite"] = aa['evaluation']['expedite']
            b["congested"] = aa['evaluation']['congested']
            b["blocked"] = aa['evaluation']['blocked']
            b["unknown"] = aa['evaluation']['unknown']
            b["status"] = aa['evaluation']['status']
            b["description"] = aa['evaluation']['description']
            x.append(b)
            time.sleep(0.5)

存储

 result = json.dumps(x, sort_keys=True, indent=2)
    with open('./jingqu/datapoijiaotong.json','w',encoding='utf-8') as file:
        for i in result:
            file.write(i)
        print('数据已写入json文件...')

 

posted @ 2022-01-09 15:42  韦德·沃兹  阅读(44)  评论(0)    收藏  举报