You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
GenFlightRec/README.md

95 lines
3.7 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 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 与我们交流。我们非常欢迎各种形式的贡献!