Lec3 爬虫练习

一、任务:自定义程序loc(amapkey, adrs),查询地址的位置信息,返回formatted_address,country,province,citycode,city,district,township,经纬度,level的结果。

1、请大家使用自己注册得到的api key

2、阅读高德地图web api的开发文档https://lbs.amap.com/api/webservice/summary/

程序:

def loc(amapkey,adrs):
    '''获取输入地点的具体地址、经纬度等具体信息,amapkey参数是输入高德地图key,
    adrs是输入字符型的汉字表示的地址'''
    import requests,json
    url = f'https://restapi.amap.com/v3/geocode/geo?key={amapkey}&address={adrs}&output=json'
    r = requests.get(url)
    r_json = json.loads(r.text)
    formatted_address = r_json["geocodes"][0]["formatted_address"]
    country = r_json["geocodes"][0]["country"]
    province = r_json["geocodes"][0]["province"]
    citycode = r_json["geocodes"][0]["citycode"]
    city = r_json["geocodes"][0]["city"]
    district = r_json["geocodes"][0]["district"]
    township = r_json["geocodes"][0]["township"]
    lat_long = r_json["geocodes"][0]["location"]
    level = r_json["geocodes"][0]["level"]
    return formatted_address,country,province,citycode,city,district,township\
    ,lat_long,level

测试:

with open(r'E:\ProgramData\高德地图key\amapkey.txt','r') as f:
    amapkey = f.read()

loca = loc(amapkey,'北京市地坛公园')
print(loca)

结果:

('北京市东城区地坛公园', '中国', '北京市', '010', '北京市', '东城区', [], '116.414867,39.953679', '兴趣点')

二、任务:自定义程序amapdir(amapkey, method, origin, destination),获取任意两个地点间的导航信息,返回时间、距离等结果。

1、注意:高德地图的地址参数只能填入坐标,并要求经纬度小数点不超过6位。
2、利用高德地图获取更多出行方式的导航信息

程序:

def amapdir(amapkey, origin, destination, method="walk"):
    """获取输入两个地点的距离和所选出行方式需要的时间,amapkey参数是输入高德地图key,
    origin, destination是输入字符型的汉字表示的地址,method是出行方式,
    可输入:'walk'、'bus'、'drive'、'bike'"""
    import requests,json
    result = {}
    #汉字表示的起始、终点转换成经纬度
    origin_ll = loc(amapkey,origin)[7]
    destination_ll = loc(amapkey,destination)[7]
    #请求参数编成一个字典
    param = {'key':amapkey,'origin':origin_ll,'destination':destination_ll,'output':json}
    #不同路径规划的url
    url_walk = 'https://restapi.amap.com/v3/direction/walking'
    url_bus = 'https://restapi.amap.com/v3/direction/transit/integrated'
    url_drive = 'https://restapi.amap.com/v3/direction/driving'
    url_bike = 'https://restapi.amap.com/v4/direction/bicycling'
    #设置不同路径规划的信息请求
    if method == 'walk':
        r = requests.get(url_walk,params=param)
        r_json = json.loads(r.text)
        result['dist'] = r_json['route']['paths'][0]['distance']
        result['time'] = r_json['route']['paths'][0]['duration']        
    elif method == 'bus':
        #添加公交出行的一个请求参数:所在城市
        city = loc(amapkey,origin)[3]
        param['city'] = city
        r = requests.get(url_bus,params=param) 
        r_json = json.loads(r.text)
        result['dist'] = r_json['route']['distance']
        result['time'] = r_json['route']['transits'][0]['duration']              
    elif method == 'drive':
        r = requests.get(url_drive,params=param)
        r_json = json.loads(r.text)
        result['dist'] = r_json['route']['paths'][0]['distance']
        result['time'] = r_json['route']['paths'][0]['duration']
    elif method == 'bike':
        r = requests.get(url_bike,params=param)
        r_json = json.loads(r.text)
        result['dist'] = r_json["data"]['paths'][0]['distance']
        result['time'] = r_json["data"]['paths'][0]['duration']        
    else:
        print('出行方式输入错误')
    try:
        if r.status_code != 200:
            print('地址信息获取失败')
    except:
        pass
    return result

测试:

with open(r'E:\ProgramData\高德地图key\amapkey.txt','r') as f:
    amapkey = f.read()
    
a =amapdir(amapkey, '北京市地坛公园', '中国社会科学院', method='drive')
print(a)    

结果:

{'dist': '43710', 'time': '3310'}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值