java springboot+jsoup写一段爬虫脚本 将指定地址的 图片链接 文本 超链接地址存入自己的属性类对象中

news/2024/7/19 11:55:31 标签: java, spring boot, 爬虫

首先 还是最基本的 要在 pom.xml 引入依赖

<dependency>
    <groupId>org.jsoup</groupId>
    <artifactId>jsoup</artifactId>
    <version>1.14.1</version>
</dependency>

然后 我们可以在项目中创建一个属性类 我这里就叫 WebContent了
参考代码如下

java">package com.example.webdom.domain;

public class WebContent {
    private String url;
    private String text;
    private String image;

    public WebContent(String url, String text, String image) {
        this.url = url;
        this.text = text;
        this.image = image;
    }

    public String getUrl() {
        return url;
    }

    public String getText() {
        return text;
    }

    public String getImage() {
        return image;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public void setText(String text) {
        this.text = text;
    }

    public void setImage(String image) {
        this.image = image;
    }

    @Override
    public String toString() {
        return "WebContent{" +
                "a标签链接='" + url + '\'' +
                ", 文本内容='" + text + '\'' +
                ", 图片路径='" + image + '\'' +
                '}';
    }
}

这里 我们定义了三个变量 url 用来存 a标签的链接地址 text用来存a标签的文本信息 又或者图片的 alt内容 image用来存图片的url
定义了他们的get set方法 这里为了方便大家看 写了 toString函数
在这里插入图片描述
然后 我们在逻辑类 编写代码如下

java">package com.example.webdom.controller;

import com.example.webdom.domain.WebContent;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class WebCrawler {
    public static void main(String[] args) {
        String url = "https://www.baidu.com/?tn=48021271_25_hao_pg"; // 要爬取的网页URL

        try {
            Document doc = Jsoup.connect(url).get(); // 通过Jsoup连接并获取网页内容

            List<WebContent> webContents = new ArrayList<>(); // 创建属性类对象列表

            Elements links = doc.select("a[href]"); // 选择所有带有href属性的<a>元素
            for (Element link : links) {
                String linkText = link.text(); // 获取链接文本
                String linkHref = link.attr("href"); // 获取链接URL

                WebContent webContent = new WebContent(linkHref, linkText, null); // 创建属性类对象
                webContents.add(webContent); // 添加到对象列表
            }

            Elements images = doc.select("img[src]"); // 选择所有带有src属性的<img>元素
            for (Element image : images) {
                String imageUrl = image.attr("src"); // 获取图片URL
                String imageAlt = image.attr("alt"); // 获取图片alt属性
                WebContent webContent = new WebContent(null, imageAlt, imageUrl); // 创建属性类对象
                webContents.add(webContent); // 添加到对象列表
            }
            for (WebContent webContent : webContents) {
                System.out.println("----------------");
                System.out.println(webContent);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

这里 我们用的百度首页的链接做测试 因为百度肯定技术是很好的 不怕我们访问
然后 我们拿取a标签 通过text函数 拿到文本 通过attr获取href 属性 拿到链接地址

然后 拿到所有的 img图 或许 src 与 alt属性

最后 输出list集合
运行代码如下
在这里插入图片描述
也是非常的完美


http://www.niftyadmin.cn/n/5263985.html

相关文章

如何处理好面试中的“压力测试”?

作为一名求职者&#xff0c;在面试时有时遇到的是压力测试&#xff0c;有时则遇到的是一些无良企业单位&#xff0c;究竟如何把握忍耐的限度&#xff0c;才合格当一个能经受压力的员工&#xff0c;才能避免对无良单位的一味隐忍! 压力面试是指有意制造紧张&#xff0c;以了解求…

21. python __init__.py 文件的行为

重复打印行为分析 说明结论主模块主模块所在位置不会被python认为是包 说明 我在调试代码的时候&#xff0c;发现上面的print打印了两次&#xff0c;如果将图片中的 from aaa.F import Cat 改成 from F import Cat 则print只会打印一次。这是为什么呢&#xff1f; 结论 from …

java写个爬虫抓取汽车之家车型配置参数

前几天有个搞工程的表弟找我&#xff0c;问我什么车好&#xff0c;可以经常跑工地的&#xff0c;看上去又有面子。于是我挥动发财的小手&#xff0c;写一个爬虫程序&#xff0c;筛选并整理了一些数据&#xff0c;并附上下载的图片提供参考&#xff0c;看中了果断第二天提车到手…

如何使用 Flutter 和地理位置 API 构建基于位置的移动应用程序?

基于位置的移动应用程序是当今智能手机用户的新动力。借助这些应用程序&#xff0c;人们可以使用地图来确定正确的路线。跟踪实时位置、搜索附近感兴趣的地点以及使用其他各种基于位置的服务 (LBS)。 如今&#xff0c;对基于位置的应用程序的需求大幅增加。移动应用中地理定位…

PHP中如何进行单元测试和集成测试?

在 PHP 中&#xff0c;进行单元测试和集成测试通常使用测试框架来实现。以下是两个常用的 PHP 测试框架以及简要的介绍&#xff1a; PHPUnit&#xff08;单元测试&#xff09;&#xff1a; 安装 PHPUnit&#xff1a; 可以使用 Composer 安装 PHPUnit。 composer require --dev …

CollectionUtils 包

依赖 <dependency><groupId>org.apache.commons</groupId><artifactId>commons-collections4</artifactId><version>4.4</version> </dependency>isEmpty 判断是否为空 CollectionUtils.isEmpty(null): true CollectionUtil…

STM32--Wi-Fi插座_风扇_灯

项目需求 两个互相通信的双方&#xff0c;波特率必须相同!!!!!! 通过 ESP8266 模块&#xff0c;实现手机控制 wifi 插座 / 风扇 / 灯。 项目设计 串口 1 用于与 ESP8266 通讯&#xff0c;串口 2 连接 PC &#xff0c;用于打印 log &#xff0c;查看系统状态。 项目实现 注意&a…

Java EE 网络之网络初识

文章目录 1. 网络发展史1.1 独立模式1.2 网络互连1.3 局域网 LAN1.4 广域网 WAN 2. 网络通信基础2.1 IP 地址2.2 端口号2.3 认识协议2.4 五元组2.5 协议分层2.5.1 什么是协议分层2.5.2 分层的作用2.5.3 OSI七层协议2.5.4 TCP/IP五层协议2.5.5 网络设备所在分层 2.6 分装和分用 …