随着大数据时代的蓬勃发展和大数据技术的深入应用,网络自动采集机票价格成为了可能。本文结合工作实践,再现从需求分析到技术选型,再到完成设计的工作过程。

机票采价需求分析

获取明确的需求是高效、准确开展工作的前提。机票采价工作中,一是有特殊的时间要求,需在特定的日期采集特定日期的机票;二是未通过携程、飞猪等第三方平台进行,而是通过航班官网采集实际的机票价格;三是为保证价格采集有佐证,需在订单页将价格区域截图保存。

相关技术选型

在分析研究需求之后,发现关键技术点有两个:一是采集实际发生价格,二是价格区域截图,需要选择合适的程序。通过查找相关资料,发现Python的Selenium库可以实现采价和截图的需求。Selenium可以模拟用户在浏览器中的一切操作,甚至可以不打开浏览器模拟操作(后台无界面操作)。此结果完美符合技术需求,既能抓取到价格又能实现截图。

东航采价设计与实现

在东航网站的采价中,最为困扰的有两个问题:一个是登录的验证,另一个是网页数据加载不出来、中途弹出验证的问题。

登录验证和中途验证。通过相关资料找到了一个比较成熟的解决方案。通过比对验证图片和原始图片的RGB信息找到缺口坐标轴计算水平移动距离,采取“进3退1”的方式移动到缺口位置,即可实现验证通过。

刷新网页直到数据加载。由于会存在数据加载不出来的问题,所以在查询结果页加入元素判断,将某个关键元素用Xpath的方式获取,如果存在就继续执行操作,如果不存在则刷新网页重新判断。

采价日期计算。本文的思路为获取当前日期,并根据采价日期的要求计算采价的日期段。再利用Pandas库的Series方法生成采价日期段,用于查询机票。对于不同的网站有不同的日期格式,计算日期方法中设置日期格式参数,用于格式化日期之用。

价格区域截图。在订单页面,通过F12工具定位价格区域的Xpath,并应用Selenium的方法获取该Xpath的坐标和长、宽。操作截图的时候是先截图整个网页,再根据价格区域的坐标、长、宽进行截图。

国航采价设计与实现

查询机票。对于出发城市和到达城市的输入框,国航网站有输入提示,本文思路为按照中文将出发地和输入地发送过去,获取提示框的Xpath地址,再调用点击方法即可实现提示框的输入。出发日期直接将日期输入到输入框即可。

识别弹窗。在实际操作中,成都有弹窗提示登记窗口,此时调用Selenium的方法,切换到Alert窗口,如果切换成功则点击弹窗表示确认,若切换失败则无需做任何操作。

滑动到订单页底部。实际开发过程中,并没找到具体的Selenium滑动页面方式,可以通过编写Javascript代码的方式发送给浏览器执行,具体代码如下:

相关体会

一是技术选型很重要,采用合适的技术能促进工作更好地开展。二是程序可以进一步完善,可以抽象成公共的工具,出发地、到达地可以根据用户指定去采价。

推荐内容