使用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. 【工具】SpringBoot项目如何查看某个maven依赖是否存在以及依赖链路

    当我在SpringBoot项目中想加个依赖,但是不确定现有依赖的依赖的依赖.....有没有添加过这个依赖,怎么办呢?如果添加过了但是不知道我需要的这个依赖属于哪个依赖的下面,怎么查呢? IDEA中提供 ...

  2. cgroup限制进程cpu

    编写一个死循环脚本 [root@workstation ~]# cat circle.sh #!/bin/bash a=1 while true do let a++ done 查看top 使用cgr ...

  3. postfix&dovecot搭建邮件服务器

    本篇参考 https://blog.51cto.com/5001660/2377785和小翔博客https://www.liuyixiang.com/post/113927.html. 邮件发送和接受 ...

  4. 【Zookeeper】Re03 集群搭建

    我这里采用的是模拟真实情况: 部署三台虚拟机Centos7 192.168.242.101 192.168.242.102 192.168.242.103 每台机器都安装Zookeeper且一致: / ...

  5. 【C3】05 层叠与继承

    本文旨在让你理解CSS的一些最基本的概念 --层叠.优先级和继承-- 这些概念决定着如何将CSS应用到HTML中,以及如何解决冲突. 尽管与课程的其他部分相比,完成这节课可能看起来没有那么直接的相关性 ...

  6. 顶级围棋AI被发现漏洞:“超人类人工智能”还有很长的路?

    原文地址: https://www.bjnews.com.cn/detail/1720537986168936.html 参考资料: (1)Can AI be superhuman? Flaws in ...

  7. Jax框架:通过显存分析判断操作是否进行jit编译

    相关: https://jax.readthedocs.io/en/latest/device_memory_profiling.html 代码: import jax import jax.nump ...

  8. 【转载】 NLP如此钟情英语研究真的好吗?

    转载自: https://mbd.baidu.com/newspage/data/landingsuper?context=%7B%22nid%22%3A%22news_965090611243366 ...

  9. 【分享】java精品实战教程

    1.背景 大家好,我是一名地地道道的码农,平时在工作喜欢写博客, 一方面可以梳理技术点提升自己的技术,在遇到同样的问题时可以快速解决; 另一方面也想贡献自己的微博力量帮助其他遇到同样问题的人 后来觉得 ...

  10. Python 将Word转换为JPG、PNG、SVG图片

    将Word文档以图片形式导出,既能方便信息的分享,也能保护数据安全,避免被二次编辑.文本将介绍如何使用Spire.Doc for Python 库在Python程序中实现Word到图片的批量转换. P ...