Skip to content

luffySAMA/ctrip-crawler

Repository files navigation

说明

本程序使用 nodejs 开发,基于谷歌提供的 headless chrome 浏览器puppeteer,主要功能是抓取携程网上的航班数据

安装步骤

  1. 首先下载 nodejs, 选择符合你自己电脑版本的 nodejs 进行下载,然后在你的电脑上安装 nodejs

  2. 安装完 nodejs 之后,还需要下载本项目的依赖工具,包括 puppeteer,下载方法,双击本文件夹下的install.bat文件

  3. 此时程序的运行环境已经基本准备好了。不过在程序运行之前,还需要做一些小小的配置

程序配置

设置程序运行方式

与程序有关的配置文件都存放在 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 文件,则本次抓取的数据会添加在原有文件的后面

About

ctrip-crawler based on puppeteer

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published