python 取json下某一key_干货!Python+高德API实现城市间距离爬虫

5ae2db283a26f9991d9f3cde212a0ab1.png

最近在研究如何利用python优化工作当中的一些重复性工作,在此跟大家分享一个爬虫高效计算多组城市间距离的案例,期间也遇到过很多坑,希望大家可以取我精髓,去我糟粕,共同学习成长。

9242f0e3f0e562cceefbb513031efeda.png
人生苦短,我要Python

一、Why Python

在如今数据泛滥的时代,如何高效的获取自己想要的数据是至关重要的。借助软件程序实现绝对是最明智的选择。说到这很多人心里可能会打出很多问号:不会编程怎么办???不想花费更多时间去学习怎么办???其实,人们总是喜欢把问题复杂化。本人可以负责任的告诉大家,有些编程语言譬如python是很容易上手的,再结合正确的学习方法,几天就可以入门上手。1)python属于解释性语言,逻辑易懂。2)目前很多开源可以学习(如github等),再加上强大的百度、知乎、简书等学习工具,遇到问题不愁解决方案(理论高度上的难题除外)。3)python是那种你哪里需要它就可以直接去用它,而不是一定要先把它全面吃透,再去上手使用,这也是很多新人上手的困惑。在这里还是要强调下,只要你是业余学习Python做一些非商业的东西,没必要吃的太透,毕竟简单一时爽,一直简单一直爽。

f467f210aaabe2762318d393140877ae.png

二、案例说明

本文使用python(编程语言)+pycharm(非必须,很好用的编辑器)+anaconda(非必须,python开源库)。当然了你用Java,C,go爬虫都可以的,毕竟条条大路通罗马。目的只有一个,平时都是登录网页版地图(如百度地图等)挨个查询不同工厂到不同客户所在城市间的运输距离,隔着屏幕都能感受到大佬们的蔑视,尤其是当客户的工厂地发生变化时,更是烦上加烦。正好最近在业余研究python,何不一劳永逸的消灭重复剥削呢,说不定还能给大洋彼岸的资本主义以致命一击(Just Joking, No歧视)

5a3a7acbdc2c44bc05371d9dc61fcac7.png

言归正传了,在研究爬虫方案的时候,首先想到的是爬取百度地图搜索结果的网址源码,然后提去自己想要的数据。经过半天尝试,该方案宣告破产。原因很简单,百度地图搜索两个城市间举例的时候会出现很多下拉菜单要不停的点取(异步加载,有兴趣的小伙伴可以去研究下),尤其是你输入的是模糊地址如上海肯德基等。于是乎,本人果断的采取了第二种方案,采用Selenium模拟整个操作过程,最后读取网页中想要的数据,功能是实现了,但是没有达到想要的结果。这里要说明下,selenium确实很强大,尤其是搭配无头浏览器(当前谷歌、火狐都配了无头浏览器驱动),专治各种爬虫难题。但是越强大,缺点就越容易暴露。首先Selenium模拟鼠标点击、悬停等动作时偶尔会出现错误,也就是稳定性差。其次,Selenium耗时太久,批量爬虫时更为体现,不适合业务需求,遂果断放弃。

58f0c3b210c2827b238817c5967b8680.png

正所谓山重水复疑无路,柳暗花明又一村。眼看耐心被消耗殆尽,地图开放平台正式上场了(此处应该有Music)。地图开放平台类似于开源数据库,请求数据再读取的效率大大提升。需要注意的是使用前要先注册,随便添加一个新应用,系统会配置一个key密钥码,这个是必须有的,否则无法使用。

一般计算2个城市间的距离逻辑是:首先输入起始点跟目的地的地理名称,然后转化为经纬度坐标,最后计算2个坐标间的距离(非直线距离)。

我这里使用的是高德地图API。这里要安利下国内地图软件,真是良心企业,API文档简明扼要,使用起来非常得心应手。本文主要使用了API以下2块功能点。

  • 地理编码

地理编码就是把要查询的位置名称转化为经纬度坐标。接口服务地址为https://restapi.amap.com/v3/geocode/geo?parameters,请求方式为GET方法。

参数如下(必填项一定要带入程序参数里):

bdd688dd67d9dee0b04f0630ab8426d3.png

返回结果参数如下,其中location参数即为我们需要提取的结果值。

2c7cb922e43204106ec32489c209ffd8.png
  • 路径规划

在得到经纬度数据后,要借用路径规划功能实现两点间的真实距离计算(本案例选用的驾车模式)。驾车模式的路径规划接口服务地址为:https://restapi.amap.com/v3/direction/driving?parameters,请求方式同样为GET方法

相关参数就不一一展示了,有兴趣的小伙伴可以去官网(https://lbs.amap.com/api/webservice/guide/api)查阅学习。

三、代码展示

  • 经纬度转换
import 
  • 两地间驾车距离计算
import 
  • 完整代码(上海东方明珠-北京天安门)
import 

好了,到这里,本文分享就结束了,希望可以对大家有所帮助。是不是觉得python很有趣呀,大家可以关注我的知乎,交流心得。其实工作生活中还可以发现更多有趣的东西,我们要相信技术改变生活。生活不缺少美,只是缺少发现美的眼睛。所以,赶快行动吧。最后祝每个人都工作顺利,生活愉快!

2df454b7e33de2e6f91a48349d7ff4f5.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值