Jsoup使用

Jsoup使用
1. 加入Jsoup依赖
<!-- https://mvnrepository.com/artifact/org.jsoup/jsoup -->
<dependency>
    <groupId>org.jsoup</groupId>
    <artifactId>jsoup</artifactId>
    <version>1.11.3</version>
</dependency>

2. 解析url
//解析url地址,第一个参数是url,第二个参数是访问超时时间
Document document = Jsoup.parse(new URL("https://www.baidu.com"),1000);
//使用标签选择器
String content = document.getElementsByTag("title").first().text();
System.out.println(content);
  • jsoup也可以像httpclient一样发起请求,但是它对多线程,代理等方面支持的并不好
  • 在这里,我从中央仓库导入的jsoup依赖各个版本都无法使用,似乎是中央仓库的jar包出问题了,所以我下载了一个jar包放到了本地仓库
3. 解析字符串
//直接解析字符串
String conten2 = "<title>JsoupTest</title>";
Document document1 = Jsoup.parse(conten2);
//若直接输出document1,他会自动把html,head,body标签补充完整
conten2 = document1.getElementsByTag("title").first().text();
System.out.println(conten2);
4. 解析文件
//解析文件
//System.out.println(System.getProperty("user.dir"));
Document document2 = Jsoup.parse(new File(System.getProperty("user.dir")+"\\src"+"\\Test.html"),"utf-8");
String content3 = document2.getElementsByTag("title").first().text();
System.out.println(content3);
5. 使用Dom方法遍历文档

元素获取

  • 根据id查询元素getElementByld
  • 根据标签获取元素getElementsByTag
  • 根据class获取元素getElementsByClass
  • 根据属性获取元素getElementsByAttribute
//Dom遍历文档
Document document3 = Jsoup.parse(new File("C:\\Users\\HASEE\\Desktop\\index.html"),"utf-8");
//根据id查询元素
Element element = document3.getElementById("test");
System.out.println("根据id: "+element.text());

//根据标签
Elements element1 = document3.getElementsByTag("span");
for (Element e :
        element1) {
    System.out.println("根据标签:"+e.text());
}

//根据class
Elements element3 = document3.getElementsByClass("class_a");
System.out.println(element3.first().text());

//根据属性获取元素
Elements element2 = document3.getElementsByAttribute("abc");
System.out.println(element2.first().text());
6. 元素中获取数据
  • 获取id
  • 获取className
  • 获取属性值attr
  • 获取所有的属性attributes
  • 获取文本内容text
    Document document = Jsoup.parse(new File("C:\\Users\\HASEE\\Desktop\\index.html"),"utf-8");
//根据id获取元素
        Element element = document.getElementById("test");

//        + 获取id
        String id = element.id();
        System.out.println(id);

//                + 获取className
        String classname = element.className();
        //若class有两个,classNames将会把他们分开
        Set<String> classnames = element.classNames();
        System.out.println(classname);
        for (String s :
                classnames) {
            System.out.println(s);
        }

//                + 获取属性值attr
        //我的文件中有aaaa这个属性,否则空指针异常
        String attr = element.attr("aaaa");
        System.out.println(attr);

//                + 获取所有的属性attributes
        Attributes attributes = element.attributes();
        for (Attribute attrs:attributes) {
            System.out.println(attrs.getValue());
        }

//                + 获取文本内容text
        String text = element.text();
        System.out.println(text);
7. 使用Selector选择器获取元素
  • tagname:通过标签查找
  • #id:通过id查找
  • .class:通过class查找
  • [attribute]:通过属性查找
  • [attr=value]:通过属性值
Document document = Jsoup.parse(new File("C:\\Users\\HASEE\\Desktop\\index.html"),"utf-8");
//        - tagname:通过标签查找
        Elements elements1 = document.select("span");
        for (Element e:elements1) {
            System.out.println("通过标签:"+e.text());
        }

//                - #id:通过id查找
        Elements elements2 = document.select("#test");
        for (Element e:elements2) {
            System.out.println("通过id:"+e.text());
        }

//                - .class:通过class查找
        Element element = document.select(".class_a").first();
        System.out.println("通过class"+element.text());

//                - [attribute]:通过属性查找
        Element element1 = document.select("[aaaa]").first();
        System.out.println("通过属性"+element1.text());

//                - [attr=value]:通过属性值
        Element element2 = document.select("[aaaa=112233]").first();
        System.out.println("通过属性值"+element2.text());
8. 选择器组合使用
  • el#id:元素+id
  • el.class:元素+class
  • el[attr]:元素+属性名
  • 任意组合
  • ancestor child:查找某元素的ziyuansu
  • parent>child:查找某个父元素下的直接子元素
  • parent>*查找某个父元素下的所有直接子元素
Document document = Jsoup.parse(new File("C:\\Users\\HASEE\\Desktop\\index.html"),"utf-8");

//        + el#id:元素+id
        Element element = document.select("li#test").first();
        System.out.println(element.text());

//                + el.class:元素+class
        Element element1 = document.select("li.class_a").first();
        System.out.println(element1.text());

//        + el[attr]:元素+属性名
        Element element2 = document.select("span[abc]").first();
        System.out.println(element2.text());

//                + 任意组合
        Element element3 = document.select("span[abc].123").first();
        System.out.println(element3.text());

//                + ancestor child:查找某元素的ziyuansu
        Element element4 = document.select(".city_all li").first();
        System.out.println(element4.text());

//                + parent>child:查找某个父元素下的直接子元素
        Element element5 = document.select(".city_all>ul>li").first();
        System.out.println(element5.text());

//                + parent>*查找某个父元素下的所有直接子元素
        Elements elements = document.select(".city_all>ul>*");
        for (Element e:elements) {
            System.out.println(e.text());
        }

很容易理解的,懂一个其他的都可以理解了,忘了可以来这里看看哦!!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值