py爬虫调用高德地图API——查看全国有机场的城市

先看效果

在这里插入图片描述

一、工具

1、爬虫工具:requests(爬虫包)、xpath(定位指定信息)
2、分析工具:pandas(数据分析工具)、tableau(可视化)
3、数据来源:高德地图、国家统计局官网
备注:想现在excel版最新城市名称数据,可点击中国省市名称数据.xlsx

二、调用高德地图API

在高德地图开发文档里面创建应用以后获得自己的key,然后根据需要查看开发文档(本处选择“搜索POI”)
在这里插入图片描述
爬取到的数据默认是json格式,通过关键字逐层筛选就可以获得指定信息
在这里插入图片描述
代码如下:

searchword = '机场'
url = 'https://restapi.amap.com/v3/place/text?'
#uri = url + 'keywords=' + searchword + '&key=' + selkey +'&city='+city+ '&subdistrict=1' + '&extensions=all'
uri = url + 'keywords=' + searchword + '&key=' + selkey +'&subdistrict=1' + '&extensions=all'
r = requests.get(url=uri, timeout=30)
if r.status_code == 200:
     print(r.text,'\n')
     html = json.loads(r.text)
     for city in html['suggestion']['cities']:
        print(city)

数据写入excel后,通过tableau在中国地图显示数据(有部分城市,Tableau无法自动识别)
在这里插入图片描述从数量上可以看出,东西分布差异很明显。为了更进一步查看,接下来想办法为这230个城市匹配到各自的省份。230个城市中有很多听都没听过,所以人工匹配还是很麻烦的。接着从网上找数据吧。。。

三、爬取全国所有城市信息

通过一番查找,发现国家统计局的官网上就有这些数据:

在这里插入图片描述
点击指定省份,就会可以看到该省份下面所有的城市在这里插入图片描述先爬取省份信息,再爬取每个省份子页面中的城市信息即可:
在这里插入图片描述
代码如下:

 req = requests.get(url,timeout =30,headers=header)
    req.encoding = "gb2312"
    # #print(req.text)
    # provices = re.findall('<a href=11.html">(.*?)<br></a>',req.text)
    # #print(provices)

    html = etree.HTML(req.text)
    infos = html.xpath('//table[@class = "provincetable"]/*')   #定位表格数据
    dic ={}
    for info in infos:
        #print(info)
        proviceses=info.xpath('./td//a/text()')  #/html/body/table[2]/tbody/tr[1]/td/table/tbody/tr[2]/td/table/tbody/tr/td/table/tbody/tr[7]/td[6]/a/text()
        #print(proviceses)
        hrefs = info.xpath('./td//a/@href')

        if (len(proviceses)>0):
            for province,href  in zip(proviceses,hrefs):
                href = url1+href
                cities = get_chrildren_html(href,header)
                dic.update({province:cities})
    data_matching(dic)

def get_chrildren_html(href,header):
    req = requests.get(href,headers=header)
    req.encoding = "gb2312"

    html = etree.HTML(req.text)
    infos = html.xpath('//table[@class = "citytable"]/*')   #定位表格数据
    cities =[]
    for info in infos:
        # print(info)
        city = info.xpath('./td[2]//a/text()')

        if(len(city)>0):
            cities.append(city[0])
    return cities

四、城市&省份之间映射

没想到什么好办法,这里是通过字典遍历,查找城市所在的省份信息:

dt = pd.read_excel('E:\workhxc\study_hxc\\testdata\\airport.xlsx', sheet_name='Sheet1') #读取机场数据
dt['省份'] = dt['城市']
for k, v in dic.items():        #遍历字典
    print(k,v)
    dt['省份']= dt['省份'].replace(v, k)

在tableau中对“省份”和“城市”字段创建分层结构:在这里插入图片描述通过地图展示数据,最后就有了这张可爱的中国地图:
在这里插入图片描述
最后,欢迎大家提出各种技术性建议!!共同学习!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liuyunfeng_c

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值