世界商用飞机机型大全-使用Java抓取FlightAware后的答案

目录

前言

一、数据说明

1、实时航班飞机机型数据

2、网页结构分析

二、使用Java进行信息抓取

1、定义页面PageVO对象

2、爬取属性定义

3、启动信息抓取组件

三、成果分析

1、商业飞行的飞机机型的种类

 2、飞机种类排名前十名

3、航班数排名后十名

4、看中国国产大飞机C919

四、总结


前言

        随着现在航空业的发达以及人们物质生活水平的提升,乘坐飞机出行一定是很多朋友们出行的一种方式,不要说远距离的跨国航线,连我们的祖国的天南海北,乘坐飞机出行,也是相当便利出行的。不知道各位朋友在平时的出行过程当中有没有注意观察,或者说有没有留意自己乘坐的飞机到底是什么机型呢?更往大的范围来说,在当前世界上的商业飞行活动中,一共有多少种飞机机型呢?飞行航班数最多的机型是哪一种?而飞行航班数最少的又是哪一种呢?哪种飞机的机龄最年轻,哪种飞机是飞行器界的老人呢?想想这些问题,是不是很有意思。当下次您在出行的时候,在值机或者购买机票的时候,可以统计以下您乘坐的飞机的机型。也看看我们国家主要的商业飞机机型是什么?主要的飞行航线是哪几条。

        带着上述的问题开启本篇的内容讲解。本文主要讲解如何采用Java语言和XxlCrawler进行flightaware网的所有商用飞机机型的信息爬取,首先介绍在flightaware网上的所有飞行器数据,然后使用Java语言结合XxlCrawler进行信息抓取,最后得到完整的飞行器数据表格。通过本文,您可以掌握如何获取全球执飞的商用飞机的机型信息,同时掌握在使用XxlCrawler进行信息爬取时,如何获取超链接中Href属性,掌握属性值的正确处理方式。最后对成果进行充分展示,本文的结果是Excel表格,但是我们为了可以在后续的分析中继续使用,我们可以将这些数据持久化到数据库中,本文暂且不表。

一、数据说明

        本节将主要对数据的来源进行说明,文中涉及到的飞行轨迹及全球飞机机型数据均参考flightaware飞行网。以飞机机型为例,局限于数据采集时获取的是实时的在线航班的数据,因此导致可能会遗漏部分已经降落的飞行飞机,但对于常用航空器,应该是包含在里面了。如果您需要最准确的数据,可以设置一个频率高的采集周期,定时从网站上采集,通过覆盖24小时甚至72小时的采集,来实现全覆盖(当然这个频率也不一定,有的航线可能一周才开通一次)。当然,您也可以购买会员,这样可以得到一些官方提供的数据。

1、实时航班飞机机型数据

        对飞行轨迹感兴趣的朋友可以在flightaware网站上看到飞机的轨迹,这里需要注意的是,这里的航班都是实时航班,就是正在飞行的。已经到达的航班则不在列表中展示。具体如下图所示:

        当我们想搜索航班时,可以有多种搜索模式,这里就分享一种,同时引出本博客的信息来源,飞机的机型列表。 

        第一步点击导航条中的“航班跟踪”,然后点击“按机型浏览”的超链接。 然后在新的界面中就打开所有的机型选择页面,如下图所示:

        没有,上面的页面就是我们的目标,我们需要将上面的数据进行抓取到本地来。 

2、网页结构分析

        上面的飞机机型访问地址如下:飞机机型列表。为了实现使用Java语言来进行页面信息爬取,我们首先要分析网页的结构,便于在后续的抓取脚本设置中设置好xpath配置。如果使用的是谷歌浏览器,那么我们直接按F12或者右键检查,即可打开网页监控,在监控页面查看网页结构,尤其是xpath的规则。

        通过观察上述的网页,我们不难发现,它的网页结构非常有规律,因此特别使用进行循环批量爬取。其网页内容格式均如下所示:

<tr class="smallrow1">
    <td>2084</td> 
    <td><a href="/live/aircrafttype/A320">A320</a></td> 
    <td>Airbus A320</td>
</tr>

         上面的每一行包含四个主要的信息,第一个是实时航班的数量,第二个单元格的超链接是访问当前机型的实时航航的连接,后面是飞行机器的code,第四个是当前飞机的具体类型名称。在了解以上的信息以后我们就可以编写xpath脚本来获取相关的信息。

二、使用Java进行信息抓取

        本节将重点展示如何使用Java语言来爬取这些航空器的信息,通过本节的知识,可以掌握使用Java语言来爬取相关知识的内容。同时这里将重点讲解如何在XxlCrawler框架中爬取超链接的Href属性,如果您在平时的工作中也要涉及网页属性的爬取,可以看看这里的处理方式。

1、定义页面PageVO对象

        在博主的个人博客当中,大多都是介绍XxlCralwer这个组件。这个组件非常好用,这里依然采用这个组件来进行信息的抓取。在信息抓取之前,我们需要先通过xpath来定义html页面上的元素与我们抓取对象的一个映射关系,这个映射关系的配置就是通过pageVo这个对象来实现的。在上一节的内容介绍中,我们讲解了网页的结构,这里仅将pageVo对象的代码贴出来,对重点部分进行讲解。

/**
* 	请注意合理Xpath的配置,一定要配置到tr,配置到tr,会自动循环获取并赋值,方便于集合操作
* @author 夜郎king
*
*/
@PageSelect(cssQuery = ".indent .prettyTable >tbody >tr")
@Data
@AllArgsConstructor
@NoArgsConstructor
public static class PageVo {

	/**
	* 	实时航班数
	*/
	@Excel(name = "航班数")
	@PageFieldSelect(cssQuery = " >td:eq(0)")
	private String count;
	/**
	* 	机型代号
	*/
	@PageFieldSelect(cssQuery = " >td:eq(1)")
	@Excel(name = "机型代码")
	private String code;
	/**
	* 	查询机型超链接
	* 	这里要特别注意,selectType 切记要选择SelectType.ATTR,表示从属性中获取值,selectVal 表示取具体哪个属性的值,这里表示取href这表属性的值,
	* 	更详细的用法在写博客时,可以参考源码进行详细说明
	*/
	@PageFieldSelect(cssQuery = " >td:eq(1) >a:eq(0)",selectType = SelectType.ATTR,selectVal = "href")
	@Excel(name = "查询机型超链接")
	private String aircraftTypeLink;
	/**
	* 	详细机型
	*/
	@Excel(name = "详细机型")
	@PageFieldSelect(cssQuery = " >td:eq(2)")
	private String aircraftType;	
}

        在上述的代码中,需要注意的地方有:

        (1)、@PageSelect(cssQuery = ".indent .prettyTable >tbody >tr"),在定义pageVO对象时,由于在表格中有多个tr,我们在配置pageVo时,希望会自动形成一个List<PageVo>的数组,因此在定义xpath时一定要定义到tr这一层。

        (2)、在获取机型的超链接时,由于获取的是元素的href属性,因此不要使用下面的获取属性的方法。

/**
* 	查询机型超链接
* 	这里要特别注意,selectType 切记要选择SelectType.ATTR,表示从属性中获取值,selectVal 表示取具体哪个属性的值,这里表示取href这表属性的值,
* 	更详细的用法在写博客时,可以参考源码进行详细说明
*/
@PageFieldSelect(cssQuery = " >td:eq(1) >a:eq(0)",selectType = SelectType.ATTR,selectVal = "href")

         默认情况下,selectType是SelectType.TEXT,详细的配置看源码中的代码定义:

/**
 * jquery data-extraction-type,like ".html()/.text()/.val()/.attr() ..."
 *
 * jquery 数据抽取方式,如 ".html()/.text()/.val()/.attr() ..."等
 *
 * @see com.xuxueli.crawler.conf.XxlCrawlerConf.SelectType
 *
 * @return SelectType
*/
public XxlCrawlerConf.SelectType selectType() default XxlCrawlerConf.SelectType.TEXT;

/**
* jquery data-extraction-value, effect when SelectType=ATTR/HAS_CLASS, like ".attr("abs:src")"
*
* jquery 数据抽取参数,SelectType=ATTR/HAS_CLASS 时有效,如 ".attr("abs:src")"
*
* @return String
*/
public String selectVal() default "";

2、爬取属性定义

        在定义信息获取对象时,除了要定义PageVO转换对象,同时还要定义抓取的地址、抓取信息后保存的集合对象等。这里将分享如何定义这些其它属性信息。

private static final String GET_URL = "https://zh.flightaware.com/live/aircrafttype/";
	
private static final String USER_AGENT = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36";

/**
* 	定义所有机型的接收集合
*/
private List<PageVo> aircraftTypeList = new ArrayList<PageVo>();

3、启动信息抓取组件

        启动信息抓取的代码比较简单,这里不再对详细过程进行赘述。将代码直接贴出来,有问题看不懂的朋友可以私信交流。

@Test
public void testGetAllaircraftType() {
    // 构造爬虫
	XxlCrawler crawler = new XxlCrawler.Builder()
			.setUrls(GET_URL)
			.setAllowSpread(false)// 允许扩散爬取,将会以现有URL为起点扩散爬取整站,这里只爬一个页面,设置为不允许扩散
			.setThreadCount(3)
			.setPauseMillis(2000)
			.setUserAgent(USER_AGENT)//设置user_agent
			.setIfPost(false)
			.setFailRetryCount(3)// 重试三次
			.setTimeoutMillis(10 * 1000)//超时时间定位10秒钟
			.setPageParser(new PageParser<PageVo>() {
				@Override
				public void parse(Document html, Element pageVoElement, PageVo pageVo) {
					// 解析封装 PageVo 对象
					// String pageUrl = html.baseUri();
					// 使用pageVO的方式解析
					// System.out.println(pageUrl + ":" + pageVo.toString());
					printVo(pageVo);
					aircraftTypeList.add(pageVo);
				}
			}).build();
	crawler.start(true);// 启动
	// excel工具包
	ExcelUtil<PageVo> util = new ExcelUtil<PageVo>(PageVo.class);
	util.exportExcel(aircraftTypeList, "全球实时执飞所有机型列表-20240707");
	System.out.println("finished...");
}

        这里的最后,我们将所有飞行器的信息保存到一个list集合中,然后通过list集合写出到excel表格中。这样就可以实现数据的共享了。在IDE中运行上述的程序,在控制台中我们可以看到以下的输出:

        这里贴出几条抓取飞机机型的日志信息:

TestAllAircraftTypeCrawer.PageVo(count=2088, code=A320, aircraftTypeLink=/live/aircrafttype/A320, aircraftType=Airbus A320)
TestAllAircraftTypeCrawer.PageVo(count=1833, code=B738, aircraftTypeLink=/live/aircrafttype/B738, aircraftType=Boeing 737-800)
TestAllAircraftTypeCrawer.PageVo(count=777, code=A321, aircraftTypeLink=/live/aircrafttype/A321, aircraftType=Airbus A321)
TestAllAircraftTypeCrawer.PageVo(count=515, code=B38M, aircraftTypeLink=/live/aircrafttype/B38M, aircraftType=Boeing 737 MAX 8)
TestAllAircraftTypeCrawer.PageVo(count=462, code=A20N, aircraftTypeLink=/live/aircrafttype/A20N, aircraftType=Airbus A320neo)
TestAllAircraftTypeCrawer.PageVo(count=445, code=A21N, aircraftTypeLink=/live/aircrafttype/A21N, aircraftType=Airbus A321neo)

        在我们的下载目录,可以看到在目录中已经生成了如下文件,

        打开任意一个机型文件后可以看到如下信息:

         通过以上的代码和成果展示基本已经实现了我们预期目标,成功的将数据进行信息获取。下面我们来对数据进行一个简单的分析。

三、成果分析

        本节将结合上面的数据来试图回答文章的开始时提出的那几个问题。数据会说话,我们来看看商业航班偏爱哪些飞机的机型。

1、商业飞行的飞机机型的种类

        按照我们采集的数据来看,我们分两天不同的时间段来进行采集。以7月7日和7月8日两天采集的飞行航班的飞机种类数量为统计,其数量大致是在:301-352种之间,之所以有这种区别,是因为这是采集的实时航班数。因此数字仅供参考(7月7日是352种,7月8日是301种)。

 2、飞机种类排名前十名

        这里我们来看一下飞机航班数的前10名是哪些飞机(以7月8日的数据为例):

航班数机型代码查询机型超链接详细机型
2088A320/live/aircrafttype/A320Airbus A320
1833B738/live/aircrafttype/B738Boeing 737-800
777A321/live/aircrafttype/A321Airbus A321
515B38M/live/aircrafttype/B38MBoeing 737 MAX 8
462A20N/live/aircrafttype/A20NAirbus A320neo
445A21N/live/aircrafttype/A21NAirbus A321neo
350B789/live/aircrafttype/B789Boeing 787-9 Dreamliner
336A319/live/aircrafttype/A319Airbus A319
330B77W/live/aircrafttype/B77WBOEING 777-300ER
326C172/live/aircrafttype/C172Cessna Skyhawk

        从上图不难看出,空客A320是绝对的空中数量王,稳居第一,排名第二是波音公司的738,第三名又是空客公司的A321。在排名前十的机型中,空客公司和波音公司基本霸榜了。

3、航班数排名后十名

        上面我们看了排名前10名的航空器,接下来我们开看航班数少的航空器。依然以7月8日的数据为例进行说明:

数量机型详情链接详细机型
1P32T/live/aircrafttype/P32TPiper Lance 2
1PA22/live/aircrafttype/PA22Piper PA-22 Tri-Pacer
1PA38/live/aircrafttype/PA38Piper Tomahawk
1PAT4/live/aircrafttype/PAT4Piper PA-31T3-500 T-1040
1PAY1/live/aircrafttype/PAY1Piper Cheyenne
1PTS2/live/aircrafttype/PTS2PITTS Special (S-2)
1R66/live/aircrafttype/R66Robinson R-66
1S61/live/aircrafttype/S61Sikorsky Sea King
1SS2P/live/aircrafttype/SS2PNorth American Rockwell Thrush Commander
1SW4/live/aircrafttype/SW4Fairchild Dornier SA-227DC Metro
1T6/live/aircrafttype/T6North American T-6 Texan
1TB0/live/aircrafttype/TB0
1TB1/live/aircrafttype/TB1
1ULAC/live/aircrafttype/ULACUnknown/Generic Microlight aircraft

4、看中国国产大飞机C919

        众所周知,C919是我们国家设计建造的国产大飞机,这里我们也来看看C919的飞行航班。在表格中找了以下,C919的航班数较少。

2C919COMAC C-919

        可以看到C919的航班还是比较少的,只有两个架次的商业航班。在系统中来看一下他的飞行计划。

 

        当前C919是在中国东方航空公司进行服役,因此想要感受国产大飞机的可能乘坐东航的飞机的时候机会更大。 

四、总结

        以上就是本文的主要内容,本文主要讲解如何采用Java语言和XxlCrawler进行flightaware网的所有商用飞机机型的信息爬取,首先介绍在flightaware网上的所有飞行器数据,然后使用Java语言结合XxlCrawler进行信息抓取,最后得到完整的飞行器数据表格。通过本文,您可以掌握如何获取全球执飞的商用飞机的机型信息,同时掌握在使用XxlCrawler进行信息爬取时,如何获取超链接中Href属性,掌握属性值的正确处理方式。

        文章行文仓促,定有不足支持,还恳请各位朋友专家批评指正,一定虚心接受。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/784416.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Typora篇-忍痛开启

语雀专业会员即将到期, 我看着99元的学费款, 我决定重新用回Typora。 虽然里面有一些文件但是我还是舍不得ಥ_ಥ 99元巨款。 下面开启我的Typora整活历程&#xff0c; 大家有什么好用的插件快捷方式一起来分享啊。

Profibus转Modbus模块连SmartPLC接汇川630伺服案例

一、环境&#xff1a;Modbus转Profibus模块&#xff08;XD-MDPB100)是一种通讯协议转换器&#xff0c;能够实现Modbus 协议与Profibus-DP协议的信息共享。汇川630伺服作为一种先进的运动控制设备&#xff0c;其平稳性和准确性获得了充分肯定。本文将详细分析怎么使用Profibus转…

U盘管理软件有哪些?3款好用的软件亲测有效!

在数字化办公与数据交换日益频繁的今天&#xff0c;U盘作为便携的存储设备&#xff0c;其重要性不言而喻。 然而&#xff0c;U盘的使用也带来了数据泄露、病毒感染等安全隐患。为了有效管理U盘&#xff0c;确保数据安全与合规性&#xff0c;市场上涌现出了众多U盘管理软件。 小…

代码随想录(day1)二分法

if语句的基本语法 if 要判断的条件: 条件成立的时候&#xff0c;要做的事举例&#xff1a; if nums[middle]<target:leftmiddle1 while语句的基本语法&#xff1a; while 判断条件(condition)&#xff1a;执行语句(statements)举例&#xff1a; while left<right:midd…

ctfshow web入门 nodejs web334--web337

web334 有个文件下载之后改后缀为zip加压就可以得到两个文件 一个文件类似于index.php 还有一个就是登录密码登录成功就有flag username:ctfshow password:123456因为 return name!CTFSHOW && item.username name.toUpperCase() && item.password passwor…

tkinter给按钮设置背景图片

tkinter给按钮设置背景图片 效果代码 效果 代码 import tkinter as tk from PIL import Image, ImageTk# 创建主窗口 root tk.Tk() root.title("按钮背景图片示例")# 加载图片 image Image.open("new.png") photo ImageTk.PhotoImage(image)# 创建按钮…

谷歌云 | Gemini 大模型赋能 BigQuery 情感分析:解码客户评论,洞悉市场风向

情感分析是企业洞察客户需求和改进产品服务的重要工具。近年来&#xff0c;随着自然语言处理 (NLP) 技术的飞速发展&#xff0c;情感分析变得更加精准高效。Google 推出的 Gemini 模型&#xff0c;作为大型语言模型 (LLM) 的代表&#xff0c;拥有强大的文本处理能力&#xff0c…

day02_员工管理

文章目录 新增员工需求分析和设计代码开发功能测试代码完善录入的用户名已存在&#xff0c;抛出异常后没有处理新增员工的时候&#xff0c;创建人id和修改人id设置为了固定值ThreadLocal&#xff08;面试题&#xff09; 分页查询问题解决 启用禁用员工账号需求和分析代码设计 编…

腾讯发布2024大模型十大最新趋势!

近日&#xff0c;在2024世界人工智能大会上&#xff0c;腾讯正式发布了《2024大模型十大趋势——走进“机器外脑”时代》报告。目前&#xff0c;这一报告正在AI产业界各大社群快速传播。 报告中&#xff0c;腾讯研究院试图通过10个关键性的趋势&#xff0c;去理解全世界范围内正…

【React Hooks原理 - useCallback、useMemo】

介绍 在实际项目中&#xff0c;useCallback、useMemo这两个Hooks想必会很常见&#xff0c;可能我们会处于性能考虑避免组件重复刷新而使用类似useCallback、useMemo来进行缓存。接下来我们会从源码和使用的角度来聊聊这两个hooks。【源码地址】 为什么要有这两个Hooks 在开始…

HBuilder X 小白日记03-用css制作简单的交互动画

:hover选择器&#xff0c;用于选择鼠标指针浮动在上面的元素。 :hover选择器可用于所有元素&#xff0c;不只是链接 :link选择器 设置指向未被访问页面的链接的样式 :visited选择器 用于设置指向已被访问的页面的链接 :active选择器 用于活动链接

观察者模式(Observer Pattern)

观察者模式&#xff08;Observer Pattern&#xff09; 定义 观察者模式定义了一种一对多的依赖关系&#xff0c;让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时&#xff0c;会通知所有观察者对象&#xff0c;使它们能够自动更新自己。别名&#xff1…

AI语言处理的双刃剑:Tokens令牌化技术解析

生成式人工智能模型&#xff0c;如GPT-4o&#xff0c;采用基于Transformer架构的复杂处理方式&#xff0c;这与人类处理文本的方式存在明显差异。这些模型依赖于一种称为“令牌化”的过程&#xff0c;将文本分解为更小的片段&#xff0c;称为“令牌”&#xff0c;以便更有效地处…

BP神经网络的实践经验

目录 一、BP神经网络基础知识 1.BP神经网络 2.隐含层选取 3.激活函数 4.正向传递 5.反向传播 6.不拟合与过拟合 二、BP神经网络设计流程 1.数据处理 2.网络搭建 3.网络运行过程 三、BP神经网络优缺点与改进方案 1.BP神经网络的优缺点 2.改进方案 一、BP神经网络基…

XDMA原理学习(1)——DMA技术详解

目录 一、什么是DMA&#xff1f;为什么需要DMA&#xff1f; 二、DMA分类 2.1 Block DMA 2.2 Scatter-Gather DMA 2.3 Ring buffer DMA 三、实际案例 3.1 STM32微处理器 3.1.1 Block DMA 3.1.2 Scatter-Gather DMA 3.1.3 使用场景举例&#xff1a; 3.1.4 配置与实现 …

香橙派OrangePi AIpro测评:我的高性能AI开发板实操

香橙派OrangePi AIpro测评&#xff1a;高性能AI开发板的实际应用与操作指南 前言 在物联网和人工智能领域飞速发展的背景下&#xff0c;开发板作为硬件开发的重要工具&#xff0c;越来越受到开发者的青睐。香橙派OrangePi AIpro因其强大的性能和丰富的接口&#xff0c;成为了…

嵌入式Linux系统编程 — 7.4 fork、vfork函数创建子进程

目录 1 父进程与子进程概念 2 fork创建子进程 3 系统调用 vfork()函数 4 vfork与 fork函数如何选择 1 父进程与子进程概念 进程与子进程是操作系统中的一个基本概念&#xff0c;用于描述进程之间的层级关系。下面是对这一概念的简要说明&#xff1a; 父进程&#xff1a;在…

jmeter-beanshell学习6-beanshell生成测试报告

前面写了各种准备工作&#xff0c;内容组合用起来&#xff0c;应该能做自动化了&#xff0c;最后一步&#xff0c;生成一个报告&#xff0c;报告格式还是csv 报告生成的路径和文件&#xff0c;在用户参数写好&#xff0c;防止以后改路径或者名字&#xff0c;要去代码里面改。以…

第二证券股市资讯:深夜!突然暴涨75%!

一则重磅收买引发医药圈轰动。 北京时间7月8日晚间&#xff0c;美股开盘后&#xff0c;美国生物制药公司Morphic股价一度暴升超75%。音讯面上&#xff0c;生物医药巨子礼来公司官宣&#xff0c;将以57美元/股的价格现金收买Morphic&#xff0c;较上星期五的收盘价溢价79%&…

98.验证二叉搜索树——二叉树专题复习

递归&#xff1a; class Solution {// 判断二叉搜索树是否有效public boolean isValidBST(TreeNode root) {// 递归地检查以 root 为根的子树是否满足 BST 的性质// 同时定义一个范围 [Long.MIN_VALUE, Long.MAX_VALUE] 来约束节点的值return isValidBST(root, Long.MIN_VALUE…