暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

TutorialsPoint JSoup 教程

原创 yBmZlQzJ 2023-05-09
367

TutorialsPoint JSoup 教程

来源:易百教程

JSoup教程™

JSoup是一个用于处理HTML的Java库,它提供了一个非常方便类似于使用DOM,CSS和jquery的方法的API来提取和操作数据。

jsoup实现WHATWG HTML5规范,并将HTML解析为与现代浏览器相同的DOM。

  • 从URL,文件或字符串中提取并解析HTML。
  • 查找和提取数据,使用DOM遍历或CSS选择器。
  • 操纵HTML元素,属性和文本。
  • 根据安全的白名单清理用户提交的内容,以防止XSS攻击。
  • 输出整洁的HTML。

jsoup旨在处理发现所有格式有差异的HTML; 从原始和验证,到无效的标签; jsoup将创建一个明智的解析树。

实例

获取维基百科主页,解析为DOM,并从新闻部分中选择标题列入元素列表:

Document doc = Jsoup.connect("http://en.wikipedia.org/").get();
Elements newsHeadlines = doc.select("#mp-itn b a");

以下是一个完整的示例,在这个示例中,它提取易百教程网首页的title标签中的字符串符。

import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
public class FirstJsoupExample{
public static void main( String[] args ) throws IOException{
Document doc = Jsoup.connect("http://www.yiibai.com").get();
String title = doc.title();
System.out.println("title is: " + title);
}
}

开源

jsoup是一个根据自由MIT许可证分发的开源项目。 源代码可在GitHub获得:http://github.com/jhy/jsoup/

发展和支持

如果您有任何关于如何使用jsoup的问题,或有未来发展的想法,请通过邮件列表联系( http://jsoup.org/discussion )。

如果您发现任何问题,请在检查重复之后提交错误。

本教程问题

在本Jsoup教程中,我们是通过一些简单的开发和测试实例来一步步演示Jsoup的使用的,但是由于开发环境和工具的不同,我们不能保证所有实例均可在您的机器也能正常运行。 如果您在本教程中发现任何问题或错误,可以向我们报告。我们及时修改/修正错误以方便后来的学习者。


本站所有代码下载:请扫描本页面底部二维码并关注微信公众号,回复:"代码下载" 获取。

本文属作者原创,转载请注明出处:易百教程 » JSoup教程

JSoup安装 - JSoup教程™

要运行任何jsoup示例,需要先安装好jsoup相关Jar包。到目前为止(2017年05月),jsoup的当前版本是1.10.2.0。安装jsoup主要有三种方法:

  • 通过Maven的pom.xml配置文件
  • 使用jsoup.jar文件
  • Gradle的配置文件(省略)

1)通过Maven的pom.xml文件配置

目前,maven被广泛应用于java开发。所以在这里建议使用maven来开发jsoup应用程序。
要使用maven安装jsoup,请在pom.xml文件中添加如下给定的依赖关系,不需要下载; 只需将以下内容放入POM的<dependencies>标签中:

<dependency>
<!-- jsoup HTML parser library @ http://jsoup.org/ -->
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.10.2</version>
</dependency>

2)使用jsoup.jar文件

如果您不使用maven框架,可以下载jsoup.jar文件。点击下载jsoup.jar文件,
在下载完成后,需要设置jsoup.jar文件的classpath。在控制台上写下面的命令

set classpath=jsoup-1.8.1.jar;.;%classpath%

提示: 使用IDE的话可以将上面的 jsoup.jar 添加到项目类库中。

有关依赖

jsoup是完全自包含的,没有依赖关系。
jsoup运行在Java 1.5及更高版本,Scala,Android,OSGi,Lambda 和 Google App Engine。

安装测试

这里以 Maven 为例,演示如何安装和使用JSoup,首先打开 Eclipse 创建一个名称为:HelloWordJSoup 的 Maven 工程,然后添加 pom.xml 的依懒,完整的 pom.xml内容如下 -

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com.yiibai</groupId>
<artifactId>HelloWordJSoup</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>

<name>HelloWordJSoup</name>
<url>http://maven.apache.org</url>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<!-- jsoup HTML parser library @ http://jsoup.org/ -->
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.10.2</version>
</dependency>
</dependencies>
</project>

创建一个Java类:FirstJsoupExample.java,其代码如下 -

package com.yiibai;

/**
* Hello world!
*
*/
import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

public class FirstJsoupExample {
public static void main(String[] args) throws IOException {
Document doc = Jsoup.connect("http://www.yiibai.com").get();
String title = doc.title();
System.out.println("title is: " + title);
}
}

运行上面代码,得到以下结果 -

eebc5922fe86b5203c99220600e01598.jpg


本站所有代码下载:请扫描本页面底部(右侧)二维码并关注微信公众号,回复:"代码下载" 获取。

下一篇:JSoup快速入门

JSoup快速入门 - JSoup教程™

Jsoup是用于解析HTML,就类似XML解析器用于解析XML。 Jsoup它解析HTML成为真实世界的HTML。 它与jquery选择器的语法非常相似,并且非常灵活容易使用以获得所需的结果。 在本教程中,我们将介绍很多Jsoup的例子。

能用Jsoup实现什么?

  • 从URL,文件或字符串中刮取并解析HTML
  • 查找和提取数据,使用DOM遍历或CSS选择器
  • 操纵HTML元素,属性和文本
  • 根据安全的白名单清理用户提交的内容,以防止XSS攻击
  • 输出整洁的HTML

安装-运行时依赖关系

您可以使用下面的maven依赖项将Jsoup jar包含到项目中。

<dependency>
<!-- jsoup HTML parser library @ http://jsoup.org/ -->
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.10.2</version>
</dependency>

JSoup应用的主要类

虽然完整的类库中有很多类,但大多数情况下,下面给出3个类是我们需要重点了解的。

1. org.jsoup.Jsoup类

Jsoup类是任何Jsoup程序的入口点,并将提供从各种来源加载和解析HTML文档的方法。

Jsoup类的一些重要方法如下:

方法

描述

static Connection connect(String url)

创建并返回URL的连接。

static Document parse(File in, String charsetName)

将指定的字符集文件解析成文档。

static Document parse(String html)

将给定的html代码解析成文档。

static String clean(String bodyHtml, Whitelist whitelist)

从输入HTML返回安全的HTML,通过解析输入HTML并通过允许的标签和属性的白名单进行过滤。

2. org.jsoup.nodes.Document类

该类表示通过Jsoup库加载HTML文档。可以使用此类执行适用于整个HTML文档的操作。

Element类的重要方法可以参见 - http://jsoup.org/apidocs/org/jsoup/nodes/Document.html

3. org.jsoup.nodes.Element类

HTML元素是由标签名称,属性和子节点组成。 使用Element类,您可以提取数据,遍历节点和操作HTML。

Element类的重要方法可参见 - http://jsoup.org/apidocs/org/jsoup/nodes/Element.html

应用实例

现在我们来看一些使用Jsoup API处理HTML文档的例子。

1. 载入文件

从URL加载文档,使用Jsoup.connect()方法从URL加载HTML。

try
{
Document document = Jsoup.connect("http://www.yiibai.com").get();
System.out.println(document.title());
}
catch (IOException e)
{
e.printStackTrace();
}

2. 从文件加载文档

使用Jsoup.parse()方法从文件加载HTML。

try
{
Document document = Jsoup.parse( new File( "D:/temp/index.html" ) , "utf-8" );
System.out.println(document.title());
}
catch (IOException e)
{
e.printStackTrace();
}

3. 从String加载文档

使用Jsoup.parse()方法从字符串加载HTML。

try
{
String html = "<html><head><title>First parse</title></head>"
+ "<body><p>Parsed HTML into a doc.</p></body></html>";
Document document = Jsoup.parse(html);
System.out.println(document.title());
}
catch (IOException e)
{
e.printStackTrace();
}

4. 从HTML获取标题

如上图所示,调用document.title()方法获取HTML页面的标题。

try
{
Document document = Jsoup.parse( new File("C:/Users/xyz/Desktop/yiibai-index.html"), "utf-8");
System.out.println(document.title());
}
catch (IOException e)
{
e.printStackTrace();
}

5. 获取HTML页面的Fav图标

假设favicon图像将是HTML文档的<head>部分中的第一个图像,您可以使用下面的代码。

String favImage = "Not Found";
try {
Document document = Jsoup.parse(new File("C:/Users/zkpkhua/Desktop/yiibai-index.html"), "utf-8");
Element element = document.head().select("link[href~=.*\\.(ico|png)]").first();
if (element == null)
{
element = document.head().select("meta[itemprop=image]").first();
if (element != null)
{
favImage = element.attr("content");
}
}
else
{
favImage = element.attr("href");
}
}
catch (IOException e)
{
e.printStackTrace();
}
System.out.println(favImage);

6. 获取HTML页面中的所有链接

要获取网页中的所有链接,请使用以下代码。

try
{
Document document = Jsoup.parse(new File("C:/Users/zkpkhua/Desktop/yiibai-index.html"), "utf-8");
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();
}

7. 获取HTML页面中的所有图像

要获取网页中显示的所有图像,请使用以下代码。

try
{
Document document = Jsoup.parse(new File("C:/Users/zkpkhua/Desktop/yiibai-index.html"), "utf-8");
Elements images = document.select("img[src~=(?i)\\.(png|jpe?g|gif)]");
for (Element image : images)
{
System.out.println("src : " + image.attr("src"));
System.out.println("height : " + image.attr("height"));
System.out.println("width : " + image.attr("width"));
System.out.println("alt : " + image.attr("alt"));
}
}
catch (IOException e)
{
e.printStackTrace();
}

8. 获取URL的元信息

元信息包括Google等搜索引擎用来确定网页内容的索引为目的。 它们以HTML页面的HEAD部分中的一些标签的形式存在。 要获取有关网页的元信息,请使用下面的代码。

try
{
Document document = Jsoup.parse(new File("C:/Users/zkpkhua/Desktop/yiibai-index.html"), "utf-8");

String description = document.select("meta[name=description]").get(0).attr("content");
System.out.println("Meta description : " + description);

String keywords = document.select("meta[name=keywords]").first().attr("content");
System.out.println("Meta keyword : " + keywords);
}
catch (IOException e)
{
e.printStackTrace();
}

9. 在HTML页面中获取表单属性

在网页中获取表单输入元素非常简单。 使用唯一ID查找FORM元素; 然后找到该表单中存在的所有INPUT元素。

Document doc = Jsoup.parse(new File("c:/temp/yiibai-index.html"),"utf-8");
Element formElement = doc.getElementById("loginForm");

Elements inputElements = formElement.getElementsByTag("input");
for (Element inputElement : inputElements) {
String key = inputElement.attr("name");
String value = inputElement.attr("value");
System.out.println("Param name: "+key+" \nParam value: "+value);
}

10. 更新元素的属性/内容

只要您使用上述方法找到您想要的元素; 可以使用Jsoup API来更新这些元素的属性或innerHTML。 例如,想更新文档中存在的“rel = nofollow”的所有链接。

try
{
Document document = Jsoup.parse(new File("C:/Users/zkpkhua/Desktop/yiibai.com.html"), "utf-8");
Elements links = document.select("a[href]");
links.attr("rel", "nofollow");
}
catch (IOException e)
{
e.printStackTrace();
}

10. 消除不信任的HTML(以防止XSS)

假设在应用程序中,想显示用户提交的HTML片段。 例如 用户可以在评论框中放入HTML内容。 这可能会导致非常严重的问题,如果您允许直接显示此HTML。 用户可以在其中放入一些恶意脚本,并将用户重定向到另一个脏网站。

为了清理这个HTML,Jsoup提供Jsoup.clean()方法。 此方法期望HTML格式的字符串,并将返回清洁的HTML。 要执行此任务,Jsoup使用白名单过滤器。 jsoup白名单过滤器通过解析输入HTML(在安全的沙盒环境中)工作,然后遍历解析树,只允许将已知安全的标签和属性(和值)通过清理后输出。

它不使用正则表达式,这对于此任务是不合适的。

清洁器不仅用于避免XSS,还限制了用户可以提供的元素的范围:您可以使用文本,强元素,但不能构造div或表元素。

String dirtyHTML = "<p><a href='http://www.yiibai.com/' onclick='sendCookiesToMe()'>Link</a></p>";

String cleanHTML = Jsoup.clean(dirtyHTML, Whitelist.basic());

System.out.println(cleanHTML);

执行后输出结果如下 -

<p><a href="http://www.yiibai.com/" rel="nofollow">Link</a></p>


本站所有代码下载:请扫描本页面底部(右侧)二维码并关注微信公众号,回复:"代码下载" 获取。

上一篇:JSoup安装下一篇:Jsoup API

Jsoup API - JSoup教程™

jsoup api中有6个包提供用于开发jsoup应用程序的类和接口。

  • org.jsoup
  • org.jsoup.examples
  • org.jsoup.helper
  • org.jsoup.nodes
  • org.jsoup.parser
  • org.jsoup.safety
  • org.jsoup.salect

以上包中有很多类。 jsoup api中的主要类如下所示:

  • Jsoup
  • Document
  • Element

Jsoup类

org.jsoup.Jsoup类提供了连接,清理和解析HTML文档的方法。

org.jsoup.Jsoup类的重要方法如下:

方法名称

描述

static Connection connect(String url)

创建并返回URL的连接。

static Document parse(File in, String charsetName)

将指定的字符集文件解析成文档。

static Document parse(File in, String charsetName, String baseUri)

将指定的字符集和baseUri文件解析成文档。

static Document parse(String html)

将给定的html代码解析成文档。

static Document parse(String html, String baseUri)

用baseUri将给定的html代码解析成文档。

static Document parse(URL url, int timeoutMillis)

将给定的URL解析为文档。

static String clean(String bodyHtml, Whitelist whitelist)

将输入HTML返回安全的HTML,通过解析输入HTML并通过允许的标签和属性的白名单进行过滤。


本站所有代码下载:请扫描本页面底部(右侧)二维码并关注微信公众号,回复:"代码下载" 获取。

上一篇:JSoup快速入门下一篇:Jsoup应用实例

Jsoup应用实例 - JSoup教程™

在本篇文章中,将列出了一些常用的jsoup例子,例如获取URL或HTML文档的标题,链接,图像和元数据。

1. 获取URL的标题

Document doc = Jsoup.connect("http://www.yiibai.com").get();
String title = doc.title();

2. 从HTML文件获取标题

Document doc = Jsoup.parse(new File("e:\\register.html"),"utf-8");//assuming register.html file in e drive
String title = doc.title();

3. 获取URL的链接

Document doc = Jsoup.connect("http://www.yiibai.com").get();
Elements links = doc.select("a[href]");
for (Element link : links) {
System.out.println("\nlink : " + link.attr("href"));
System.out.println("text : " + link.text());
}

4. 获取URL的元信息

Document doc = Jsoup.connect("http://www.yiibai.com").get();
String keywords = doc.select("meta[name=keywords]").first().attr("content");
System.out.println("Meta keyword : " + keywords);
String description = doc.select("meta[name=description]").get(0).attr("content");
System.out.println("Meta description : " + description);

5. 获取URL的图像

Document doc = Jsoup.connect("http://www.yiibai.com").get();
Elements images = doc.select("img[src~=(?i)\\.(png|jpe?g|gif)]");
for (Element image : images) {
System.out.println("src : " + image.attr("src"));
System.out.println("height : " + image.attr("height"));
System.out.println("width : " + image.attr("width"));
System.out.println("alt : " + image.attr("alt"));
}

6. 获取表单参数

Document doc = Jsoup.parse(new File("e:\\register.html"),"utf-8");
Element loginform = doc.getElementById("registerform");

Elements inputElements = loginform.getElementsByTag("input");
for (Element inputElement : inputElements) {
String key = inputElement.attr("name");
String value = inputElement.attr("value");
System.out.println("Param name: "+key+" \nParam value: "+value);
}


本站所有代码下载:请扫描本页面底部(右侧)二维码并关注微信公众号,回复:"代码下载" 获取。

上一篇:Jsoup API下一篇:Jsoup示例:提取给定url的标题

Jsoup示例:提取给定url的标题 - JSoup教程™

在这篇文章中,我们来演示一个打印一个url的标题的jsoup例子,例如: www.yiibai.com 。 在Jsoup.connect()方法的帮助下,将连接到给定的URL。get()方法返回Document类的对象的引用。Document类提供返回文档标题的title()方法。

如下代码实现 -

import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
public class FirstJsoupExample{
public static void main( String[] args ) throws IOException{
Document doc = Jsoup.connect("http://www.yiibai.com").get();
String title = doc.title();
System.out.println("title is: " + title);
}
}
`

执行结果 -

... ...

自已编程运行看看吧


本站所有代码下载:请扫描本页面底部(右侧)二维码并关注微信公众号,回复:"代码下载" 获取。

上一篇:Jsoup应用实例下一篇:Jsoup示例:提取给定URL中的链接

Jsoup示例:提取给定URL中的链接 - JSoup教程™

在这篇文章中,我们演示如何打印给定URL中的所有链接信息。 要做到这一点,我们需要调用返回元素引用的Document类对象的select()方法。Elements类中可以使用for-each循环遍历元素。Element类提供了attr()和text()方法来返回链接的链接和对应的文本。

如下代码实现 -

import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class JsoupPrintLinks {
public static void main( String[] args ) throws IOException{
Document doc = Jsoup.connect("http://www.yiibai.com").get();
Elements links = doc.select("a[href]");
for (Element link : links) {
System.out.println("\nlink : " + link.attr("href"));
System.out.println("text : " + link.text());
}
}
}
`

执行结果 -

... ...

自已编程运行看看吧


本站所有代码下载:请扫描本页面底部(右侧)二维码并关注微信公众号,回复:"代码下载" 获取。

上一篇:Jsoup示例:提取给定url的标题下一篇:Jsoup示例:提取URL中的元数据

Jsoup示例:提取URL中的元数据 - JSoup教程™

在这个例子中,我们将打印一个URL的meta关键字和描述。要实现这个功能,需要调用Document类的select(),first(),get()和attr()方法。

如下代码实现 -

import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
public class JsoupPrintMetadata {
public static void main( String[] args ) throws IOException{
Document doc = Jsoup.connect("http://www.yiibai.com").get();

String keywords = doc.select("meta[name=keywords]").first().attr("content");
System.out.println("Meta keyword : " + keywords);
String description = doc.select("meta[name=description]").get(0).attr("content");
System.out.println("Meta description : " + description);
}
}
`

执行结果 -

... ...

自已编程运行看看吧


本站所有代码下载:请扫描本页面底部(右侧)二维码并关注微信公众号,回复:"代码下载" 获取。

上一篇:Jsoup示例:提取给定URL中的链接下一篇:Jsoup示例:提取URL中的图像

Jsoup示例:提取URL中的图像 - JSoup教程™

在这个例子中,我们将提取并打印给定URL的所有图像信息。 要做到这一点,我们调用select()方法传递“"img[src~=(?i)\\.(png|jpe?g|gif)]"”正则表达式作为参数,以便它可以打印png,jpeg或gif类型的图像。

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class JsoupPrintImages {
public static void main( String[] args ) throws IOException{
Document doc = Jsoup.connect("http://www.yiibai.com").get();
Elements images = doc.select("img[src~=(?i)\\.(png|jpe?g|gif)]");
for (Element image : images) {
System.out.println("src : " + image.attr("src"));
System.out.println("height : " + image.attr("height"));
System.out.println("width : " + image.attr("width"));
System.out.println("alt : " + image.attr("alt"));
}

}
}
`

执行结果 -

... ...

自已编程运行看看吧


本站所有代码下载:请扫描本页面底部(右侧)二维码并关注微信公众号,回复:"代码下载" 获取。

上一篇:Jsoup示例:提取URL中的元数据下一篇:Jsoup示例:提取表单参数

Jsoup示例:提取表单参数 - JSoup教程™

在这个例子中,我们将提取并打印表单参数,如参数名称和参数值。 为此,我们调用Document类的getElementById()方法和Element类的getElementsByTag()方法。

创建一个HTML文件:register.html,代码如下 -

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Register Please</title>
</head>
<body>
<form id="registerform" action="register.jsp" method="post">
Name:<input type="text" name="name" value="maxsu"/><br/>
Password:<input type="password" name="password" value="sj"/><br/>
Email:<input type="email" name="email" value="maxsu@gmail.com"/><br/>
<input name="submitbutton" type="submit" value="register"/>
</form>
</body>
</html>
`

创建一个Java类文件:JsoupPrintFormParameters.java,代码如下 -

import java.io.File;
import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class JsoupPrintFormParameters {
public static void main(String[] args) throws IOException {
Document doc = Jsoup.parse(new File("e:\\register.html"),"utf-8");
Element loginform = doc.getElementById("registerform");

Elements inputElements = loginform.getElementsByTag("input");
for (Element inputElement : inputElements) {
String key = inputElement.attr("name");
String value = inputElement.attr("value");
System.out.println("Param name: "+key+" \nParam value: "+value);
}
}
}

执行结果 -

Param name: name
Param value: maxsu
Param name: password
Param value: sj
Param name: email
Param value: maxsu@gmail.com
Param name: submitbutton
Param value: register

自已编程运行看看吧


本站所有代码下载:请扫描本页面底部(右侧)二维码并关注微信公众号,回复:"代码下载" 获取。

上一篇:Jsoup示例:提取URL中的图像下一篇:哥,这回真没有了

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论