Jsoup使用教程以及使用案例

这篇具有很好参考价值的文章主要介绍了Jsoup使用教程以及使用案例。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1:什么是Jsoup

1:Jsoup概述

jsoup 是一款基于 Java 的HTML解析器,它提供了一套非常省力的API,不但能直接解析某个URL地址、HTML文本内容,而且还能通过类似于DOM、CSS或者jQuery的方法来操作数据,所以 jsoup 也可以被当做爬虫工具使用,从网站获取dom结构,从而解析下载数据。

2:Jsoup能做什么

  • 从 URL、文件或字符串中抓取和解析HTML(爬虫)
  • 使用DOM 遍历或 CSS 选择器查找和提取数据
  • 操作HTML 元素、属性和文本
  • 根据安全列表清理用户提交的内容,以防止XSS攻击
  • 输出整洁的网页

2:Jsoup相关概念

Jsoup很多概念和js类似,可参照对比理解

  • Document :文档对象。每份HTML页面都是一个文档对象,Document 是 jsoup 体系中最顶层的结构。
  • Element:元素对象。一个 Document 中可以着包含着多个 Element 对象,可以使用 Element 对象来遍历节点提取数据或者直接操作HTML。
  • Elements:元素对象集合,类似于List。
  • Node:节点对象。标签名称、属性等都是节点对象,节点对象用来存储数据。
  • 类继承关系:Document 继承自 Element(class Document extends Element) ,Element 继承自 Node(class Element extends Node)。
  • 一般执行流程:先获取 Document 对象,然后获取 Element 对象,最后再通过 Node 对象获取数据。
    jsoup,大数据,java,jsoup,爬虫,html

3:获取文档

1:导入jsoup的jar包

 <!-- jsoup -->
  <dependency>
     <groupId>org.jsoup</groupId>
      <artifactId>jsoup</artifactId>
      <version>1.11.3</version>
  </dependency>

2:从URL中加载文档对象(常用)

使用 Jsoup.connect(String url).get()方法获取(只支持 http 和 https 协议)

 try {
            Document document = Jsoup.connect("http://www.baidu.com").get();
            System.out.println(document.title());
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
  • connect(String url)方法创建一个新的 Connection并通过.get()或者.post()方法获得数据。如果从该URL获取HTML时发生错误,便会抛出 IOException,应适当处理。
  • Connection 接口还提供一个方法链来解决特殊请求,我们可以在发送请求时带上请求的头部参数,具体如下:
 try {
            Document document = Jsoup.connect("http://www.baidu.com")
                    .data("query", "Java")
                    .userAgent("Mozilla")
                    .cookie("auth", "token")
                    .timeout(8000)
                    .post();
            System.out.println(document);

        } catch (IOException e) {
            throw new RuntimeException(e);
        }

3:从本地文件中加载文档对象

可以使用静态的Jsoup.parse(File in, String charsetName) 方法从文件中加载文档。其中in表示路径,charsetName表示编码方式,示例代码:

File input = new File("/tmp/input.html");
Document doc = Jsoup.parse(input, "UTF-8");
System.out.println(doc);

4:从字符串文本中加载文档对象

使用静态的Jsoup.parse(String html) 方法可以从字符串文本中获得文档对象 Document ,示例代码:

String html = "<html><head><title>First parse</title></head>"
  + "<body><p>Parsed HTML into a doc.</p></body></html>";

Document doc = Jsoup.parse(html);
System.out.println(doc);

5:从片断中获取文档对象

使用Jsoup.parseBodyFragment(String html)方法

String html = "<p>Lorem ipsum.</p>";
Document doc = Jsoup.parseBodyFragment(html);
// doc 此时为:<body> <p>Lorem ipsum.</p></body>

Element body = doc.body();
System.out.println(body);

parseBodyFragment 方法创建一个新的文档,并插入解析过的HTML到body元素中。假如你使用正常的 Jsoup.parse(String html) 方法,通常也能得到相同的结果,但是明确将用户输入作为 body 片段处理是个更好的方式。

Document.body() 方法能够取得文档body元素的所有子元素,与 doc.getElementsByTag(“body”)相同。

4:定位选择元素

1:DOM方式

我们可以利用dom结构的方式,通过标签,id,class等查找到下属元素

1:案例代码

 // 获取csdn首页所有的链接
        Document doc = Jsoup.connect("http://www.baidu.com").get();

        Elements elements = doc.getElementsByTag("body");
        Elements contents = elements.first().getElementsByTag("a");

        for (Element content : contents) {
            String linkHref = content.attr("href");
            String linkText = content.text();
            System.out.print(linkText + "\t");
            System.out.println(linkHref);
        }

2:查找元素-下列方法返回的是Element或Elements

  • getElementById(String id):通过id来查找元素
  • getElementsByTag(String tag):通过标签来查找元素
  • getElementsByClass(String className):通过类选择器来查找元素
  • getElementsByAttribute(String key) :通过属性名称来查找元素,例如查找带有href元素的标签。
  • siblingElements():获取兄弟元素。如果元素没有兄弟元素,则返回一个空列表。
  • firstElementSibling():获取第一个兄弟元素。
  • lastElementSibling():获取最后一个兄弟元素。
  • nextElementSibling():获取下一个兄弟元素。
  • previousElementSibling():获取上一个兄弟元素。
  • parent():获取此节点的父节点。
  • children():获取此节点的所有子节点。
  • child(int index):获取此节点的指定子节点。

2:CSS选择器方式

也可以使用类似于CSS选择器的语法来查找和操作元素,常用的方法为select(String selector)。

1:代码实例

Document doc = Jsoup.connect("http://csdn.com").get();

// 获取带有 href 属性的 a 元素
Elements elements = doc.select("a[href]");

for (Element content : elements) {
    String linkHref = content.attr("href");
    String linkText = content.text();
    System.out.print(linkText + "\t");
    System.out.println(linkHref);
}

select()方法在Document、Element或Elements对象中都可以使用,而且是上下文相关的,因此可实现指定元素的过滤,或者采用链式访问。

select() 方法将返回一个Elements集合,并提供一组方法来抽取和处理结果。

2:select(String selector)方法参数简介

  • tagname: 通过标签查找元素,例如通过"a"来查找< a >标签。
  • #id: 通过ID查找元素,比如通过#logo查找< p id=“logo”>
  • .class: 通过class名称查找元素,比如通过.titile查找< p class=“titile”>
  • ns|tag: 通过标签在命名空间查找元素,比如使用 fb|name 来查找 < fb:name>
  • [attribute]: 利用属性查找元素,比如通过[href]查找< a href=“…”>
  • [ ^attribute]: 利用属性名前缀来查找元素,比如:可以用[^data-] 来查找带有HTML5 dataset属性的元素
  • [ attribute=value]: 利用属性值来查找元素,比如:[ width=500]
  • [attribute^=value], [attribute$=value], [attribute*=value]: 利用匹配属性值开头、结尾或包含属性值来查找元素,比如通过[href*=/path/]来查找
  • [attribute~=regex]: 利用属性值匹配正则表达式来查找元素,比如通过 img[src~=(?i).(png|jpe?g)]来匹配所有的png或者jpg、jpeg格式的图片
  • *: 通配符,匹配所有元素

3:参数属性组合使用

例如:Elements elements = doc.select(“div.css_tr_event”);

  • el#id: 元素+ID,比如: div#logo
  • el.class: 元素+class,比如: div.masthead
  • el[attr]: 元素+class,比如 a[href]匹配所有带有 href 属性的 a 元素。
  • 任意组合,比如:a[href].highlight匹配所有带有 href 属性且class="highlight"的 a 元素。
  • ancestor child: 查找某个元素下子元素,比如:可以用.body p 查找在"body"元素下的所有 p元素,中间有一个空
  • parent > child: 查找某个父元素下的直接子元素,比如:可以用div.content > p 查找 p 元素,也可以用body > * 查找body标签下所有直接子元素
  • siblingA + siblingB: 查找在A元素之前第一个同级元素B,比如:div.head + div
  • siblingA ~ siblingX: 查找A元素之前的同级X元素,比如:h1 ~ p
  • el, el, el:多个选择器组合,查找匹配任一选择器的唯一元素,例如:div.masthead, div.logo

4:特殊参数:伪选择器

  • :lt(n): 查找哪些元素的同级索引值(它的位置在DOM树中是相对于它的父节点)小于n,比如:td:lt(3) 表示小于三列的元素
  • :gt(n):查找哪些元素的同级索引值大于n``,比如: div p:gt(2)表示哪些div中有包含2个以上的p元素
  • :eq(n): 查找哪些元素的同级索引值与n相等,比如:form input:eq(1)表示包含一个input标签的Form元素
  • :has(seletor): 查找匹配选择器包含元素的元素,比如:div:has§表示哪些div包含了p元素
  • :not(selector): 查找与选择器不匹配的元素,比如: div:not(.logo) 表示不包含 class=logo 元素的所有 div 列表
  • :contains(text): 查找包含给定文本的元素,搜索不区分大不写,比如: p:contains(jsoup)
  • :containsOwn(text): 查找直接包含给定文本的元素
  • :matches(regex): 查找哪些元素的文本匹配指定的正则表达式,比如:div:matches((?i)login)
  • :matchesOwn(regex): 查找自身包含文本匹配指定正则表达式的元素
  • 注意:上述伪选择器索引是从0开始的,也就是说第一个元素索引值为0,第二个元素index为1等

5:获取数据

1:获取元素数据

  • attr(String key):获取单个属性值
  • attributes():获取所有属性值
  • attr(String key, String value):设置属性值
  • text():获取文本内容
  • text(String value):设置文本内容
  • html():获取元素内的HTML内容
  • html(String value):设置元素内的HTML内容
  • outerHtml():获取元素外HTML内容
  • data():获取数据内容(例如:script和style标签)
  • id():获得id值(例:

    衣服

  • className():获得第一个类选择器值
  • classNames():获得所有的类选择器值
  • tag():获取元素标签
  • tagName():获取元素标签名(如:

    等)

2:操作HTML文本

  • append(String html):在末尾追加HTML文本
  • prepend(String html):在开头追加HTML文本
  • html(String value):在匹配元素内部添加HTML文本。

6:修改数据

在解析了一个Document对象之后,你可能想修改其中的某些属性值,并把它输出到前台页面或保存到其他地方,jsoup对此提供了一套非常简便的接口(支持链式写法)。

1:设置属性的值

当以下方法针对Element对象操作时,只有一个元素会受到影响。当针对Elements对象进行操作时,可能会影响到多个元素。

  • .attr(String key, String value):设置标签的属性值。
  • .addClass(String className):增加类选择器选项
  • .removeClass(String className):删除对应的类选择器
Document doc = Jsoup.connect("http://csdn.com").get();

// 复数,Elements
Elements elements = doc.getElementsByClass("text");
// 单数,Element
Element element = elements.first();

// 复数对象,所有 class="text" 的元素都将受到影响
elements.attr("name","goods");
// 单数对象,只有一个元素会受到影响(链式写法)
element.attr("name","shop")
        .addClass("red");

2:修改元素的HTML内容

可以使用Element中的HTML设置方法具体如下:

  • .html(String value):这个方法将先清除元素中的HTML内容,然后用传入的HTML代替。
  • .prepend(String value):在元素前添加html内容。
  • .append(String value):在元素后添加html内容。
  • .wrap(String value):对元素包裹一个外部HTML内容,将元素置于新增的内容中间。
Document doc = Jsoup.connect("http://csdn.com").get();

Element div = doc.select("div").first();
div.html("<p>csdn</p>");
div.prepend("<p>a</p>");
div.append("<p>good</p>");
// 输出:<div"> <p>a</p> <p>csdn</p> <p>good</p> </div>

Element span = doc.select("span").first();
span.wrap("<li><a href='...'></a></li>");
// 输出: <li><a href="..."> <span>csdn</span> </a></li>

3:修改元素的文本内容

对于传入的文本,如果含有像 <, > 等这样的字符,将以文本处理,而非HTML。

  • .text(String text) :清除元素内部的HTML内容,然后用提供的文本代替。
  • .prepend(String first):在元素后添加文本节点。
  • Element.append(String last):在元素前添加文本节点。
 // <div></div>
Element div = doc.select("div").first();

div.text(" one "); 
div.prepend(" two ");
div.append(" three ");
// 输出: <div> two one three </div>

7:其他功能

1:返回html链接的绝对路径

问题描述:
  你有一个包含相对URLs路径的HTML文档,现在需要将这些相对路径转换成绝对路径的URLs。

解决方式:

确保在你解析文档时有指定base URI路径。
然后使用 abs: 属性前缀来取得包含base URI的绝对路径。代码如下:

 Document doc = Jsoup.connect("http://www.open-open.com").get();
        Element link = doc.select("a").first();
        // 输出:/
        String relHref = link.attr("href");
        // 输出:http://www.open-open.com/
        String absHref = link.attr("abs:href");

说明:

在HTML元素中,URLs经常写成相对于文档位置的相对路径,如:…。当你使用 .attr(String key) 方法来取得a元素的href属性时,它将直接返回在HTML源码中指定的值。

假如你需要取得一个绝对路径,需要在属性名前加 abs: 前缀,这样就可以返回包含根路径的URL地址attr(“abs:href”)。因此在解析HTML文档时,定义base URI非常重要。

2:使用代理

当访问某个网页需要使用代理服务器时,可以通过这种方法进行代理设置。后续元素操作就一样了;文章来源地址https://www.toymoban.com/news/detail-800069.html

Document document = Jsoup.connect("http://csdn.net/")
                .proxy("12.12.12.12", 1080)    // 使用代理
                .get();

到了这里,关于Jsoup使用教程以及使用案例的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 【Java-Crawler】HttpClient+Jsoup实现简单爬虫

    【Java-Crawler】HttpClient+Jsoup实现简单爬虫

    网络爬虫(WEB crawler),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。 导入依赖(下面列的程序用的是这个依赖,是版本5,我是从Maven中直接copy最新版的,没想那么多,但4点多的用的人多点,而且网上资料也多点,所以还是推荐大家用4点多的吧,但是下

    2024年02月05日
    浏览(11)
  • 探索 Java 网络爬虫:Jsoup、HtmlUnit 与 WebMagic 的比较分析

    探索 Java 网络爬虫:Jsoup、HtmlUnit 与 WebMagic 的比较分析

    在当今信息爆炸的时代,网络数据的获取和处理变得至关重要。对于 Java 开发者而言,掌握高效的网页抓取技术是提升数据处理能力的关键。本文将深入探讨三款广受欢迎的 Java 网页抓取工具:Jsoup、HtmlUnit 和 WebMagic,分析它们的功能特点、优势以及适用场景,以助开发者选

    2024年04月29日
    浏览(7)
  • SpringBoot、Java 使用 Jsoup 解析 HTML 页面

    SpringBoot、Java 使用 Jsoup 解析 HTML 页面

    什么是 Jsoup? Jsoup 是一个用于处理 HTML 页面的 Java 库,它提供了简单的 API,使得从 HTML 中提取数据变得非常容易。无论是获取特定标签的内容还是遍历整个页面的元素,Jsoup 都能轻松胜任。 如何使用 Jsoup 解析 HTML 页面? 首先,确保你的 Java 项目中已经添加了 Jsoup 的依赖。

    2024年02月13日
    浏览(11)
  • java中使用Jsoup和Itext实现将html转换为PDF

    java中使用Jsoup和Itext实现将html转换为PDF

    1.在build.gradle中安装所需依赖: 2.创建工具类,实现转换方法 3.base64过滤类: 4.字体类代码,window用户可在C:windowsfont中寻找自己所需字体即可。我这里用的为黑体: simhei.ttf 效果如下: html页面预览: pdf页面预览:    

    2024年02月14日
    浏览(8)
  • 使用Java Jsoup读取小说内容并保存到本地,使用idea插件thief-book-idea看小说

    使用Java Jsoup读取小说内容并保存到本地,使用idea插件thief-book-idea看小说

    摸鱼时看小说非常不方便,就突发奇想怎么能在工作软件上看呢,于是去查询了资料。 在idea上面看小说需要安装插件thief-book-idea,但是这个插件不能在线阅读,需要导入小说进去,所以就想到了把小说下载下来,然后导入插件中 废话不多说,先看代码: 1.我使用的是spring

    2024年04月28日
    浏览(19)
  • jsoup的使用

    jsoup的使用

    本文在写作过程中参考了官方文档,传送门。   jsoup 是一款基于 Java 的HTML解析器,它提供了一套非常省力的API,不但能直接解析某个URL地址、HTML文本内容,而且还能通过类似于DOM、CSS或者jQuery的方法来操作数据,所以 jsoup 也可以被当做爬虫工具使用。 Document :文档对象

    2024年02月03日
    浏览(4)
  • 使用Jsoup库编写下载程序

    使用Jsoup库编写下载程序

    该任务要求使用Jsoup库编写一个下载程序,以下是完成该任务的代码,每行代码都有相应的中文解释。 首先,我们需要导入Jsoup库和Kotlin标准库。 然后,我们需要创建一个对象,该对象用于指定服务器的主机名和端口号。接下来,我们需要使用代理对象来连接到要下载的URL。

    2024年02月06日
    浏览(8)
  • jsoup 框架的使用指南

    jsoup 框架的使用指南

    参考: 官方文档 jsoup的使用 JSoup教程 jsoup 在 GitHub 的开源代码 jsoup 是一款基于 Java 的 HTML 解析器,它提供了一套非常省力的 API,不但能直接解析某个 URL 地址、HTML 文本内容,而且还能通过类似于 DOM、CSS 或者 jQuery 的方法来操作数据,所以 jsoup 也可以被当做爬虫工具使用。

    2023年04月09日
    浏览(11)
  • java 中开源的html解析库Jsoup 简单例子

            下面是一个使用Jsoup库解析HTML的简单Java例子。这个例子展示了如何使用Jsoup从一个HTML字符串中提取数据。         首先,确保你已经将Jsoup作为依赖项添加到你的项目中。如果你使用的是Maven,可以在`pom.xml`文件中添加以下依赖:                   然后

    2024年02月22日
    浏览(11)
  • Jsoup爬取简单信息

    Jsoup爬取简单信息

    注意版本一定是1.15.3,1.15.4可能无法获取信息 先找到豆瓣图书网址 豆瓣 先找到整个布局的部分,list-col2,里面存储着相应的元素标签 所以document的select标签就是ul.list-col2 li,意思是选择ul里面标签list-col2,然后选择里面的li li里面分成两个部分,包含cover和info,我这里取出

    2024年02月13日
    浏览(8)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包