java解析HTML之神器------Jsoup
背景:公司项目要对接第三方商城的商品到自己的商城来卖,商品详情给了个链接url,因为对方的商品详情有他们的物流说明,售后信息,所以要求去掉这部分的代码



@Test
public void getItemDetail() throws IOException { String url="https://www.xxx.com";//此处url作了处理,不能提供真实url,防止泄密,侵权,大家可以自己找一个url来完
String itemDetail = getItemDetail(url);
System.out.println(itemDetail);
} private String getItemDetail(String url){
//思路:通过请求获取html文本,通过选择器找到对应的标签,然后找到该标签的父标签,最后将父标签移除
String itemDetailHtml = NetUtil.httpGet(url, Maps.newHashMap());//获取商品详情
if(StringUtils.isBlank(itemDetailHtml)){ return null;
}
Document parse = Jsoup.parse(itemDetailHtml);
//也可以直接使用url来解析,下面注释所示
//URL linkUrl = new URL(url);
// Document parse=Jsoup.parse(linkUrl,5000);
if(parse==null){ return null;
}
//干掉头部图片
//Jsoup强大之处在于可以使用css选择器,但要注意img[src='http://www.konvy.com/static/team/Banner/3.jpg'],属性值这里加了引号,这样会取不到值,下面才是正确的
Elements topImgEls = parse.select("img[src=http://www.konvy.com/static/team/Banner/3.jpg]"); //头部url
if(null!=topImgEls && topImgEls.size()>=1){
Element topImgEl = topImgEls.get(0);//获取第一个元素
Element topPEL = topImgEl.parent();//获取该img标签的父标签P标签
topPEL.remove();//整个p标签移除,元素可以将自己从整个document中移除
}
//干掉底部图片
Elements aEls= parse.select("a[href=http://www.konvy.com/account/signup.php]");//底部第一张图片
if(null!=aEls && aEls.size()>=1){
Element aEL = aEls.get(0);//获取底部a标签
Element pBottom1 = aEL.parent();//获取底部a标签的父标签P
pBottom1.remove();//底部标签自己移除自己
} Elements imgElsBottom = parse.select("img[src=http://www.konvy.com/static/team/Banner/shipping%2024h.jpg]");//底部第二张图片
if(null!=imgElsBottom && imgElsBottom.size()>0){
Element imgBttom = imgElsBottom .get(0); //底部第二张图片
Element pBottom2 = imgBttom.parent();//底部第二张图片的父标签
pBottom2.remove();//底部第二张图片的父标签进行移除
} return parse.toString();
}

依赖:<dependency>
<groupId>org.jsoup</groupId>
<artifactId>com.springsource.org.jsoup</artifactId>
<version>1.5.2</version>
</dependency>
java解析HTML之神器------Jsoup的更多相关文章
- JSoup——用Java解析html网页内容
当需要从网页上获取信息时,需要解析html页面.筛选指定标签,并获取其值是必不可少的操作,解析html页面这方面的利器,Python有BeautifulSoup,Java一直没有好的工具,之前的Htm ...
- Atitit.html解析器的选型 jsoup nsoup ,java c# .net 版本
Atitit.html解析器的选型 jsoup nsoup ,java c# .net 版本 1. 框架选型的要求1 1.1. 文档多1 1.2. 跨平台1 2. html解析器特性:1 2.1. j ...
- java解析xml实例——获取天气信息
获取xml并解析其中的数据: package getweather.xml; import java.io.IOException; import java.util.HashMap; import ...
- java解析xml文件练习——通过应用包名获取应用图标即其他信息(基于魅族应用商店)
1.解析包名数据文件(txt文件),并生成包名数组: package jsouphtml; import java.io.BufferedReader; import java.io.File; im ...
- java解析xml的三种方法
java解析XML的三种方法 1.SAX事件解析 package com.wzh.sax; import org.xml.sax.Attributes; import org.xml.sax.SAXE ...
- atitit.java解析sql语言解析器解释器的实现
atitit.java解析sql语言解析器解释器的实现 1. 解析sql的本质:实现一个4gl dsl编程语言的编译器 1 2. 解析sql的主要的流程,词法分析,而后进行语法分析,语义分析,构建sq ...
- java 解析XML文档
Java 解析XML文档 一.解析XML文档方式: 1.DOM方式:将整个XML文档读取到内存中,按照XML文件的树状结构图进行解析. 2.SAX方式:基于事件的解析,只需要加载XML中的部分数据,优 ...
- Java 解析 XML
Java 解析 XML 标签: Java基础 XML解析技术有两种 DOM SAX DOM方式 根据XML的层级结构在内存中分配一个树形结构,把XML的标签,属性和文本等元素都封装成树的节点对象 优点 ...
- JAVA解析XML的四种方式
java解析xml文件四种方式 1.介绍 1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信息片断的集合.这 ...
随机推荐
- 16_Linux网络配置
A类:255.0.0.0 8 0 000 0001 - 0 111 1111 127用户回环,1-126 2^7-1个A类地址 容纳多少个主机:2^24-2 主机位全0:网络地址 主机位 ...
- Maven项目下的Mybatis逆向工程
IDEA Maven项目的Mybatis逆向工程 1.配置.pom 如果是在多模块开发下,该文件逆向工程要生成的那个模块下的pom文件. <build> <plugins> & ...
- 【VS工具】vs2017中的一些小功能
一.json转为类 1.打开一个json文件,复制 2.打开一个.cs文件,将json粘贴为类 3.got it 二.C#交互窗口 1.视图->其他窗口->C#交互窗口 2.打开了一个窗 ...
- ubuntu使用抓包工具,charles
参考官网:https://www.charlesproxy.com/documentation/installation/apt-repository/ wget -q -O - https://ww ...
- Kotlin 接口
Kotlin 接口与 Java 8 类似,使用 interface 关键字定义接口,允许方法有默认实现: interface MyInterface { fun bar() // 未实现 fun fo ...
- vivo 1805的usb调试模式在哪里,开启vivo 1805usb调试模式的流程
经常我们使用安卓手机通过数据线连接上PC的时候,如果手机没有开启usb调试模式,PC则没办法成功识别我们的手机,部分软件也没办法正常使用,此情况我们需要找方法将手机的usb调试模式打开,下面我们讲解v ...
- Django 应用程序 + 模型 + 基本数据访问
如果你只是建造一个简单的web站点,那么可能你只需要一个app就可以了.如果是复杂的象 电子商务之类的Web站点,你可能需要把这些功能划分成不同的app,以便以后重用. 确实,你还可以不用创建app, ...
- react props与render成员函数
props是组件固有的属性集合,其数据由外部传入,一般在整个组件的生命周期中都是只读的,React的API顶层设计也决定了这一点.属性初值通常由React.createElement函数或者JSX中标 ...
- Confluence 6 升级中的一些常见问题
升级的时候遇到了问题了吗? 如果你想尝试重新进行升级的话,你需要首先重新恢复老的备份.不要尝试再次对 Confluence 进行升级或者在升级失败后重新启动老的 Confluence. 在升级过程中 ...
- 基于Docker的Mysql主从复制搭建
来源:https://www.cnblogs.com/songwenjie/p/9371422.html?tdsourcetag=s_pctim_aiomsg 为什么基于Docker搭建? 资源有 ...