完美假期第一步:用Python寻找最便宜的航班!

【含源码】低价机票秒抢,用Python制作一款低价机票提示器 每次出行前都要提前去各大网站看优惠机票,浪费时间不说还不一定及时。所以今天为大家分享一个利用低价机票的提示器的制作过程,可以每天定时的为大家分享关于低价机票的信息,不仅节约时间还可以及时上线抢机票啦! 阅读详情

一位资深的商业数据分析师将会带你建立一个网络爬虫项目,帮助我们找到最优惠的价格

 

 

 

“你喜欢旅游吗?”

Python资源共享群:484031800

这个简单的问题经常会得到一个积极的回复甚至还会额外收到一个或两个冒险的故事。通常来讲,旅行是一种体验新文化和拓宽自己视野的好方法。

但如果把问题换成“你喜欢查机票的过程吗?”,我敢肯定大家的反应一定会不那么热情……

那么,用 Python 解决你的难点吧!本文作者Fábio Neves,一位资深的商业 数据分析 师将会带你建立一个网络爬虫项目,帮助我们找到最优惠的价格!

具体做法是对特定目的地以及灵活的日期范围(根据你选择的日期前后最多3天)进行航班价格搜索。

搜索结果保存到一个excel中并为你发送一封展示快速统计信息的电子邮件。显然,最终的目的是帮助我们找到最优惠的价格!

如果你真的想试试,你可以在服务器上执行这个脚本(一个简单的Raspberry Pi就可以(注:Raspberry Pi树莓派又称卡片式电脑,外形只有信用卡大小,运算性能和智能手机相仿。So大家在自己笔记本电脑上折腾就足够了。。)),并且每天运行一次或两次。它会将检索结果以邮件的形式发给你,我建议将excel文件保存到Dropbox云端,这样你就可以随时随地访问它。

注:Dropbox是一个类似于百度云的云端服务

 

 

 

 

我还是没找到任何错误低价票,但我想还是有可能的!

它会根据“弹性日期范围”进行检索,以便查找你首选日期的前后最多3天的所有航班。尽管该脚本一次只适用于一组from/to目的地,但你可以轻松地调整它在每个循环内运行多组行程目的地。你甚至可能最终找到一些错误低价票……简直棒极了!

爬虫脚本

当我第一次开始做网络爬虫时,我对这块并不特别感兴趣。我本想用预测建模,财务分析和一些情绪分析来做更多的项目,但事实证明,弄明白如何构建第一个网络爬虫是很有趣的。随着我不断学习,我意识到网络抓取是互联网运转的精髓。

 

 

 

 

是的……就像Larry 和 Sergey一样,在启动爬虫程序后去尽情享受按摩浴缸吧!

你可能认为这是一个非常大胆的想法,但如果我告诉你谷歌就诞生于Larry 和 Sergey通过Java和Python写的爬虫程序呢?谷歌通过爬取整个互联网来试图为你的问题提供最佳答案。有非常多关于网络爬虫的应用程序,即便你更喜欢数据科学中的其他主题,你仍然需要一些爬虫技能来获取想要的数据。

Python可以来拯救你

第一个挑战是选择从哪个平台抓取信息。这其实并不容易,但我最终选择了Kayak。决定之前我尝试了Momondo,Skyscanner,Expedia等等,但这些网站上的验证码部分真的是让人抓狂。经过几次尝试选择交通信号灯,人行横道和自行车的这种“你是真人吗”的检查后,我的结论是Kayak是目前最好的选择,即使它在短时间内加载太多页面时也会抛出安全性校验。

我设置机器人以4到6小时的间隔来查询网站,这样就不会有问题了。在这里和那里偶尔可能会出现卡壳中断现象,但是如果你遇到验证码校验,那么你需要手动进行验证码认证,确认完毕后再启动机器人程序,然后等待几个小时它就会重置。你也可以随意将这些代码应用到其他平台,欢迎你在评论部分分享你的应用!

如果你是个爬虫新手,或者还不了解为什么有一些网站总会设置各种障碍来阻止网络抓取,那么在写第一行爬虫代码之前,请你先阅读了解一下谷歌“ 网络抓取礼仪 ”。如果你像疯子一样准备好了开始网络抓取,你获得努力成果可能会比你想象的要快得多。

网络抓取礼仪 :

http://lmgtfy.com/?q=web+scraping+etiquette

请系好安全带……

打开chrome标签页后,我们将定义一些在循环内使用的函数。关于整体结构的大致想法是这样的:

  • 一个函数将启动机器人,声明我们想要搜索的城市和日期。
  • 此功能获取第一批搜索结果并按“最佳”航班进行排序,随后点击“加载更多结果”。
  • 另一个函数将抓取整个页面,并会返回一个dataframe数据集
  • 重复步骤2和3获取“最便宜”和“最快”的排序结果。
  • 电子邮件将价格的最终结果(最便宜和平均值)发送给你,并且将三个排序(价格、时间、整体最佳)的数据集保存为一个excel文件
  • 前面的所有步骤循环重复,每隔X小时运行一次。

OK,每个Selenium项目都将以webdriver作为开头。我用的是ChromeDriver,当然还有其他选择。比如,PhantomJS或Firefox也很受欢迎。webdriver下载好之后,将其放在一个文件夹中就可以了。代码的第一行将会自动打开一个空白的Chrome标签页。

请注意,我不是在这里开辟新天地,或是提出一种非常具有开拓性的创新。当下确实已经有更先进的方法来寻找便宜的票价,但我希望我的这个帖子可以跟大家分享一些简单而实用的东西!

这些是我用于整个项目所引用的包。我将使用randint来让机器人在每次搜索之间随机停顿几秒钟。这是所有机器人所必备的功能。如果你运行了前面的代码,则需要先打开一个Chrome网页窗口作为机器人检索的入口。

所以,先让我们来快速测试一下,在新网页打开kayak.com。选择你要飞往的城市和日期。选择日期时,请务必选择“+ -3天”。我已经编写了相关的代码,如果你只想搜索特定日期,那么你需要适当地进行一些调整。我将尽量在整个文本中指出所有的变动值。

点击搜索按钮并获取地址栏中的链接。这个链接应该就是我在下面需要用的链接,在这里我将变量kayak定义为url并调用webdriver的get方法。你的搜索结果接下来应该就会出现了。

 

 

 

 

每当短时间内多次使用get命令的时候,系统就会跳出验证码检查。你可以手动解决验证码问题,并在下一个问题出现之前继续测试脚本。从我的测试来看,第一次搜索运行似乎一切正常,所以如果你想要用这段代码,并且让它们之间保持较长的执行间隔,就可以解决掉这个难题。你并不需要每10分钟就更新这些价格,不是吗?!

XPath的坑

目前为止,我们打开了一个浏览器窗口并获得了网址。接下来我会使用XPath或者CSS选择器来抓取价格等其他信息。曾经我也只用XPath,当时我觉得没必要用CSS,但是现在看来最好结合着用。你可以直接用浏览器复制网页XPath来用,你也会发现由XPath虽可以定位网页元素但是可读性很差,所以我渐渐意识到只用XPath很难获得你想要的页面元素。有时候,指向得越细就越不好用。

 

 

 

 

接下来,我们用Python来选择出最低票价的页面元素。上述代码中红色部分就是XPath选择器的代码,在网页中,你可以在任意位置点击右键并选择“检查”来找到它。试试吧,在你想看代码的地方点右键,“检查”它。

 

 

 

 

为了说明我前面所说的XPath的不足,请大家对比如下差异:

1 # This is what the copy method would return. Right click highlighted rows on the right side and select "copy > Copy XPath"//*[@id="wtKI-price_aTab"]/div[1]/div/div/div[1]/div/span/span
2 # This is what I used to define the "Cheapest" buttoncheap_results = ‘//a[@data-code = “price”]’

上述代码中,第二种方式的简洁性清晰可见。它会去搜素具有data-code属性值为price的a元素。而第一种方式则是去搜素一个id为wtKI-price_aTab元素,且该元素嵌在5层div及2层span内。对于这次页面,它能起作用,但这里的坑在于,下次加载页面时,这个id会变,而且每次加载时wtKI值也是动态变化的,所以到时候这段代码就无效了。所以多花点功夫研究一下XPath表示的内容还是对你有价值的。

 

 

 

 

不过这种直接复制XPath的方法对于那些不是很复杂善变的页面来说还是蛮好用的。

基于上述代码结果,如果我想找出所有匹配的结果并存到list里,该怎么做呢?很简单,因为所有结果都在CSS对象resultWrapper中,只要按照我下图代码中写个for循环就能获得所有结果。这个思路掌握了,那下图的代码你也就基本看明白了。也就是说,先选定最外层的页面元素(如本文网站中的resultWrapper),再找一种方式(如XPath)来获取信息,最后再将信息存到可读的对象中(本例中先存在flight_containers中,再存在flights_list中)。

 

 

 

 

我把前三个结果详细内容都打印出来了,里面有我们需要的全部有用信息,但我们还是要找个更好的方法提取它们,这时我们就要对这些元素单独解析。

开始爬数据!

最简单的代码就是读取更多这个函数,我们先从这里开始。我希望在不触发安全校验的情况下获取尽量多的航班,所以在每次加载完页面我都会点击“load more results”按钮。值得注意的是我用到了try语句,因为有的时候不一定会存在这个按钮。

哦嘞,前期铺垫的有点长(抱歉,我确实比较容易跑偏)。我们现在要开始定义用于爬数据的函数了。

我在下文会提到的page_scrape函数中解析了大部分元素。有时候,返回来的航班list中会有两段行程。我简单粗暴地把它拆成两个变量,如section_a_list 和section_b_list。当然,函数还是会返回一个名为flights_df 的DataFrame对象,有了它我们接下来就可以任意排序并视情况切片或合并。

变量名中带a的表示第一段行程,带b的表示第二段行程。接着看下一个函数。

别急,还有干货!

到现在为止,我们有用于加载更多结果的函数,有用于解析这些结果的函数。你可以认为这就完事了,可以靠着它们去手动地爬网页了,但我前面还提到过,我们的目标是能给自己发邮件,当然还能包括一些其他信息。看看下面这个函数start_kayak,所有这些都在里面。

这需要我们定义一下要查询的航班的地点和日期。我们会打开kayak变量中的网址,并且查询结果会直接按照“best”方式排序。在第一次爬数之后,我就获得了页面上方的价格矩阵数据集,它将用于计算均价和最低价,然后和Kayak的预测价(页面的左上角)一起通过电子邮件发出。在单个日期搜素时可能导致错误,因为这种情况下页面顶端没有价格矩阵。

我用outlook邮箱(hotmail.com)做了测试。虽然Gmail我没试过,甚至还有其他各种邮箱,但我想应该都没问题。而且我前文提到的书中也写了其他发邮件的方式,如果你有hotmail邮箱,可以直接在代码中替换你的邮箱信息,就可以用了。

如果你想知道脚本中某部分代码的功能,你要把那部分拷出来测试一下,因为只有这样你才能彻底地理解它。

把代码跑起来

当然,我们还能把我们前面编的函数放进循环里让它一直执行。写明4个输入提示,包括起降的城市和起止时间(输入)。但在测试的时候,我们并不想每次都去输入这个四个变量,就直接修改4个变量,如注释的那四行代码所示。

 

 

 

 

恭喜各位,至此我们已经大功告成了!其实还有很多可以改进的地方,比如我能想到的还可以用Twilio实现发送短信进而取代邮件。你还能架VPN或者以其他隐蔽的方式,同时通过多个服务器来爬数据。还有验证码问题,它们总会不时地跳出来,不过这还是有办法解决的。如果你有比较好的基础,我觉得你可以试试加上这些功能。甚至你还会想把 Excel 文件作为邮件的附件一起发出。 

马上就要十一大长假了!还没订好机票?用Python写了一个钉钉订低价票脚本! 前言 中秋三天假期刚刚过去,很多人也像我一样回味无穷吧吗,感觉不过瘾。没关系紧接着就是十一大长假,不同于以往的三天假期,十一假期足足有五天的时间,甚至七天的假,可以好好的出去玩几天。面对国内如此多的旅游地点,去哪里也是一个难以抉择的问题。 今天给大家分享一个利用低价机票的提示器。每天定时的为大家分享关于低价机票的分享,如果大家不知道去哪里玩,但是刚好看到有心动的低价机票,不如就来一场说走就走的旅行,度过美好的五一小长假吧。 01.程序展示 通过程... 阅读详情

相关推荐

大数据毕业设计PySpark+Hadoop航班延误预测系统 航班可视化

通过预测飞机票价格,并能够更好地安排航班和座位利用率,航空公司可以减少空座位和航班的浪费,从而降低碳排放和资源浪费,实现可持续发展。这对于促进航空公司数字化转型,提升数据分析和预测能力具有重要意义。通过基于Hadoop+Hive的机票价格预测分析与可视化,可以为乘客提供更好的购票体验,为航空公司提供决策支持,促进航空业的可持续发展,并推动大数据技术在航空业的应用。提高乘客购票决策:基于Hadoop的飞机票价格预测能够提供乘客准确的价格预测信息,帮助他们选择合适的购票时间和最优的价格,从而节省成本。

QQ21503882的博客 1046

python每隔几秒执行一次_完美假期第一步:用Python寻找最便宜的航班!

大数文摘出品编译:高延、熊琰、胡笳、蒋宝尚“你喜欢旅游吗?”这个简单的问题经常会得到一个积极的回复甚至还会额外收到一个或两个冒险的故事。通常来讲,旅行是一种体验新文化和拓宽自己视野的好方法。但如果把问题换成“你喜欢查机票的过程吗?”,我敢肯定大家的反应一定会不那么热情......那么,用Python解决你的难点吧!本文作者Fábio Neves,一位资深的商业数据分析师将会带你建立一个网...

weixin_39815600的博客 1186

完美假期第一步:用Python寻找最便宜的航班

大数文摘出品 编译:高延、M.Y.Love、胡笳、蒋宝尚 “你喜欢旅游吗?” 这个简单的问题经常会得到一个积极的回复甚至还会额外收到一个或两个冒险的故事。通常来讲,旅行是一种体验新文化和拓宽自己视野的好方法。 但如果把问题换成“你喜欢查机票的过程吗?”,我敢肯定大家的反应一定会不那么热情...... 那么,用Python解决你的难点吧!本文作者Fábio Neves,一位...

java276582434的博客 526

计算飞机票价格python_完美假期第一步:用Python寻找最便宜的航班!

大数文摘出品编译:高延、M.Y.Love、胡笳、蒋宝尚“你喜欢旅游吗?”这个简单的问题经常会得到一个积极的回复甚至还会额外收到一个或两个冒险的故事。通常来讲,旅行是一种体验新文化和拓宽自己视野的好方法。但如果把问题换成“你喜欢查机票的过程吗?”,我敢肯定大家的反应一定会不那么热情......那么,用Python解决你的难点吧!本文作者Fábio Neves,一位资深的商业数据分析师将会带你建立一个...

weixin_39689819的博客 1056

航空安全风险建模实战:从多源数据融合到智能评估系统构建

数据融合与风险量化是工业智能决策中的核心基础技术,其原理在于整合多源异构数据,通过特征工程提取关键信息,并利用数学模型将抽象风险转化为可计算的指标。这项技术的核心价值在于能够将海量、杂乱的运营数据转化为可解释、可操作的风险洞察,从而支持预测性维护与主动式安全管理。在航空、能源、金融等高可靠性要求领域,该技术被广泛应用于设备健康管理、操作风险控制等场景。本文聚焦航空安全这一典型应用,深入探讨如何基于航班运行、机务维修、气象环境等多维度数据,构建一个从特征定义、模型选择到仿真验证的端到端风险评估体系,其中涉及评

weixin_34005042的博客 426

2026华为OD机试(Python)真题【E卷+A卷+B卷+C卷+D卷】目录+在线OJ

华为OD机试真题题库【E卷+A卷+B卷+C卷+D卷】目录,Python实现。

MISAYAONE的博客 29万+

爬虫爬取某大型网站机票价格源码(part2)

一个完整的爬虫项目,两种方式获取数据,一种cxf rest接口方式,一种quartz作业存数据库方式。涵盖的技术有spring,Hibernate,google genericdao,htmlunit,cxf等。

开源机票数据集,github

ewrgewrrte

完美假期第一步:用Python找寻最便宜的航班!

“你喜欢旅游吗?” 这个简单的问题经常会得到一个积极的回复甚至还会额外收到一个或两个冒险的故事。通常来讲,旅行是一种体验新文化和拓宽自己视野的好方法。 但如果把问题换成“你喜欢查机票的过程吗?”,我敢肯定大家的反应一定会不那么热情… 那么,用Python解决你的难点吧!本文作者Fábio Neves,一位资深的商业数据分析师将会带你建立一个网络爬虫项目,帮助我们找到最优惠的价格! 具体做法是对特...

CDA数据分析师 520

Python实现购买抢购机票

本文档为纯代码,基于Python3开发,目前是可以正常快速使用的,有需要的可以下载

python程序 航班飞行实时展示图

python程序 航班飞行实时动态图,可视化,特别厉害,不信试试

探索GitCode上的好假期脚本:智能旅行规划利器

探索GitCode上的好假期脚本:智能旅行规划利器 去发现同类优质开源项目:https://gitcode.com/ 在现代社会中,规划一次完美的假期既令人兴奋又充满挑战。GitCode上有一个名为"GoodHolidays/Scripts"的开源项目,它利用先进的技术和算法,帮助用户轻松制定个性化旅行计划,让您的旅途变得更加轻松、愉快。 项目简介 GoodHolidays/S...

gitblog_00076的博客 417

机票低价日历

机票低价日历 查询列表页 航班机票旅游酒店低价日历

Python菜鸟在成长——熟悉PyCharm开发环境

PyCharm是由Jetbrains 公司开发的Python集成开发环境,由于其具有智能代码编辑器,可实现自动代码格式化、代码完成、智能提示、重构、单元测试、自动导入和一键代码导航等功能,目前已成为Python专业开发人员和初学者使用的有力工具。 在编写程序时,有时代码下面还弹出黄色的小灯泡,它是用来干什么的? 其实程序没有错误,只是PyCharm对代码提出的一些改进建议或提醒。如添加注释、创建使...

想去见见你的博客 2119

Oracle登录报错ORA-12560?5分钟搞定TNS协议适配器错误的完整修复指南

本文详细解析了Oracle登录报错ORA-12560(TNS协议适配器错误)的成因与解决方案。从基础服务检查到高级网络配置排查,提供了一套完整的修复流程,帮助数据库管理员快速解决连接问题,确保Oracle数据库的稳定运行。

weixin_29278805的博客 521

从理论到实践:全面解析Cmk(设备能力指数)的应用与优化

本文全面解析了设备能力指数Cmk的核心概念、计算逻辑与关键应用场景。Cmk作为衡量设备本身固有加工能力的黄金标准,在设备验收、大修后验证及过程能力根因分析中至关重要。文章通过实战案例,详细阐述了执行Cmk测试的“五大固定”黄金法则、数据计算分析方法,并提供了Cmk不达标时的系统性排查与优化策略,帮助制造企业实现预防性质量管理。

jump7的博客 523
上一篇: python爬虫实战:利用scrapy,短短50行代码下载整站短视频
下一篇: Python3之正则表达式详解!
普通网友
博客等级 码龄7年 438粉丝 263原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值