• Java爬虫利器:Jsoup详细介绍与用法


    导语:

    随着信息化时代的到来,网络上的数据变得越来越重要。而作为开发者,我们常常需要从网页中提取数据。为了帮助开发人员轻松地解析和处理HTML文档,Java库Jsoup应运而生。本文将详细介绍Jsoup的功能和用法,帮助您成为一名Java爬虫专家。

    一、引入Jsoup

    要使用Jsoup,首先需要将其添加到您的Java项目中。您可以从官方网站(https://jsoup.org/)上下载Jsoup的JAR文件,然后将其导入到您的项目中。您还可以使用Maven或Gradle等构建工具来添加Jsoup的依赖。

    二、解析HTML文档

    使用Jsoup,您可以轻松地将HTML文档加载到Java程序中进行解析。您可以从URL、文件、字符串或输入流中加载HTML文档。以下是一个简单的示例:

    String html = "Jsoup Example"
                + "

    Welcome to Jsoup

    Jsoup is a Java library for HTML parsing.

    "
    ; Document doc = Jsoup.parse(html);
    • 1
    • 2
    • 3
    • 4

    三、选择器和查找元素

    Jsoup使用类似于CSS选择器的语法来查找和选择HTML元素。您可以使用标签名称、类名、ID、属性等进行元素选择。以下是一些示例:

    Element h1Element = doc.select("h1").first(); // 选择第一个

    元素 Elements pElements = doc.select("p"); // 选择所有

    元素 Element elementWithClass = doc.select(".classname").first(); // 选择具有给定类名的元素

    • 1
    • 2
    • 3

    四、提取元素的属性和文本

    使用Jsoup,您可以轻松地提取HTML元素的属性和文本内容。以下是一些示例:

    String title = doc.title(); // 获取文档标题
    String h1Text = h1Element.text(); // 获取

    元素的文本内容 String attrValue = element.attr("attributeName"); // 获取元素的属性值
    • 1
    • 2
    • 3

    五、遍历和修改元素

    Jsoup支持遍历和修改HTML元素的功能。您可以使用各种方法来添加、删除或修改元素。以下是一些示例:

    Elements paragraphs = doc.select("p");
    for (Element paragraph : paragraphs) {
        paragraph.addClass("highlight"); // 添加CSS类
        paragraph.attr("data-id", "123"); // 设置自定义属性
        paragraph.text("New text"); // 设置新的文本内容
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    六、处理HTML表单

    Jsoup提供了处理HTML表单的支持。您可以使用它来填充表单字段、提交表单和处理表单响应。以下是一个简单的示例:

    Connection.Response loginForm = Jsoup.connect("http://example.com/login")
            .method(Connection.Method.GET)
            .execute();
    
    Document loginDoc = loginForm.parse();
    Element form = loginDoc.select("form").first();
    
    // 填充表单字段
    form.select("input[name=username]").val("username");
    form.select("input[name=password]").val("password");
    
    // 提交表单
    Connection.Response loginResponse = form.submit().cookies(loginForm.cookies()).execute();
    
    Document loggedinDoc = loginResponse.parse();
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    七、综合案例

    1:爬取新闻网站的标题和链接

    假设我们想要从一个新闻网站上爬取所有新闻的标题和对应的链接。我们可以使用Jsoup来实现这个功能。以下是一个示例:

    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 NewsCrawler {
        public static void main(String[] args) {
            try {
                // 加载新闻网站的HTML文档
                Document doc = Jsoup.connect("http://www.example.com/news").get();
                
                // 选择新闻标题和链接的元素
                Elements newsElements = doc.select(".news-item");
                
                // 遍历元素并提取标题和链接
                for (Element newsElement : newsElements) {
                    String title = newsElement.select(".title").text();
                    String link = newsElement.select("a").attr("href");
                    System.out.println("标题:" + title);
                    System.out.println("链接:" + link);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    在这个示例中,我们首先使用Jsoup连接到指定的新闻网站,并加载HTML文档。然后,我们使用选择器选择每个新闻元素,并通过选择器提取标题和链接。最后,我们将结果打印出来。

    2:爬取图片网站的图片链接和下载图片

    假设我们想要从一个图片网站上爬取所有图片的链接,并将图片下载到本地。我们可以使用Jsoup来实现这个功能。以下是一个示例:

    import org.jsoup.Jsoup;
    import org.jsoup.nodes.Document;
    import org.jsoup.nodes.Element;
    import org.jsoup.select.Elements;
    import java.io.BufferedInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.net.URL;
    
    public class ImageCrawler {
        public static void main(String[] args) {
            try {
                // 加载图片网站的HTML文档
                Document doc = Jsoup.connect("http://www.example.com/images").get();
                
                // 选择图片链接的元素
                Elements imageElements = doc.select(".image-item img");
                
                // 遍历元素并提取图片链接
                for (Element imageElement : imageElements) {
                    String imageUrl = imageElement.attr("src");
                    String fileName = imageUrl.substring(imageUrl.lastIndexOf("/") + 1);
                    
                    // 下载图片并保存到本地
                    URL url = new URL(imageUrl);
                    BufferedInputStream in = new BufferedInputStream(url.openStream());
                    FileOutputStream out = new FileOutputStream("images/" + fileName);
                    byte[] buffer = new byte[1024];
                    int bytesRead;
                    while ((bytesRead = in.read(buffer, 0, 1024)) != -1) {
                        out.write(buffer, 0, bytesRead);
                    }
                    out.close();
                    in.close();
                    
                    System.out.println("图片已下载:" + fileName);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42

    在这个示例中,我们首先使用Jsoup连接到指定的图片网站,并加载HTML文档。然后,我们使用选择器选择每个图片链接的元素,并通过选择器提取图片链接。接下来,我们使用Java的IO流将图片下载到本地。最后,我们将下载完成的图片文件名打印出来。请确保您已经在项目中创建了一个名为"images"的文件夹,用于保存下载的图片文件。

    以上是两个综合案例,展示了如何使用Jsoup进行爬虫操作。您可以根据具体的需求和网站结构进行相应的调整和扩展。通过灵活运用Jsoup的功能,您可以轻松地爬取网页上的数据,并将其用于实际应用。

    八、总结

    使用Java库Jsoup,我们可以轻松地解析和处理HTML文档,从而从网页中提取所需的信息。我们可以使用选择器和查找元素的功能快速定位和提取元素,使用提取元素属性和文本的功能获取所需的内容,使用遍历和修改元素的功能对元素进行操作,甚至可以使用Jsoup处理HTML表单。Jsoup是一款功能强大且易于使用的Java爬虫专用库,相信通过本文的介绍,您已经对Jsoup有了更深入的了解,并能够灵活运用它来解决实际问题。让我们一起享受用Jsoup编写爬虫程序的乐趣吧!

  • 相关阅读:
    软件测试/测试开发丨Postman实战练习 学习笔记
    QWebEngine集成Netron可视化模型
    入门力扣自学笔记117 C++ (题目编号761)
    [java]深度剖析自动装箱与拆箱
    Flink 环境对象
    SAP MM物料移动取总账科目逻辑,debug 标准bapi BAPI_GOODSMVT_CREATE
    cadence SPB17.4 - orcad - Hanging Wires规则的验证实验
    批量单独下载package.json中的包
    什么是运维自动化巡检?
    LOAM误差函数、代价函数的雅克比矩阵详细推导,点到线和点到面误差函数求导
  • 原文地址:https://blog.csdn.net/hitpter/article/details/133378501