Jsoup和JsoupXpath详解
Jsoup
jsoup 是一款Java 的XML、HTML解析器,可直接解析某个URL地址、HTML文本内容和已经存在的文件。
XML DOM和HTML DOM一样,都会将xml文件中的所有标签记载到内存并生成一个document对象保存他们
jsoup获取xml、html文件的document对象三种方式:
1.解析一个字符串获取Document对象
static Document parse (String html)
String html = "<div><a href='#'>jsoup测试</a></div>";
Document doc = Jsoup.parse(html);
很少有人会用字符串写html代码,所以此方法并不常用
2.解析一个html文档获取Document对象
static Document parse (File in , String characterName)
String path = test.class.getResource("/html/example.html").getPath();
Document doc = Jsoup.parse(new File(path),"utf-8");
要获取到html文件,可以使用当前的类对象调用getResource()获取到文档的URL对象
然后使用URL对象调用getPath()方法就可以获得html文档的绝对路径
3,解析一个URL资源获取Document对象
static Connection connect(String url)
用获取的连接对象调用get()方法就能获得Document对象
Connection conn = Jsoup.connect("https://www.hao123.com");
Document doc = conn.get();
通过标签属性获得Element对象
Element getElementById (String id )
通过id属性获取一个元素对象
Element tab1 = doc.getElementById("tab1");
Elements getElementsByTag (String tagName )
通过标签获取一个元素集合对象
Elements tr = doc.getElementsByTag("tr");
for (Element element : tr){
System.out.println(element);
}
Elements是一个继承了ArrayList的集合,所以可以直接使用集合的方法,里面保存的都是Element对象
Elements getElementByClass( String className)
通过元素类名获取一个元素集合对象
Elements cn = doc.getElementsByClass("cn");
for (Element element :cn){
System.out.println(element);
}
}
通过css选择器获得元素对象
Elements select (String cssQuery)
通过css选择器获取Elements对象
Element selectFirst(String cssQuery)
通过css选择获得第一个Element对象
普通选择器:
ID选择器 | #id |
class选择器 | .class |
标签选择器 | div |
属性选择器 | [attr] |
属性值选择器 | [attr=xx] |
组合选择器:
标签名.类名 | div.one | class属性为one的div标签 |
标签名[属性名] | a[href] | 有href属性的a标签 |
父元素 子元素 | div a | div内的a标签 |
兄弟标签A+兄弟标签B | div+span | 取到与div标签同级的span标签 |
JsoupXPath
JsoupXPath是基于Jsoup的拓展,使用路径的形式解析XML和HTML文档。核心类为JXDocument
JsoupXPath的节点对象JXNode不仅可以获取标签节点,还可以获取属性节点
public JXDocument (Document doc) 使用Document对象来创建JXDocument对象
String path = test.class.getResource("/html/example.html").getPath();
Document doc = Jsoup.parse(new File(path),"utf-8");
JXDocument jxd = new JXDocument(doc);
List<JXNode> selN( String xpath)
找到路径返回所有满足的节点对象集合
类似Document的select()方法
JXNode selNOne(String xpath)
找到路径返回的第一个满足的节点对象
类似Document的selectFirst()方法
JsoupXPath有4种寻找节点的方式:
1.绝对路径语法
就是以“/”开头,一级一级描述标签的层级路径,不可以跨层级
"/父元素/子元素/孙元素/..."
String path = test.class.getResource("/html/example.html").getPath();
Document doc = Jsoup.parse(new File(path),"utf-8");
JXDocument jxd = new JXDocument(doc);
String str = "/body/table/tbody/tr/td"; //绝对路径找节点
List<JXNode> list = jxd.selN(str);
2.相对路径语法
已有JXNode节点对象的情况下,通过此节点再往下寻找此对象内的其他节点
"./子元素/孙元素"
String path = test.class.getResource("/html/example.html").getPath();
Document doc = Jsoup.parse(new File(path),"utf-8");
JXDocument jxd = new JXDocument(doc);
JXNode jxn = jxd.selNOne("/body/table/tbody");
List<JXNode> sel = jxn.sel("./tr");
先用JXDocument的selNOne()获取一个JXNode节点对象
相对当前节点元素位置继续查找节点,使用JXNode对象的sel()方法再找到所有符合的节点对象集合
3.全文搜索路径
在全局搜索对应的标签,不需要从根目录开始搜索
"//元素" 全局搜索元素
"//元素/子元素或@元素属性" 全局搜索元素后的子路径中找子元素或属性
String path = test.class.getResource("/html/example.html").getPath();
Document doc = Jsoup.parse(new File(path),"utf-8");
JXDocument jxd = new JXDocument(doc);
List<JXNode> jxNodes = jxd.selN("//td/input/@type"); //返回type属性节点对象
若全文路径指向的是@元素属性,则返回的是属性节点对象
若全文路径指向的是元素,则返回的是元素节点对象
4.条件筛选语法
根据条件筛选过滤节点,前面部分为筛选的条件,后面可以加上操作的动作
//元素[@属性=value] 筛选属性为value值的节点对象
//元素[@属性=value]/text() 元素[@属性=value]/html()
获取元素为value值的标签体内容对象
String path = test.class.getResource("/html/example.html").getPath();
Document doc = Jsoup.parse(new File(path),"utf-8");
JXDocument jxd = new JXDocument(doc);
List<JXNode> jxNodes = jxd.selN("//input[@type=checkbox]/html()");
若不加上后面操作的动作,则返回的时候元素节点对象集合
若加上操作动作,则返回的是操作后的值对象集合
Element
JXNode可以调用getElement获得Element对象
JXNode jxn = jxd.selNOne("//input[@type=checkbox]");
Element ele = jxn.getElement();
String attr("属性名")
得到元素上指定属性的值
Elements children()
获取当前元素的子元素列表
String tagName()
得到元素的标签名
String text()
获取元素体文本数据
String path = test.class.getResource("/html/example.html").getPath();
Document doc = Jsoup.parse(new File(path),"utf-8");
Element element = doc.selectFirst("tr");
String id = element.attr("id"); //获取id的属性值
Elements children = element.children(); //获取元素下的所有子对象元素
String tag = element.tagName(); //获取元素的标签名
String text = element.text(); //获取元素的标签体内容
Jsoup和JsoupXpath详解相关推荐
- java爬取网页内容 简单例子(2)——附jsoup的select用法详解
[背景] 在上一篇博文 java爬取网页内容 简单例子(1)--使用正则表达式 里面,介绍了如何使用正则表达式去解析网页的内容,虽然该正则表达式比较通用,但繁琐,代码量多,现实中想要想出一条简单的正则 ...
- Jsoup解析HTML实例及文档方法详解
转载自 Jsoup解析HTML实例及文档方法详解 这篇文章主要介绍了Jsoup如何解析一个HTML文档.从文件加载文档.从URL加载Document等方法,对Jsoup常用方法做了详细讲解,最近提供 ...
- 2021最新版 ElasticSearch 7.6.1 教程详解 爬虫jsoup+es模拟京东搜索(狂神说)
文章目录 一.ElasticSearch 简介 1.了解创始人 Doug Cutting 2.Lucene 简介 3.ElasticSearch 简介 4.ElasticSearch 和 Solr 的 ...
- Java解析HTML之HTMLParser使用与详解
1.相关资料 官方文档:http://htmlparser.sourceforge.NET/samples.html API:http://htmlparser.sourceforge.net/jav ...
- IntelliJ IDEA for Mac中的Maven操作窗口详解
文章目录 简介 操作按钮详解 Reload All Maven Projects Generate Sources and Update Folders For All Projects Downlo ...
- 抓取网站数据入库详解,附图文
抓取网站数据入库详解,附图文 一. 分析需求 1.1 需求分析 刚好有这样一个需求,去抓取下方网站的页面全部数据,并存入MySQL数据库. 这个页面为: 爬取页面 年月日选择 出生于几点,性别: 男或 ...
- 从命令行到IDE,版本管理工具Git详解(远程仓库创建+命令行讲解+IDEA集成使用)
首先,Git已经并不只是GitHub,而是所有基于Git的平台,只要在你的电脑上面下载了Git,你就可以通过Git去管理"基于Git的平台"上的代码,常用的平台有GitHub.Gi ...
- JVM年轻代,老年代,永久代详解
秉承不重复造轮子的原则,查看印象笔记分享连接↓↓↓↓ 传送门:JVM年轻代,老年代,永久代详解 速读摘要 最近被问到了这个问题,解释的不是很清晰,有一些概念略微模糊,在此进行整理和记录,分享给大家.在 ...
- docker常用命令详解
docker常用命令详解 本文只记录docker命令在大部分情境下的使用,如果想了解每一个选项的细节,请参考官方文档,这里只作为自己以后的备忘记录下来. 根据自己的理解,总的来说分为以下几种: Doc ...
最新文章
- maven在idea的配置
- 测试工程师的好日子来啦?Testin发布AI测试产品,提升易用性和自动化效率
- celery中间件:broker
- springboot+shiro使用权限注解问题_无法使用注解_使用注解无法跳转无权限页面
- swift_003(Swift的?和!)
- POJ 3621 最优比率生成环
- Linux复习资料(二)、Linux基本操作
- HashMap put原理详解(基于jdk1.8)
- 三条中线分的六个三角形_初中数学:在三角形中辅助线添加规律归纳总结
- zookeeper使用问题汇总
- fiddler一直报错502
- cmos和ttl_TTL和CMOS的比较
- 深度置信网络(DBN)【经典的DBN网络结构是由若干层 RBM(受限波尔兹曼机)和一层 BP 组成的一种深层神经网络】
- 全国25省市“智慧路灯”项目大汇总!
- Python第二次作业——判断句
- 计算机到路由器用交叉线的好处,路由器与交换机连接-路由器和交换机之间是用交叉线还是用直通线联 – 手机爱问...
- Realsense L515使用
- 要关闭python解释器可使用函数或者快捷键_超星尔雅中华传统文化之戏曲瑰宝第七章节测验网课答案选修课慕课答案...
- CW聚类算法原理 -- 译自《Chinese Whispers》论文
- shell 知识点补充(3)-修改语系/特殊字符/ printf/sed 工具/awk 工具/diff/cmp