java爬取航班实时数据
使用jsoup获取航班实时数据
优先使用携程航班数据 如果携程航班数据返回为空 则使用去哪儿航班信息
pom.xml
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.6.1</version>
</dependency>
爬取携程航班信息代码
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.commons.lang.StringUtils;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;
import com.jdkeji.sdcx.common.exceptions.SdcxException; /**
* 携程 航班爬取数据工具类
* @Description:
* @author:haoqingshuang
* @CreatTime:2017年9月28日
*
*/
public class XcFlightUtil { // http://flights.ctrip.com/actualtime/fno--CZ6902-20170928-BJS-URC.html
public static Document getDocument(String url) throws SdcxException{
try {
return Jsoup.connect(url).get();
} catch (IOException e) {
throw new SdcxException("获取航班信息异常,请自行查询航班数据!");
}
} /**
* 根据航班号 爬取航班信息
* @description:
* @author:haoqingshuang
* @CreateDate:2017年9月28日
*/
public static String findFlightByFlightCode(String FlightNumber) throws SdcxException{
StringBuilder sBuffer = new StringBuilder();
if(StringUtils.isEmpty(FlightNumber)){
throw new SdcxException("请输入航班号!");
}
String nowDate = new SimpleDateFormat("yyyyMMdd").format(new Date());
Document doc = getDocument("http://flights.ctrip.com/actualtime/fno--"+FlightNumber+"-"+nowDate+".html");
if(null == doc){
throw new SdcxException("网络异常,请稍后再试!");
} // 航班详情
Elements flightDetail = doc.select("[class=detail-m]"); //起飞详情
Elements detailfly = flightDetail.select("[class=detail-fly]");
//起飞地信息
Elements inldeparture = detailfly.select("[class=inl departure] p");//实际起飞--文字
sBuffer.append(commonIsNull(inldeparture)==""?"":commonIsNull(inldeparture)+":");
Elements inldepartureTime = detailfly.select("[class=inl departure] [class=time]");//实际起飞--时间
sBuffer.append(commonIsNull(inldepartureTime)+",");
Elements inldeparturegray = detailfly.select("[class=inl departure] [class=gray]");
sBuffer.append(commonIsNull(inldeparturegray)+",");
//当前飞机状态
Elements inlbetween = detailfly.select("[class=inl between]");
sBuffer.append(commonIsNull(inlbetween)==""?"":"当前飞机状态:"+commonIsNull(inlbetween)+",");
//目的地信息
Elements inlarrive = detailfly.select("[class=inl arrive] p");
sBuffer.append(commonIsNull(inlarrive)==""?"":commonIsNull(inlarrive)+":");//预计到达
Elements inlarriveTime = detailfly.select("[class=inl arrive] [class=time]");
sBuffer.append(commonIsNull(inlarriveTime)+",");//预计到达时间
Elements inlarrivegray = detailfly.select("[class=inl arrive] [class=gray]");
sBuffer.append(commonIsNull(inlarrivegray)+",");//计划到达 文字+时间 //路线详情
Elements detailroute = flightDetail.select("[class=detail-fly detail-route]");
Elements routeinldeparture = detailroute.select("[class=inl departure]");
sBuffer.append(commonIsNull(routeinldeparture)==""?"":"出发地信息:"+commonIsNull(routeinldeparture)+",");//出发地信息 机场、天气情况
//Elements routegray = routeinldeparture.select("[class=f12] [class=gray ml5]");
//sBuffer.append(commonIsNull(routegray)==""?"":"出发地天气:"+commonIsNull(routegray)+",");//出发地 天气
Elements routeinlbetween = detailroute.select("[class=inl between]").select("p");//飞行数据
sBuffer.append(commonDoubleIsNull(routeinlbetween)==""?"":"飞行数据:"+commonDoubleIsNull(routeinlbetween)+",");
Elements routeinlarrive = detailroute.select("[class=inl arrive]");//目的地信息 机场、天气情况
sBuffer.append(commonIsNull(routeinlarrive)==""?"":"目的地信息:"+commonIsNull(routeinlarrive)+","); //附加信息 值机柜台、登机口、行李转盘
Elements additionalDetail = doc.select("[class=detail-info] [class=operation]");
Elements operation = additionalDetail.select("[class=item]");
sBuffer.append(commonDoubleIsNull(operation)==""?"":"附加信息:"+commonDoubleIsNull(operation)); if(StringUtils.isNotEmpty(sBuffer.toString().replaceAll(",","").replaceAll(" ","").replaceAll("机场攻略","")
.replaceAll(":",""))){
//System.out.println(sBuffer.toString().replaceAll("机场攻略",""));
return sBuffer.toString().replaceAll("机场攻略","");
}else{
return null;
}
} //单个拼接
public static String commonIsNull(Elements elements) {
try {
if(null != elements){
if(null != elements.get(0)){
return elements.get(0).text();
}
}
return "";
} catch (Exception e) {
return "";
}
} //多个字符串拼接 适合 多个 class=aaa
public static String commonDoubleIsNull(Elements elements) {
try {
StringBuilder sBuilder = new StringBuilder();
if(null != elements){
for (int i = 0; i < elements.size(); i++) {
if(null != elements.get(i)){
sBuilder.append(elements.get(i).text());
}
}
}
return sBuilder.toString();
} catch (Exception e) {
return "";
}
} public static void main(String[] args) {
try {
//System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date()));
System.out.println(findFlightByFlightCode("CA1815"));;
//System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date()));
} catch (SdcxException e) {
System.out.println(e.getMessage());
}
}
爬取去哪儿航班信息代码
import java.io.IOException;
import org.apache.commons.lang.StringUtils;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;
import com.jdkeji.sdcx.common.exceptions.SdcxException; /**
* 去哪儿 爬取航班动态工具类 只能查询今日数据
* @Description:
* @author:haoqingshuang
* @CreatTime:2017年10月10日
*
*/
public class QnFlightUtil { public static Document getDocument(String url) throws SdcxException{
try {
return Jsoup.connect(url).get();
} catch (IOException e) {
throw new SdcxException("获取航班信息异常,请自行查询航班数据!");
}
} //单个拼接
public static String commonIsNull(Elements elements) {
try {
if(null != elements){
if(null != elements.get(0)){
return elements.get(0).text();
}
}
return "";
} catch (Exception e) {
return "";
}
} //多个字符串拼接 适合 多个 class=aaa
public static String commonDoubleIsNull(Elements elements) {
try {
StringBuilder sBuilder = new StringBuilder();
if(null != elements){
for (int i = 0; i < elements.size(); i++) {
if(null != elements.get(i)){
sBuilder.append(elements.get(i).text());
}
}
}
return sBuilder.toString();
} catch (Exception e) {
return "";
}
} public static String findFlightByFlightCode(String FlightNumber) throws SdcxException{
StringBuilder sBuffer = new StringBuilder();
if(StringUtils.isEmpty(FlightNumber)){
throw new SdcxException("请输入航班号!");
}
Document doc = getDocument("http://flight.qunar.com/status/fquery.jsp?flightCode="+FlightNumber.trim());
if(null == doc){
throw new SdcxException("网络异常,请稍后再试!");
}
Elements flightDetail = doc.select("[class=state_detail]"); sBuffer.append(commonDoubleIsNull(flightDetail)==""?"":commonDoubleIsNull(flightDetail)); if(StringUtils.isNotEmpty(sBuffer.toString().replaceAll(",","").replaceAll(" ","").replaceAll("相关航班","")
.replaceAll(":",""))){
return sBuffer.toString().replaceAll("相关航班","");
}else{
return null;
}
} public static void main(String[] args) {
try {
//System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date()));
System.out.println(findFlightByFlightCode("HU7835"));;
//System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date()));
} catch (SdcxException e) {
System.out.println(e.getMessage());
}
}
}
测试例子
import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements; public class TestJsoup { public Document getDocument (String url){
try {
return Jsoup.connect(url).get();
} catch (IOException e) {
e.printStackTrace();
}
return null;
} public static void main(String[] args) {
TestJsoup t = new TestJsoup();
Document doc = t.getDocument("http://www.weather.com.cn/html/weather/101280101.shtml");
// 获取目标HTML代码
Elements elements1 = doc.select("[class=sky skyid lv2 on]");
// 今天
Elements elements2 = elements1.select("h1");
String today = elements2.get(0).text();
System.out.println(today);
// 天气情况
Elements elements3 = elements1.select("[class=wea]");
String number = elements3.get(0).text();
System.out.println(number);
// 高的温度
Elements elements5 = elements1.select("[class=tem]");
Elements elements9 = elements5.select("span");
String highTemperature = elements9.get(0).text()+"°C";
System.out.println(highTemperature);
// 低的温度
Elements elements10 = elements5.select("i");
String lowTemperature = elements10.get(0).text()+"°C";
System.out.println(lowTemperature);
// 风力
Elements elements6 = elements1.select("[class=win] i");
String wind = elements6.get(0).text();
System.out.println(wind);
} }
例子网站
http://www.cnblogs.com/xiaoMzjm/p/3899366.html
java爬取航班实时数据的更多相关文章
- Java爬取同花顺股票数据(附源码)
最近有小伙伴问我能不能抓取同花顺的数据,最近股票行情还不错,想把数据抓下来自己分析分析.我大A股,大家都知道的,一个概念火了,相应的股票就都大涨. 如果能及时获取股票涨跌信息,那就能在刚开始火起来的时 ...
- Java 爬取 51job 数据 WebMagic实现
Java 爬取 51job 数据 一.项目Maven环境配置 相关依赖 jar 包配置 <parent> <groupId>org.springframework.boot&l ...
- Java实现爬取京东手机数据
Java实现爬取京东手机数据 最近看了某马的Java爬虫视频,看完后自己上手操作了下,基本达到了爬数据的要求,HTML页面源码也刚好复习了下,之前发布两篇关于简单爬虫的文章,也刚好用得上.项目没什么太 ...
- Java爬取校内论坛新帖
Java爬取校内论坛新帖 为了保持消息灵通,博主没事会上上校内论坛看看新帖,作为爬虫爱好者,博主萌生了写个爬虫自动下载的想法. 嗯,这次就选Java. 第三方库准备 Jsoup Jsoup是一款比较好 ...
- Python爬取招聘网站数据,给学习、求职一点参考
1.项目背景 随着科技的飞速发展,数据呈现爆发式的增长,任何人都摆脱不了与数据打交道,社会对于“数据”方面的人才需求也在不断增大.因此了解当下企业究竟需要招聘什么样的人才?需要什么样的技能?不管是对于 ...
- Scrapy 通过登录的方式爬取豆瓣影评数据
Scrapy 通过登录的方式爬取豆瓣影评数据 爬虫 Scrapy 豆瓣 Fly 由于需要爬取影评数据在来做分析,就选择了豆瓣影评来抓取数据,工具使用的是Scrapy工具来实现.scrapy工具使用起来 ...
- MinerHtmlThread.java 爬取页面线程
MinerHtmlThread.java 爬取页面线程 package com.iteye.injavawetrust.miner; import org.apache.commons.logging ...
- MinerConfig.java 爬取配置类
MinerConfig.java 爬取配置类 package com.iteye.injavawetrust.miner; import java.util.List; /** * 爬取配置类 * @ ...
- selenium跳过webdriver检测并爬取天猫商品数据
目录 简介 编写思路 使用教程 演示图片 源代码 @(文章目录) 简介 现在爬取淘宝,天猫商品数据都是需要首先进行登录的.上一节我们已经完成了模拟登录淘宝的步骤,所以在此不详细讲如何模拟登录淘宝.把关 ...
- Java爬取网络博客文章
前言 近期本人在某云上购买了个人域名,本想着以后购买与服务器搭建自己的个人网站,由于需要筹备的太多,暂时先搁置了,想着先借用GitHub Pages搭建一个静态的站,搭建的过程其实也曲折,主要是域名地 ...
随机推荐
- CF1988C Increasing Sequence with Fixed OR Solution
题意简述如下: 给定一个正整数 \(n\),请构造一个正整数序列使其满足以下条件并尽可能长:这个序列中每个数都大于等于 \(1\) 且小于等于\(n\):这个序列是单调递增的:这个序列中任意两个相邻的 ...
- 智能家居如何把老款定频空调变成智能“变频”空调#米家#智能家居#HA
背景 最近长沙的天气暴热,室内达到了34-35度,天气预报最高温度上了40度,这么酷热的天气,离开了空调,基本上就是一身汗,全身湿透,特别难受,然后不得不开启家里的一台将近10年的老式定频空调,输入功 ...
- 【Java】图片压缩处理
需求如下: 一些图片太大了,手机拍摄上传的图片有5M大小,然后阅读的内容其实不需要特别高的分辨率 1M以下的图片并不需要被压缩,压缩只是针对部分过大的图片处理 图片处理库: 我看了几篇,还是选代码量最 ...
- ECMO(体外膜氧合)的使用费用为什么会这么高?
给一个大致的费用: 相关: https://www.bilibili.com/video/BV1rc411H7uT/ https://haokan.baidu.com/v?pd=wisenatural ...
- 为什么模具设计人员中很多人不喜欢使用CAE仿真软件呢? —— 以汽车制造领域为例
参考论文: 通常 的有限元分析软件在后处理 上只是将计算结果 以图形或表格的 方式显 示 在屏幕上 , 并没有对计算结果进行系统的整理 和提炼 . 在基于有 限元 计算结果 的反复设计过程 中, 设计 ...
- PID入门视频课程分享: 单片机 > PID课程:一堂课帮你搞定PID算法 > pid算法
推荐入门视频: <PID课程:一堂课帮你搞定PID算法> 收费版: http://t.elecfans.com/v/1399.html 免费版: 地址: https://www.bilib ...
- error while loading shared libraries: libxml2.so.2: cannot open shared object file 解决方法
参考: https://blog.csdn.net/qq_39779233/article/details/128215517 ==================================== ...
- 【转载】AI的剥削:肯尼亚工人训练ChatGPT,看大量有害内容心理受伤——AI新时代下剥削
原文地址: https://mbd.baidu.com/newspage/data/landingsuper?context=%7B%22nid%22%3A%22news_90623597686514 ...
- Apache DolphinScheduler 社区5月月报更新!
各位热爱 DolphinScheduler 的小伙伴们,社区5月份月报更新啦!这里将记录 DolphinScheduler 社区每月的重要更新,欢迎关注,期待下个月你也登上Merge Star月度榜单 ...
- 使用 Nuxt 的 showError 显示全屏错误页面
title: 使用 Nuxt 的 showError 显示全屏错误页面 date: 2024/8/26 updated: 2024/8/26 author: cmdragon excerpt: 摘要: ...