@huyl08
2016-05-12T06:07:21.000000Z
字数 1733
阅读 2050
公交
高德
百度
采集
Python
本程序包基于Python 2.7进行开发。
高德采集脚本是利用REST API解析JSON返回串获得,速度快,结果较为完备。
百度采集脚本是利用Javascript API生成,由于采集结果是动态Javascript异步回调生成,需要根据百度的认证体系实时获取Javascript程序集,因此采用Selenium和PhantomJS组成的无界面浏览器(Headless Webdriver)来进行解析,获得采集结果。
注意 Python 3.x和Python 2.x是完全不同的两个系列,下载Python 2.7版本管理员权限进行安装即可。
1. Python 2.7.x 安装(Windows, 高德和百度均需要)
通过网址https://www.python.org/downloads/下载适用于Windows的Installer,注意CPU是32位还是64位的,管理员安装即可。
安装完成后,将python.exe的位置添加入环境变量,方便在命令行能够直接执行。通常python.exe的位置在C:\Python27,因此将C:\Python27添加到环境变量Path中即可。
安装成功后,进入命令行(win+R -> cmd 回车 ),敲入python 应该直接进入python的交互界面。
2. Selenium 安装(仅用于百度)
下载python版的selenium或是直接使用百度文件夹下extlib中的selenium-2.53.2.tar.gz,解压后文件夹为selenium-x.x.x。安装方法如下
cd selenium-x.x.x
python setup.py install
3. PhantomJS 安装
根据操作系统版本,下载对应的PhantomJS或是直接使用百度文件夹下的extlib\phantomjs.exe (Windows操作系统)。
以Windows为例,将phantomjs.exe放入Python安装目录(C:\Python27)即可。
进入高德目录位置,执行脚本,以城市名为参数即可。
python amap.py [城市名]
命令行会输出采集的状态情况。默认以关键字“机场”、“旅游”开始,字母"A"-"Z",数字1-1000。
输出结果会存储在result文件夹里,每个城市一个子文件夹,每次采集的文件以时间戳为后缀。
注意
1. [城市名]输入可能会涉及到字符编码的问题,Windows下默认是GBK,高德和百度的采集脚本基于输入字符集为GBK编写。 尽量避免在程序所在目录及上级目录中出现中文名,防止出现路径识别错误。
2. 线路编号是高德的内部编号,是唯一的。 基于不同关键字采集的线路未做去重处理,可根据需要进一步自己进行处理
3. 可以在amap.py脚本中自行添加关键字到keywords数组中(amap.py 82行),将中文翻译为UTF-8即可,例如 "机场" -> u"\u673a\u573a",在线翻译工具可能翻译成 "机场",对应处理即可。
4. 每个城市可能会有一些特殊的关键字,比如深圳的"龙岗线"等等
进入百度目录位置,执行脚本,以城市名为参数即可。
python bmap.py [城市名]
命令行会输出采集的状态情况。默认关键字为数字1-1000。
注意
线路编号是根据采集顺序自增编写的,是唯一的。 不同线路编号的线路可能相同,需要自己根据需要进一步根据线路完整名称进行处理。
百度采集存在的可能问题
百度公交搜索每页最大结果数为10,在其他搜索中结果数可通过getPageCapacity / setPageCapacity调整,但在公交线路搜索BMap.BusLineSearch中并无此方法。见下图:
百度对数据抓取做了限制,在BusLineSearch中并无此方法。
关键字检索返回的结果比较有限,比如“夜”并不返回结果,“夜1”返回结果“夜1路”。