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.oneclass属性为one的div标签
标签名[属性名]a[href]有href属性的a标签
父元素 子元素div  adiv内的a标签
兄弟标签A+兄弟标签Bdiv+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();                  //获取元素的标签体内容

 

  • 5
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
使用Jsoup进行XPath查询需要先引入JsoupXpath依赖。在pom.xml文件中添加以下依赖项: ```xml <dependency> <!-- jsoup HTML parser library @ https://jsoup.org/ --> <groupId>org.jsoup</groupId> <artifactId>jsoup</artifactId> <version>1.15.4</version> </dependency> <dependency> <groupId>cn.wanghaomiao</groupId> <artifactId>JsoupXpath</artifactId> <version>2.5.3</version> </dependency> ``` 然后,可以使用以下代码示例来执行XPath查询: ```java import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import us.codecraft.xsoup.JXDocument; import us.codecraft.xsoup.JXNode; public class JsoupXPathExample { public static void main(String\[\] args) throws IOException { Document document = Jsoup.connect("https://www.example.com").get(); JXDocument jxDocument = JXDocument.create(document); List<JXNode> jxNodes = jxDocument.selN("//div\[@class='example'\]"); for (JXNode jxNode : jxNodes) { Element element = jxNode.asElement(); System.out.println(element.text()); } } } ``` 在上面的示例中,我们首先使用Jsoup连接到指定的网页,然后创建一个JXDocument对象。接下来,我们使用`selN`方法执行XPath查询,传入XPath表达式作为参数。最后,我们遍历查询结果,并将每个结果转换为Jsoup的Element对象,然后打印出其文本内容。 #### 引用[.reference_title] - *1* [410、Jsoup的快速查询---使用xpath选择器](https://blog.csdn.net/l0510402015/article/details/104649360)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [JAVA爬虫JsoupXPath](https://blog.csdn.net/huahuaxingjing/article/details/130324268)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值