java爬虫(二)- Jsoup

40 篇文章 1 订阅
6 篇文章 1 订阅

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
    评论
您好!对于使用Java编写网络爬虫,我们可以使用Jsoup库来进行HTML解析和数据抓取。 首先,您需要在项目中引入Jsoup库。您可以在Maven或Gradle构建工具中添加以下依赖项: Maven: ```xml <dependency> <groupId>org.jsoup</groupId> <artifactId>jsoup</artifactId> <version>1.13.1</version> </dependency> ``` Gradle: ```groovy implementation 'org.jsoup:jsoup:1.13.1' ``` 接下来,您可以使用Jsoup来获取和解析网页内容。以下是一个简单的示例代码,演示如何使用Jsoup来爬取网页并提取所需的数据: ```java import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import java.io.IOException; public class WebCrawler { public static void main(String[] args) { try { // 使用Jsoup连接到目标网页 Document document = Jsoup.connect("http://example.com").get(); // 使用CSS选择器提取所需的元素 Elements links = document.select("a[href]"); // 遍历并打印提取到的元素 for (Element link : links) { System.out.println("Link: " + link.attr("href")); System.out.println("Text: " + link.text()); } } catch (IOException e) { e.printStackTrace(); } } } ``` 在上面的示例中,我们使用`Jsoup.connect()`方法连接到目标网页,并使用`document.select()`方法使用CSS选择器提取所有带有`href`属性的链接元素。然后,我们遍历这些链接元素,并打印出链接的URL和文本。 您可以根据自己的需求进一步扩展和修改代码来满足特定的爬虫需求。请注意,在编写爬虫时,请遵守相关网站的使用条款和政策,以避免违反规定。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

子非我鱼

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

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

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

打赏作者

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

抵扣说明:

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

余额充值