|
|
|
|
# Ctrip-Crawler
|
|
|
|
|
这个爬虫程序的主要结构和功能。
|
|
|
|
|
1. 主要类和函数:
|
|
|
|
|
a) DataFetcher 类:这是整个爬虫的核心类。
|
|
|
|
|
b) 辅助函数:
|
|
|
|
|
init_driver(): 初始化 Selenium WebDriver
|
|
|
|
|
gen_citys(): 生成城市组合列表
|
|
|
|
|
generate_flight_dates(): 生成需要爬取的日期列表
|
|
|
|
|
download_stealth_js(): 下载用于隐藏 Selenium 特征的 JavaScript 文件
|
|
|
|
|
DataFetcher 类的主要方法:
|
|
|
|
|
a) refresh_driver(): 刷新浏览器页面
|
|
|
|
|
b) remove_btn(): 移除页面上的一些干扰元素
|
|
|
|
|
c) check_verification_code(): 检查是否出现验证码
|
|
|
|
|
d) login(): 执行登录操作
|
|
|
|
|
e) get_page(): 获取初始页面
|
|
|
|
|
f) change_city(): 更改出发地和目的地
|
|
|
|
|
g) get_data(): 获取航班数据
|
|
|
|
|
h) decode_data(): 解码获取的数据
|
|
|
|
|
i) check_data(): 检查数据的有效性
|
|
|
|
|
j) proc_flightSegments(): 处理航班段信息
|
|
|
|
|
k) proc_priceList(): 处理价格信息
|
|
|
|
|
l) mergedata(): 合并处理后的数据并保存
|
|
|
|
|
主要工作流程:
|
|
|
|
|
a) 初始化 WebDriver
|
|
|
|
|
b) 生成城市组合和日期列表
|
|
|
|
|
c) 对每个城市组合和日期:
|
|
|
|
|
获取页面
|
|
|
|
|
更改城市和日期
|
|
|
|
|
获取数据
|
|
|
|
|
解码数据
|
|
|
|
|
检查数据
|
|
|
|
|
处理航班段和价格信息
|
|
|
|
|
合并数据并保存
|
|
|
|
|
依赖关系:
|
|
|
|
|
get_page() 依赖于 init_driver()
|
|
|
|
|
change_city() 依赖于 get_page()
|
|
|
|
|
get_data() 依赖于 change_city()
|
|
|
|
|
decode_data() 依赖于 get_data()
|
|
|
|
|
check_data() 依赖于 decode_data()
|
|
|
|
|
proc_flightSegments() 和 proc_priceList() 依赖于 check_data()
|
|
|
|
|
mergedata() 依赖于 proc_flightSegments() 和 proc_priceList()
|
|
|
|
|
1. 错误处理和重试机制:
|
|
|
|
|
大多数方法都包含错误处理逻辑,在遇到问题时会尝试重试或刷新页面。如果多次重试失败,程序会重新从获取页面开始。
|
|
|
|
|
数据保存:
|
|
|
|
|
最终的数据以 CSV 格式保存,文件名包含日期和城市信息。
|
|
|
|
|
这个爬虫程序设计得相当健壮,能够处理各种可能出现的问题(如验证码、登录要求等),并且有良好的重试机制。它主要用于爬取携程网站的航班信息,包括航班详情和价格数据。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 概述
|
|
|
|
|
|
|
|
|
|
Ctrip-Crawler 是一个携程航班信息的专业爬虫工具,主要基于 Selenium 框架进行实现。
|
|
|
|
|
request 方法访问携程 API 的方法,由于 IP 限制和 JS 逆向工程的挑战,该途径已不再适用。(报错)
|
|
|
|
|
|
|
|
|
|
携程支持IPV6访问,因此可以通过生成大量IPV6规避 IP 限制。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 主要特性
|
|
|
|
|
|
|
|
|
|
Selenium 自动化框架:与直接请求 API 的方法不同,该项目基于 Selenium,提供高度可定制和交互式的浏览器模拟。
|
|
|
|
|
|
|
|
|
|
灵活的错误处理机制:针对不同类型的异常(如超时、验证码出现、未知错误等),实施相应的处理策略,包括重试和人工干预。
|
|
|
|
|
|
|
|
|
|
IP限制解决方案:利用页面特性和用户模拟,规避了 IP 限制,提高了爬取稳定性。
|
|
|
|
|
|
|
|
|
|
数据校验与解析:对获取的数据进行严格的数据质量和完整性校验,包括 gzip 解压缩和 JSON 格式解析。
|
|
|
|
|
|
|
|
|
|
版本迭代与优化:V2版本解决了验证码问题;V3版本提高了系统的稳定性和可用性;V3.5版本增加了linux系统下多IPV6网口的生成与代理
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 文档和教程
|
|
|
|
|
|
|
|
|
|
详细的使用指南和开发文档可在以下博客中查看:
|
|
|
|
|
|
|
|
|
|
[基于selenium的携程机票爬取程序](https://blog.suysker.xyz/archives/35)
|
|
|
|
|
|
|
|
|
|
[基于selenium的携程机票爬取程序V2](https://blog.suysker.xyz/archives/139)
|
|
|
|
|
|
|
|
|
|
[基于request的携程机票爬取程序](https://blog.suysker.xyz/archives/37)
|
|
|
|
|
|
|
|
|
|
[基于request的航班历史票价爬取](https://blog.suysker.xyz/archives/36)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## TO DO
|
|
|
|
|
|
|
|
|
|
V4.0增加多线程分片运行……
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 贡献与反馈
|
|
|
|
|
|
|
|
|
|
如果你有更好的优化建议或发现任何 bug,请通过 Issues 或 Pull Requests 与我们交流。我们非常欢迎各种形式的贡献!
|