java爬虫(二)- Jsoup

41 篇文章 0 订阅
6 篇文章 0 订阅

jsoup 介绍

jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。

jsoup的主要功能如下:

  1. 从一个URL,文件或字符串中解析HTML;
  2. 使用DOM或CSS选择器来查找、取出数据;
  3. 可操作HTML元素、属性、文本;( Jsoup一般用于解析爬到的数据并存储, 很少用到操作 )
1,准备环境,导入所需依赖
		<dependency>
            <groupId>org.jsoup</groupId>
            <artifactId>jsoup</artifactId>
            <version>1.13.1</version>
        </dependency>
		 <dependency>
	        <groupId>commons-io</groupId>
	        <artifactId>commons-io</artifactId>
	        <version>2.4</version>
    	</dependency>
		 <dependency>
	        <groupId>org.apache.commons</groupId>
	        <artifactId>commons-lang3</artifactId>
	     	<version>3.4</version>
      	</dependency>
2,获取网页第一个title标签的文本内容
		// 解析Url地址 参数1:访问的url,参数2:访问的超时时间
        Document doc = Jsoup.parse(new URL("http://www.myqxin.com"), 1000);
        // 使用选择器,获取想要的内容
        String title = doc.getElementsByTag("title").first().text();
        System.out.println(title);

虽然使用Jsoup可以替代HttpClient直接发起请求解析数据,但是往往不会这样用,因为实际的开发过程中,需要使用到多线程,连接池,代理等等方式,而jsoup对这些的支持并不是很好,所以我们一般把jsoup仅仅作为Html解析工具使用

3,jsoup解析字符串|文件
 		// 使用工具类读取文件,获取字符串
        String context = FileUtils.readFileToString(new File("C:\\Users\\myqxin\\Desktop\\set.html"), "utf8");
        // 解析字符串
        Document doc = Jsoup.parse(context);
 		// 解析文件
        //Document doc = Jsoup.parse(new File("C:\\Users\\myqxin\\Desktop\\set.html"), "utf8");
        String title = doc.getElementsByTag("title").first().text();
        System.out.println(title);

这里的set.html内容是自己测试用的内容,仅仅是为了演示,实际情况根据你们所接触到的页面而定

4,使用dom 方式遍历文档

元素获取

1,根据id查询元素 getElementById

2,根据标签获取元素 getElementsByTag

3,根据class获取元素 getElementsByClass

4,根据属性获取元素 getElementsByAttribute

		// 解析文件,获取doc对象
        Document doc = Jsoup.parse(new File("C:\\Users\\myqxin\\Desktop\\set.html"), "utf8");

        // 1,根据id查询元素 getElementById
        Element element1 = doc.getElementById("people");
        // 2,根据标签获取元素 getElementsByTag
        Element element2 = doc.getElementsByTag("span").first();

        // 3,根据class获取元素 getElementsByClass
        Element element3 = doc.getElementsByClass("").first();
        // 4,根据属性获取元素 getElementsByAttribute
        Element element4 = doc.getElementsByAttribute("").last();
        // 根据属性和属性值获取
        Element element5 = doc.getElementsByAttributeValue("abc","123").last();

元素中的数据获取

1,从元素中获取id

2,从元素中获取className

3,从元素中获取属性的值 attr

4,从元素中获取所有属性 attributes

5,从元素中获取文本内容 text

		// 解析文件,获取doc对象
        Document doc = Jsoup.parse(new File("C:\\Users\\myqxin\\Desktop\\set.html"), "utf8");
        // 1,根据id查询元素 getElementById
        Element element = doc.getElementById("people");
        // 1,从元素中获取id
        String str1 = element.id();
        // 2,从元素中获取className
        String str2 = element.className();
        // 3,从元素中获取属性的值 attr
        String str3 = element.attr("id");
        // 4,从元素中获取所有属性 attributes
        Attributes str4 = element.attributes();
        // 5,从元素中获取文本内容 text
        String str5 = element.text();
5,使用选择器获取元素

selector选择器概述

tagname:通过标签查找元素,比如:span

#id:通过ID查找元素,比如:#myqxin

.class:通过class名称查找元素,比如:class_a

[attribute]:利用属性查找元素,比如:[abc]

[attr=value]:利用属性值查询元素,比如:[class=s_name]

		// 解析文件,获取doc对象
        Document doc = Jsoup.parse(new File("C:\\Users\\myqxin\\Desktop\\set.html"), "utf8");
        // tagname:通过标签查找元素,比如:span
        Elements spans = doc.select("span");
        // #id:通过ID查找元素,比如:#myqxin
        Element first = doc.select("#myqxin").first();
        // .class:通过class名称查找元素,比如:class_a
        Element last = doc.select(".class_a").last();
        // [attribute]:利用属性查找元素,比如:[abc]
        Elements select = doc.select("[abc]");
        // [attr=value]:利用属性值查询元素,比如:[class=s_name]
        Elements elements1 = doc.select("[class=s_name]");
        Elements elements2 = doc.select("[id=myqxin]");
6,select选择器组合使用

el#id:元素+ID,比如:h3#myqxin

el.class:元素+class,比如:li.class_a

el[attr]:元素+属性名,比如:span[abc]

任意组合:比如:span[abc].s_name

ancestor child:查找某个元素下子元素,比如:.city_con li 查询“city_con”下的所有li

parent > child:查找某个父元素下的直接子元素,比如.city_con > ul > li 查找city_con 第一级(直接子元素)的 ul,再找所有ul 下的第一级li

parent > * :查找某个父元素下所有直接子元素

 		// 解析文件,获取doc对象
        Document doc = Jsoup.parse(new File("C:\\Users\\myqxin\\Desktop\\set.html"), "utf8");
        // el#id:元素+ID,比如:h3#myqxin
        Elements select1 = doc.select("h3#myqxin");
        // el.class:元素+class,比如:li.class_a
        Elements select2 = doc.select("li.class_a");
        // el[attr]:元素+属性名,比如:span[abc]
        Elements select3 = doc.select("span[abc]");
        // 任意组合:比如:span[abc].s_name
        Elements select4 = doc.select("span[abc].s_name");
        // ancestor child:查找某个元素下子元素,比如:.city_con li 查询“city_con”下的所有li
        Elements select5 = doc.select(".city_con li");
        // parent > child:查找某个父元素下的直接子元素,比如.city_con > ul > li 查找city_con 第一级(直接子元素)的 ul,再找所有ul 下的第一级li
        Elements select6 = doc.select(".city_con > ul > li");
        // parent > * :查找某个父元素下所有直接子元素
        Elements select7 = doc.select(".city_con > *");
  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

子非我鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值