本程序使用 nodejs 开发,基于谷歌提供的 headless chrome 浏览器puppeteer,主要功能是抓取携程网上的航班数据
-
首先下载 nodejs, 选择符合你自己电脑版本的 nodejs 进行下载,然后在你的电脑上安装 nodejs
-
安装完 nodejs 之后,还需要下载本项目的依赖工具,包括 puppeteer,下载方法,双击本文件夹下的
install.bat
文件 -
此时程序的运行环境已经基本准备好了。不过在程序运行之前,还需要做一些小小的配置
与程序有关的配置文件都存放在 config 文件夹里面,config 文件夹里的每个文件都不能删除,即使内容是空的也不能删除,否则程序不能正常执行。下面说明每个配置文件的作用
config.txt
config.txt的第一行,第三行和第五行为说明文字,第二行,第四行,第六行为配置的值,说明如下
# 设置抓取日期,格式:2018-04-11,可留空,默认为今天
2018-05-15
# 设置同时运行到窗口数,视CPU性能而定,建议5-10
10
# 是否观看抓取过程[Y/N],如果选Y,则无论上一行设置的窗口是多少,都只会打开一个,测试用的,默认不开启
N
account.txt
account.txt第一行和第三行为说明文字,第二行填账号,第四行填密码
# 账号
xxx
# 密码
xxx
from-airport.txt
from-airport.txt设置起飞机场
to-airport.txt
from-airport.txt设置到达机场
-
例一,想抓取广州到北京的航班,就在 from-airport.txt里填写广州的代码
CAN
在 to-airport.txt 里填北京的代码
BJS
-
例二,想同时抓取广州到北京,上海,南京,武汉的航班,就在 from-airport.txt里填写广州的代码
CAN
在 to-airport.txt 里依次填北京,上海,南京,武汉的代码
BJS SHA NKG WUH
-
例三,想同时抓取广州到,北京,上海,南京,武汉到广州到,北京,上海,南京,武汉,即 5 个城市中任意两个进行组合,就在 from-airport.txt里填写
CAN BJS SHA NKG WUH
在 to-airport.txt 里填写
CAN BJS SHA NKG WUH
抓取的时候,程序会先把第一个起飞机场到所有到达机场的航班抓取完,然后再开始抓第二个起飞机场到所有到达机场的航班。并且会自动把起飞机场和到达机场相同的 情况(广州->广州)去掉
-
例四,国际机场的设置方法和上面国内机场的设置方法完全一样,并且可以混在一起写,想查从北京,上海,南京,伦敦到广州,上海,纽约,洛杉矶,就在 from-airport.txt里填写
BJS SHA NKG LON
在 to-airport.txt 里填写
CAN SHA NYC LAX
此外,在 config 文件夹里面还专门存了一个 airport 文件夹,里面有国内机场和国际机场,需要查某个机场到全国所有机场或者全世界所有机场(国内+国外)的时候,可以直接从里面拷贝
config 文件夹下的 fail.txt 和 save.txt 是记录程序运行状态的文件,这两个文件默认内容是空的。
save.txt
当要抓取的机场数量特别多的时候,可能需要好几天的时间,如果程序执行到一半,想把程序停下来,那么程序停止后就会把当前的进度保存到 save.txt 里面,save.txt 的第一行记录的是最后一次抓取的起飞机场的代码,第二行是到达机场的代码。
CAN
SHA
注:当程序启动了多线程执行的时候,比如说有 10 个起飞机场和 10 个到达机场,一共 100 条航线,config.txt 中设置同时启动 3 个窗口进行抓取,则可能第 53,54,55 条航线是按顺序启动的,但是第 55 条航线的数据先抓取到,然后是第 54 条航线的数据,再次是第 53 条航线的数据,此时,把程序关闭了,程序记录的 结束位置是第 53 条航线,下次启动时,会把第 54 和 55 条航线重复抓取一遍
fail.txt
程序在执行的过程中,可能会遇到异常的情况,例如网络卡了,携程服务区响应变慢,一条航班查询时间超过 30 秒还没有返回结果,为了不卡住后面的航班抓取,程序会认为这条航线抓取失败了,并记录在 fail.txt 里面,同时会在根目录下的 error.log 文件中记录错误的时间和原因方便以后检查问题出在什么地方。
fail.txt 中每一行代表一条航线查询失败了,用逗号隔开,如果在 fail.txt 中看到下面的内容
CAN,BJS
SHA,NKG
说明广州(CAN)到北京(BJS)和上海(SHA)到南京(NKG)这两条航线查询失败了,在程序下次启动时,会优先处理 fail.txt 里到航线,看看这次能不能拿到这些数据。如果可以的话,这条失败的记录就会从 fail.txt 里面删除,如果还是失败了,这条记录还会留在 fail.txt 里面,等到下次启动的时候再尝试。
好了,所有的配置都做完之后,就可以启动程序了,启动方法,双击本文件夹下的start.bat
.之后程序就开始跑了,跑的过程中可以最小化窗口,但是不要关闭窗口,过程中可能会有一些英文的错误信息冒出来,不过对结果没有什么影响,可以忽略。
程序运行的结果保存在 result 文件夹里面,并且按照航班的起飞日期分成不同文件夹,文件夹用日期命名,如 2018-05-15,文件夹里面,每个起飞机场有一个.csv 文件,csv 里面是该起飞机场到所有到达机场的航班信息
如果程序运行前没有 result 文件夹,或者 result 文件夹被删掉了,那么运行过程中会重新创建 result 文件夹
如果程序运行前 result 里面已经有 csv 文件,则本次抓取的数据会添加在原有文件的后面