摘要:
POI体量数据(Area of Interest)仍然是高精度的城市空间研究、高效分析、底图绘制的重要数据。之前分享过一个纯人工的数据获取方式,实在麻烦……后面@Georz大兄弟和@Sid合作完成了新的数据获取脚本,升级为半人工方式,更加便捷高效,故分享出来。
本文前面讲开发过程,后面是使用介绍。
(脚本放在共享文件夹,节约时间,本文结束,可直接前往下载。双击运行,按提示使用。好了,再见)。
之前已经开发了一个AOI数据获取脚本,“Html请求+ Fiddler抓包+Python解析”三件套,纯人工操作,非常麻烦,原文:
是一种很累,但是很安心很稳健的方式
后来@Georz大兄弟找上我,非常开心,终于有人一起做这些事情啦!!!
我之前通过抓包就发现了高德地图AOI数据的接口:https://ditu.amap.com/detail/get/detail?id=(POI的ID),问题在于直接请求不返回正确数据,即使设置了header(user-agent)。
这时候,Georz大兄弟带着已经成型的代码来了!也是得益于网络上的各位前辈——关键在于,要补足header的信息才能请求到数据(如uid、cookie等)。
但是有更大的欲望:降低人工手动参与的部分、提高获取效率、更好应对反爬……
中间Georz和Sid做了很多的尝试,拖拖拉拉的:
1. 尝试1:代理IP
有很多代理商,之前没有研究过,虽然Georz大兄弟也就搞好了,但是Sid这边又搞了一会
——最后发现代理是没有用的,因为反爬识别最关键的可能是cookie[1]
失败
2. 尝试2:自动获取cookie+代理IP
因为cookie具备时效性,一个cookie一般只能获取100多个AOI数据,所以希望能通过某些机制实现自动切换可用的cookie,即使用上代理IP
爬取数据时,通常使用requests模块来加载网页,requests. Session能在加载网页时带上前次加载时的cookie……(没太试过,觉得不太行)
后面发现可以用selenium模块来自动化运行Firefox或其他浏览器,然后获取cookie,应该是最接近真实的控制方式了——但是非常奇怪,虽然能够获取cookie,但是这个cookie就是无法请求到数据,无论用没用上代理(人间迷惑问题——有谁了解这个还请赐教)…………
失败
于是,只好退而求其次:每次cookie失效,都调起默认浏览器,人工刷新页面、进行滑块验证等等,获取新的可用cookie——仍然麻烦,最大的问题是,获取数据的过程中,人不能离开电脑!!!可是你又有什么办法呢?……
——建议一边在电脑做自己的事情,一边让程序在后台慢慢跑数据,等突然浏览器自动打开高德地图了,手动刷新个cookie粘过去就好。
后面又把上次AOI脚本里的数据解析、坐标转换、自动检查脚本更新等代码粘贴过来,调试了亿一会儿,于此开发过程结束
基础文件:包含POI数据的ID、名称的Excel文件
(会自动识别脚本目录下的xls、xlsx文件中的“id”、“名称”列,无法自动识别的(多个表格文件、其他列名称等情况),需人工辅助程序进行选择)
执行过程:
① 双击脚本
② 确认读取基础文件
③ 自动打开浏览器加载高德地图,手工第一次获取cookie并粘贴到脚本界面
④ 获取数据
……
⑤ 第N次获取cookie
⑥ 第N次获取数据
⑦ 保存数据,转化坐标为WGS84,导出到表格
支持随时终止和断点续传
支持自动检查脚本更新
提供AOI边界数据在ArcGIS(10.6)中的一键绘制工具
后台回复“资源素材共建计划“
1.数据获取脚本文件夹下:
RoutesDraw.tbx
2.子文件夹:AOI数据(POI边界)获取脚本
GetAOI_SemiAuto_GaodeMap.exe
感谢Georz和Sid在脚本编写中的辛苦付出
提供有限技术支持:
Georz:1565352629@qq.com;
SidChen:sidchen0@qq.com;
脚本使用请在个人科研、学习范畴之内,禁止对外兜售数据等商业行为
Ps. 希望更多的人找上门来共同努力,让我们迎来一个画图/科研不累人的时代!
[1] cookie是某些网站为了辨别用户身份,进行跟踪而储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息。由一个名称(Name)、一个值(Value)和其它几个用于控制Cookie有效期、安全性、使用范围的可选属性组成。(百度百科:cookie词条)