arcgis 获取json经纬度_Python爬虫终极解决方案-以获取高德地图小区边界为例

0 前言

本文工具使用anaconda3.5+chrome

一般爬虫分为非可视化爬虫和可视化爬虫。

①非可视化爬虫:通过抓包获取数据接口,使用requests、urlib2、urlib3直接请求页面源码或异步加载的JSON数据。

②可视化爬虫:使用selenium工具模拟人为操作,获取页面源码解析数据。

1 高德地图

最近在研究高德地图小区边界经纬度坐标穿获取的问题,本来想先尝试使用requests,发现高德的反爬措施比一般网站都要严,单独通过非可视化爬虫请求基本上无法获取到想要的数据。

抓包

打开高德地图,在搜索框输入一个小区,如重庆大学B区,如下图所示。

fd4771634a8549076a5fa46de860de11.png

我们发现了是通过这个接口https://ditu.amap.com/detail/get/detail?id=B0017819Q6 GET方法获取到的异步JSON数据,有我们想要的经纬度坐标串。但是想要自动获取有两个前提条件,一是需要知道兴趣面的ID,如上面的重庆大学B区ID B0017819Q6;你可以尝试只请求上述连接,你会发现很快就会失效, 即使携带现有的cookie也不一定能请求成功。因此二是如何能保证高德地图能返回正常的数据

2 准备工作

SELENIUM

考虑到获取小区边界的事是一劳永逸,数据总量不大,可以降低请求频率。直接使用selenium工具模拟人为操作。

① 安装selenium

#安装selenium
pip install selenium

② 下载chromedriver

ChromeDriver仓库下载对应的版本,chrome版本在浏览器network任一请求中请求头USER-AGENT中可以查看。

然后将chromedriver.exe拷贝至anaconda安装目录下。

browsermob-proxy

BrowserMob Proxy,简称 BMP,它是一个 HTTP 代理服务,利用它我们可以截获 HTTP 请求和响应内容,另外还可以把 Performance data 输出成一个 HAR 文件。

其 GitHub 链接为:https://github.com/lightbody/browsermob-proxy/。

① 下载地址,下载完后解压。

② browsermobproxy为Java开发的代理工具,因此还需要安装Java坏境,此处略过。

3 DEMO

代码

import 

打印出来的result如下图所示:

195c63d88d292bede7dbe2f0390c10e7.png

通过第一张图片的坐标串在上述结果中搜索,发现只有一个坐标串,每个经纬度之间有“_”隔开。而且点状数据是不存在该形式坐标串的。

解析的坐标串列表组合一下就OK了。

说明

① 必须要添加chrome_options.add_argument('--ignore-certificate-errors') 参数,否则每请求一个网页,都会提示“您的链接不是私密链接”。

② 可以通过请求的url筛选出请求明细,用解析json的方式逐层获取坐标串,但这里选择用正则表达式去提取坐标串更为简单。

4 总结

爬虫这东西只要显示在浏览器上的东西基本都是可以抓取的(但是要注意尺度,不要给别人服务器太大压力),但是往往有非常的反爬措施,结合fiddler4这种代理抓包软件联想应该能找到一个直接将chrome浏览器所有的请求记录全部导出来的方法,可以解决几乎所有的数据获取问题。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值