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

先看效果

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

一、工具

1、爬虫工具:requests(爬虫包)、xpath(定位指定信息)
2、分析工具:pandas(数据分析工具)、tableau(可视化)
3、数据来源:高德地图、国家统计局官网

二、调用高德地图API

在高德地图开发文档里面创建应用以后获得自己的key,然后根据需要查看开发文档(本处选择“搜索POI”)
py爬虫调用高德地图API——查看全国有机场的城市_第2张图片
爬取到的数据默认是json格式,通过关键字逐层筛选就可以获得指定信息
py爬虫调用高德地图API——查看全国有机场的城市_第3张图片
代码如下:

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无法自动识别)
py爬虫调用高德地图API——查看全国有机场的城市_第4张图片从数量上可以看出,东西分布差异很明显。为了更进一步查看,接下来想办法为这230个城市匹配到各自的省份。230个城市中有很多听都没听过,所以人工匹配还是很麻烦的。接着从网上找数据吧。。。

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

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

在这里插入图片描述
点击指定省份,就会可以看到该省份下面所有的城市py爬虫调用高德地图API——查看全国有机场的城市_第5张图片先爬取省份信息,再爬取每个省份子页面中的城市信息即可:
py爬虫调用高德地图API——查看全国有机场的城市_第6张图片
代码如下:

 req = requests.get(url,timeout =30,headers=header)
    req.encoding = "gb2312"
    # #print(req.text)
    # provices = re.findall('(.*?)
',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中对“省份”和“城市”字段创建分层结构:py爬虫调用高德地图API——查看全国有机场的城市_第7张图片通过地图展示数据,最后就有了这张可爱的中国地图:
py爬虫调用高德地图API——查看全国有机场的城市_第8张图片
最后,欢迎大家提出各种技术性建议!!共同学习!

你可能感兴趣的:(爬虫,数据分析)