使用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爬取航班实时数据的更多相关文章

  1. Java爬取同花顺股票数据(附源码)

    最近有小伙伴问我能不能抓取同花顺的数据,最近股票行情还不错,想把数据抓下来自己分析分析.我大A股,大家都知道的,一个概念火了,相应的股票就都大涨. 如果能及时获取股票涨跌信息,那就能在刚开始火起来的时 ...

  2. Java 爬取 51job 数据 WebMagic实现

    Java 爬取 51job 数据 一.项目Maven环境配置 相关依赖 jar 包配置 <parent> <groupId>org.springframework.boot&l ...

  3. Java实现爬取京东手机数据

    Java实现爬取京东手机数据 最近看了某马的Java爬虫视频,看完后自己上手操作了下,基本达到了爬数据的要求,HTML页面源码也刚好复习了下,之前发布两篇关于简单爬虫的文章,也刚好用得上.项目没什么太 ...

  4. Java爬取校内论坛新帖

    Java爬取校内论坛新帖 为了保持消息灵通,博主没事会上上校内论坛看看新帖,作为爬虫爱好者,博主萌生了写个爬虫自动下载的想法. 嗯,这次就选Java. 第三方库准备 Jsoup Jsoup是一款比较好 ...

  5. Python爬取招聘网站数据,给学习、求职一点参考

    1.项目背景 随着科技的飞速发展,数据呈现爆发式的增长,任何人都摆脱不了与数据打交道,社会对于“数据”方面的人才需求也在不断增大.因此了解当下企业究竟需要招聘什么样的人才?需要什么样的技能?不管是对于 ...

  6. Scrapy 通过登录的方式爬取豆瓣影评数据

    Scrapy 通过登录的方式爬取豆瓣影评数据 爬虫 Scrapy 豆瓣 Fly 由于需要爬取影评数据在来做分析,就选择了豆瓣影评来抓取数据,工具使用的是Scrapy工具来实现.scrapy工具使用起来 ...

  7. MinerHtmlThread.java 爬取页面线程

    MinerHtmlThread.java 爬取页面线程 package com.iteye.injavawetrust.miner; import org.apache.commons.logging ...

  8. MinerConfig.java 爬取配置类

    MinerConfig.java 爬取配置类 package com.iteye.injavawetrust.miner; import java.util.List; /** * 爬取配置类 * @ ...

  9. selenium跳过webdriver检测并爬取天猫商品数据

    目录 简介 编写思路 使用教程 演示图片 源代码 @(文章目录) 简介 现在爬取淘宝,天猫商品数据都是需要首先进行登录的.上一节我们已经完成了模拟登录淘宝的步骤,所以在此不详细讲如何模拟登录淘宝.把关 ...

  10. Java爬取网络博客文章

    前言 近期本人在某云上购买了个人域名,本想着以后购买与服务器搭建自己的个人网站,由于需要筹备的太多,暂时先搁置了,想着先借用GitHub Pages搭建一个静态的站,搭建的过程其实也曲折,主要是域名地 ...

随机推荐

  1. Superviso可视化监控进程

    如果您需要同时运行多个 ThinkPHP 命令,可以在 Supervisor 中为每个命令创建一个单独的程序段.以下是示例配置,其中包含两个 ThinkPHP 命令:command1.php 和 co ...

  2. PixiJS源码分析系列:第三章 使用 canvas 作为渲染器

    使用 canvasRenderer 渲染 上一章分析了一下 Sprite 在默认 webgl 渲染器上的渲染,这章让我们把目光聚集到 canvasRenderer 上 使用 canvas 渲染器渲染图 ...

  3. uniapp生成的app怎么上架到iphone的app store

    首先这里需要强调的是,上架app store,必须用自己公司的账号的证书打包,不能使用别的公司的证书打包,因为假如使用别人的证书打包,打包出来的app,只能上传到别人的app store账号,你开发的 ...

  4. 【Java】单号创建服务

    需求:ERP项目存在若干个业务功能,每个业务的单子的单号创建规则需要被统一规划 1.每个业务有自己对应的标识 2.业务单号必须以英文字母为前缀,长度在2 - 4个字符 3.单号的组成 = [ 前缀 ] ...

  5. 【Eclipse】下载安装(Windows)

    Eclipse的下载和安装 官网地址:https://www.eclipse.org/downloads/ 刚用的时候选了安装版,然后安装到一半就失败了 建议点下面的解压包下载,解压即用 注意看框线的 ...

  6. nvtop —— GPU使用情况的可视化工具

    安装: sudo apt install nvtop

  7. 【转载】 softmax_cross_entropy_with_logits中“logits”是个什么意思?

    原文地址: https://zhuanlan.zhihu.com/p/51431626 -------------------------------------------------------- ...

  8. Python3.11二进制AI项目程序打包为苹果Mac App(DMG)-应用程序pyinstaller制作流程(AppleSilicon)

    众所周知,苹果MacOs系统虽然贵为Unix内核系统,但由于系统不支持N卡,所以如果想在本地跑AI项目,还需要对相关的AI模块进行定制化操作,本次我们演示一下如何将基于Python3.11的AI项目程 ...

  9. 最详细STL(四)priority_queue

    好吧,开始累了,不想写那么多废话了,直接讲对打oj有用的部分吧. priority_queue是由堆来实现的,底层是用vector来实现的,接收三个参数 priority_queue<int , ...

  10. Manual 命令手册导出

    man 命令的输出中含有大量的格式化字符和终端控制序列,这些是用来在终端中正确显示格式化文本(如加粗,下划线,分页等)所用的.如 BS(Backspace,退格). 如果我们直接用 man comma ...