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搭建一个静态的站,搭建的过程其实也曲折,主要是域名地 ...
随机推荐
- 题解:P9777 [HUSTFC 2023] Fujisaki 讨厌数学
令 \(f(n)=x^{n}+x^{-n}\). 可以发现 \(f(n)f(m)=x^{n-m}+x^{m-n}+x^{n+m}+x^{-n-m}=f(n-m)+f(m+n)\). 若 \(m=1\) ...
- LeetCode455.分发饼干
LeetCode题目链接:https://leetcode.cn/problems/assign-cookies/description/ 题目叙述 假设你是一位很棒的家长,想要给你的孩子们一些小饼干 ...
- manim边学边做--Table
表格是一种常见的数据展示形式,manim提供了Table模块专门用于显示表格形式的数据.表格Table和上一节介绍的矩阵Matrix都是用来显示二维数据的,不过,Table的表现力更强,比如,它可以显 ...
- 如何安装Ascend深度学习套件
1. 驱动安装 1.1 驱动测试 输入测试命令: npu-smi info 结果如下: 1.2 Ascend驱动未安装 请参考Ascend驱动的安装文档,进行安装对应显卡的驱动,文档链接如下:http ...
- python raise异常处理
python raise异常处理 一般最简单的异常处理是try except: try: f = open('test.txt') except Exception as e: print(e) f ...
- 使用Nginx Proxy Manager配置Halo的反向代理和申请 SSL 证书
本文介绍Nginx Proxy Manager配置Halo的反向代理和申请 SSL 证书,如需要了解Halo 2的安装,参考如何在Linux云服务器上通过Docker Compose部署安装Halo, ...
- 【Mybatis-Plus】制作逆向工具
官方文档可参考: https://baomidou.com/pages/779a6e/#快速入门 工具需要的依赖 <?xml version="1.0"?> <p ...
- 【MySQL】Windows-5.7.30 解压版 下载安装
1.Download 下载 mysql官网: https://dev.mysql.com/ 找到download点击进入下载页面: https://dev.mysql.com/downloads/ 找 ...
- 特斯拉在感知网络架构引入BEV三维空间转化层
Learnging Where To Look End-to-End
- ubuntu系统grub修复(win+ubuntu双系统环境),修复无法启动问题 boot-repair
相关: https://help.ubuntu.com/community/Boot-Repair ================================================== ...