4.1 Jsoup解析

在上一章介绍了如何使用Jsoup获取网页资源,本节将重点介绍Jsoup的解析功能。Jsoup依赖于CSS选择器与jQuery方法来操作HTML文件中的数据。使用Jsoup解析前,需要了解Node、Element和Document的概念以及CSS选择器、Jsoup获取元素和Jsoup获取元素文本的方法。

1.Node、Element和Document简介
节点(Node):HTML文件中所包含的内容都可以看成一个节点。节点有很多种类型,如属性节点(Attribute)、注释节点(Node)、文本节点(Text)和元素节点(Element)等。解析文件的过程,实际上就是对节点操作的过程。
元素(Element):节点的子集,所以一个元素也是一个节点。
文档(Document):整个HTML文档的源码内容。

2.CSS选择器
CSS(Cascading Style Sheets),即层叠样式表,主要用于HTML文档的样式化与布局,具体涉及字体、颜色、编辑和高级定位。CSS Selector,即CSS选择器,是用于匹配元素(Elements)的一种模式。在网络爬虫中,常使用CSS选择器,定位HTML文档中的元素,进而抽取HTML文档中的相应字段。下面介绍,chrome浏览器获取元素Selector的方法。首先,按F12打开chrome的开发者工具,点击工具左上角箭头的图标,然后移动鼠标到目标元素的上,此时工具上会高亮被选中的元素,点击右键选择Copy下的Copy selector即可。

3.Jsoup获取元素的常用方法

方法描述
Elements getElementsByTag(String tagName)基于标签名称获取元素集合
Element getElementById(String id)基于id获取元素
Elements getElementsByClass(String className)基于类名称获取元素集合
Elements getElementsByAttribute(String key)基于属性名称获取元素集合
Elements getElementsByAttributeValue(String key, String value)基于属性值获取元素集合
Elements children()获取子元素集合
Elements siblingElements()获取兄弟元素集合
Element nextElementSibling()获取下一个兄弟元素
Element previousElementSibling()获取上一个兄弟元素
Element firstElementSibling()获取第一个兄弟元素
Element lastElementSibling()获取最后一个兄弟元素

4.Jsoup获取元素文本的常用方法

方法描述
String text()元素的所有文本信息
String ownText()文本节点的信息
List childNodes()获取孩子节点集合
List textNodes()获取文本节点的集合
程序4-1
public class Jsoup {
    public static void main(String[] args) {
        String pStr = "<p>One <span>Two</span> Three <br> Four</p>";
        Document document = Jsoup.parse(pStr);
        Element p = document.getElementsByTag("p").get(0);
        //text() 输出:One Two Three Four
        System.out.println("text()方法输出:" + p.text());

        //ownText() 输出:One Three Four
        System.out.println("ownText()方法输出:" + p.ownText());

        //children() 输出:<span>Two</span> <br>
        Elements children = p.children();
        System.out.println("children()方法输出:" + children.toString());

        //childNodes() 输出:[One , <span>Two</span>,  Three , <br>,  Four]
        List<Node> nodeList = p.childNodes();
        System.out.println("childNodes()方法输出:" + nodeList.toString());
        //textNodes() 输出:[One ,  Three ,  Four]
        List<TextNode> textNodeList = p.textNodes();
        System.out.println("textNodes()方法输出:" + textNodeList);
    }
}

程序运行结果如下图所示。
在这里插入图片描述

5.遍历元素

//程序4-2
public class Jsoup {
    public static void main(String[] args) {
        String str = "<ul>\n" +
                "\t<li>Spring</li>\n" +
                "\t<li>SpringBoot</li>\n" +
                "\t<li>SpringCloud</li>\n" +
                "</ul>";
        Document document = Jsoup.parse(str);
        Elements liElements = document.getElementsByTag("li");
        for(Element element:liElements){
            System.out.println(element.text());
        }
    }
}

程序运行结果如下图所示。
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值