[关闭]
@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. 高德脚本 http://pan.baidu.com/s/1pLemKht 密码 4739
  2. 百度脚本 http://pan.baidu.com/s/1c10D8tU 密码 fyh7
  3. 样例结果 http://pan.baidu.com/s/1cx991c 密码 vzp3

环境准备

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。安装方法如下

  1. cd selenium-x.x.x
  2. python setup.py install

3. PhantomJS 安装
根据操作系统版本,下载对应的PhantomJS或是直接使用百度文件夹下的extlib\phantomjs.exe (Windows操作系统)。

以Windows为例,将phantomjs.exe放入Python安装目录(C:\Python27)即可。


高德公交线路采集

进入高德目录位置,执行脚本,以城市名为参数即可。

  1. 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. 每个城市可能会有一些特殊的关键字,比如深圳的"龙岗线"等等


百度公交线路采集

进入百度目录位置,执行脚本,以城市名为参数即可。

  1. python bmap.py [城市名]

命令行会输出采集的状态情况。默认关键字为数字1-1000。

注意
线路编号是根据采集顺序自增编写的,是唯一的。 不同线路编号的线路可能相同,需要自己根据需要进一步根据线路完整名称进行处理。

百度采集存在的可能问题

  1. 百度公交搜索每页最大结果数为10,在其他搜索中结果数可通过getPageCapacity / setPageCapacity调整,但在公交线路搜索BMap.BusLineSearch中并无此方法。见下图:
    BAIDU-Problem.png-182kB

  2. 百度对数据抓取做了限制,在BusLineSearch中并无此方法。

  3. 关键字检索返回的结果比较有限,比如“夜”并不返回结果,“夜1”返回结果“夜1路”。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注