XxlCrawler实战:从FlightAware抓取ICAO代码
创作时间:
2025-01-21 16:58:20
作者:
@小白创作中心
XxlCrawler实战:从FlightAware抓取ICAO代码
飞机出行是长距离旅行或出差的必备方式,登机牌上包含的重要信息之一就是航空公司的ICAO三字码。本文将介绍如何使用XxlCrawler抓取全球航空公司ICAO三字码,并提供两种不同的数据解析方式。
数据源介绍
目标网站
本文选择从航班追踪网站FlightAware获取实时航班对应的航空公司信息。在浏览器中打开目标网站,点击航空公司列表,可以看到包含航空公司ICAO码和英文名称的页面。
页面渲染结构
通过查看网页的调试信息,可以发现数据渲染的层次结构:从最顶层的pageContainer,到下级的prettyTable,再到表格中的tbody、tr和td。我们需要遍历td元素以获取所需数据。
XxlCrawler信息获取
创建XxlCrawler对象
在进行信息抓取前,需要定义抓取对象:
private static final String GET_ICAO_URL = "https://zh.flightaware.com/live/fleet/";
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";
XxlCrawler crawler = new XxlCrawler.Builder()
.setUrls(GET_ICAO_URL)
.setAllowSpread(false)
.setThreadCount(3)
.setPauseMillis(2000)
.setUserAgent(USER_AGENT)
.setIfPost(false)
.setFailRetryCount(3)
.setPageParser(new PageParser<PageVo>() {
@Override
public void parse(Document html, Element pageVoElement, PageVo pageVo) {
printVo(pageVo);
}
}).build();
这里设置为只爬取目标页面一次,不进行扩散抓取。
定义PageVo对象
PageVo对象用于网页数据的解析:
@PageSelect(cssQuery = ".pageContainer .prettyTable >tbody")
@Data
public static class PageVo {
@PageFieldSelect(cssQuery = ">tr >td:eq(0)")
private List<String> flightsNum;
@PageFieldSelect(cssQuery = ">tr >td:eq(1)")
private List<String> icaoCode;
@PageFieldSelect(cssQuery = ">tr >td:eq(2)")
private List<String> airline;
}
这里定义了三个属性分别保存航班数、ICAO代码和航空公司英文名称。
直接PageVO解析
通过定义PageVO对象,可以实现属性的自助解析:
protected void printVo(PageVo pageVo) {
System.out.println(pageVo);
System.out.println(pageVo.getFlightsNum().size());
System.out.println(pageVo.getFlightsNum());
System.out.println(pageVo.getAirline().size());
System.out.println(pageVo.getAirline());
System.out.println(pageVo.getIcaoCode().size());
System.out.println(pageVo.getIcaoCode());
for (int i = 0; i < pageVo.getFlightsNum().size(); i++) {
System.out.println("航班数:" + pageVo.getFlightsNum().get(i) + "\t ICAO代码:" + pageVo.getIcaoCode().get(i)
+ "\t 航空英文名称:" + pageVo.getAirline().get(i));
}
}
运行代码可以看到相关信息已被成功爬取。
自定义解析
如果单元格较多,可以使用自定义解析模式:
protected void printElementVo(Element pageVoElement) {
List<AirlineVo> airlineList = new ArrayList<>();
for (int i = 0; i < pageVoElement.childrenSize(); i++) {
Element childElement = pageVoElement.child(i);
String flightsNum = childElement.child(0).text();
String icao = childElement.child(1).text();
String airline = childElement.child(2).text();
System.out.println("航班数:" + flightsNum + "\t ICAO代码:" + icao + "\t 航空英文名称:" + airline);
airlineList.add(new AirlineVo(flightsNum, icao, airline));
}
ExcelUtil<AirlineVo> util = new ExcelUtil<>(AirlineVo.class);
util.exportExcel(airlineList, "全球航空公司ICAO代码表-20240514");
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public class AirlineVo {
@Excel(name = "航班数")
private String flightsNum;
@Excel(name = "icao代码")
private String icaoCode;
@Excel(name = "航空公司英文名称")
private String airlineEn;
}
最后将抓取的信息列表保存到Excel表格中。
总结
本文介绍了使用XxlCrawler抓取全球航空公司ICAO三字码的方法,提供了两种数据解析方式,并将结果保存为Excel文件。通过本文,读者可以掌握数据抓取和解析的基本技巧,为数据处理和信息获取提供实用的解决方案。
热门推荐
太原中诺口腔医院推荐:老年人种植牙护理秘籍
支付宝账户被限?实名认证等5大解决方法
“四地多走动,子孙才会富”:父母过世后,你多去这几个地方走动
《侦察英雄》揭秘抗美援朝真实历史
生成式AI和多模态AI:未来的超级组合
主动进气格栅故障,发动机亮红灯了怎么办?
哈佛医学院研究证实:角鲨烯是心血管健康的守护者
以经典为名编织跨时空之梦,舞蹈剧场《春之祭》成功首演
八号风球将至,香港机场取消30班航班应对台风
新繁古城里的唐诗宋词新潮流
从高空攀岩到绳索悬垂:户外拓展如何塑造高效团队
最新排列五引热议:双色球中奖概率仅千万分之五
及时清理+专用工具:打造洁净养宠环境的实用指南
王者荣耀凯英雄五级铭文攻略:祸源狩猎鹰眼最佳搭配
118年前的一条铁路,改变了河北、河南、湖北的政治经济格局
学校开学后体温监测方案
北海金滩打卡,解锁最美海上栈道
别把黄连羊肝丸当“护眼神器”,这些使用禁忌要记牢
有钱≠有品位,盘点四个有钱有颜女明星的家,谁最符合你的口味?
印度香料大揭秘:姜黄、肉桂、小豆蔻……哪个才是你的菜?
ZipperDown来袭,你的手机隐私还能保得住吗?
沈阳三大文化展览迎新年:古罗马文明、故宫节庆与冰雪文化
周期训练理论指导下的跑步训练课表设计要点
教你轻松掌握的水煮鲜虾制作技巧
海虾:寒性还是热性,四大益处与四项注意,很多人不了解
三门峡旅游打卡:天鹅湖 vs 大坝,你怎么选?
深度学习赋能图像识别,革新自动驾驶与医疗诊断
贵阳银行:大数据分析优化客户结构的创新实践
从机油压力到转向异响:18种汽车故障应对指南
全球登革热疫情高发,深圳多区域启动应急处置