Java Spring Boot 从必应爬取图片

获取图片主要就是通过必应图片页面控制台的元素,确认图片和标题在哪个类中(浏览器 F12)

引入依赖

这里需要引入两个依赖 jsoup 和 hutool

maven依赖网站地址:Maven Repository: Search/Browse/Explore (mvnrepository.com)

挑选使用最多的版本即可

hutool依赖

<!-- https://mvnrepository.com/artifact/cn.hutool/hutool-all -->
<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.27</version>
</dependency>

jsoup 依赖

<!-- https://mvnrepository.com/artifact/org.jsoup/jsoup -->
<dependency><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.15.3</version>
</dependency>

查看浏览器图片的位置

这里 murl 和 turl 都可以访问,选取一个即可。

使用 jsoup 爬取

1. 首先从 jsoup 官方文档得到示例代码:jsoup: Java HTML parser, built for HTML editing, cleaning, scraping, and XSS safety

Document doc = Jsoup.connect("https://en.wikipedia.org/").get();
log(doc.title());
Elements newsHeadlines = doc.select("#mp-itn b a");
for (Element headline : newsHeadlines) {log("%s\n\t%s", headline.attr("title"), headline.absUrl("href"));
}

2. 完整代码

public class CrawlerTest {public static void main(String[] args) throws IOException {//搜索词,可以替换成你想搜索的词,前端传入System.out.println("请输入想要搜索的图片:");Scanner scanner =  new Scanner(System.in);String search = scanner.nextLine();//拼接想要搜索的图片String url = String.format("https://cn.bing.com/images/search?q=%s&first=1", search);/*简单来说,jsoup 就是爬虫,通过 jsoup 提供的 api,可以方便的获取到网页的 html 结构,然后通过解析 html 结构,获取到我们想要的数据connect 方法是 jsoup 提供的连接网页的方法,传入 url 即可get 方法是 jsoup 提供的获取网页内容的方法,返回值是 Document 类型*/Document doc = Jsoup.connect(url).get();/** 从文档中获取到所有的图片元素,通过选择器 ".iuscp.isv" 获取到所有的图片元素* .iuscp.isv 表示的是图片元素,是上一步通过浏览器的控制台找到的* 然后遍历这些元素,获取到图片的地址,图片名称等*/Elements elements = doc.select(".iuscp.isv");for (Element element : elements) {//获取到图片的地址String murl = element.select(".iusc").get(0).attr("m");/*获取到的图片地址是 Json 格式通过 Hutool 提供的 JSONUtil 工具类,将 Json 格式转换成 Map 格式然后通过 Map 获取到图片的地址注意:Hutool 是一个 Java 工具包,它封装了 Java 开发中常用的方法,*/Map<String, Object> map = JSONUtil.toBean(murl, Map.class);String fmurl = (String) map.get("murl");System.out.println(fmurl);/*获取图片名称和图片地址同理通过 element.select(".inflnk") 获取到图片名称元素,通过 attr("aria-label") 获取到图片名称*/String pName = element.select(".inflnk").get(0).attr("aria-label");System.out.println(pName);}}
}

结果展示

随便选取一个地址打开

 

完成。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/21041.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

极简网络用户手册(1)

极简网络系统处理流程 模块位置&#xff1a;参数平台--专题分析--极简网络分析 步骤&#xff1a; 步骤一&#xff1a;创建精细化场景策略 步骤二&#xff1a;创建任务&#xff0c;主要选择策略&#xff08;包括√配置和距离配置&#xff09;和需要处理的小区清单&#xff08;源…

srcu浅析

本文代码基于linux内核4.19.195 之前写了rcu、rcu nocb的文章&#xff0c;感觉还差个srcu就完整了&#xff0c;现在补齐一下。 SRCU&#xff08;Sleepable RCU&#xff09;是rcu的一个变体&#xff0c;顾名思义&#xff0c;就是在rcu的读临界区中允许睡眠&#xff0c;而rcu在读…

CCF-GESP 等级考试 2023年6月认证C++四级真题解析

2023年09月真题 一、单选题&#xff08;每题2分&#xff0c;共30分&#xff09; 第 1 题 高级语言编写的程序需要经过以下&#xff08; &#xff09;操作&#xff0c;可以生成在计算机上运行的可执行代码。 A. 编辑B. 保存C. 调试D. 编译 答案&#xff1a;D 解析&#xff1a;…

FS212E 系列PD协议

PD快充协议芯片FS212EL、FS212EH可以智能的识别插入的手机类型&#xff0c;选择最为合适的协议应对手机快充需要。兼容多类USB Type-C协议&#xff0c;包括TypeC协议、TypeC PD2.0、TypeC PD3.0、TypeC PD3.2等协议。集成OPTO输出&#xff0c;通过电阻直驱反馈光耦。FS212E 的调…

C++函数模版和C#的泛型函数的区别

函数模板和C#的泛型函数在概念上是非常相似的&#xff0c;都是用于创建能够处理多种数据类型的通用函数。它们的主要区别点在于语法和实现细节上&#xff1a; 语法&#xff1a; C 中的函数模板使用 template <typename T> 或者 template <class T> 来声明模板&am…

新手学习STM32还是ESP32

对于新手来说&#xff0c;选择学习STM32还是ESP32取决于个人的学习目标和背景。以下是针对这两种微控制器的详细分析&#xff0c;以便您做出更明智的选择&#xff1a; STM32 1. 处理器架构与性能 STM32采用单核或多核处理器架构&#xff0c;基于ARM Cortex-M0&#xff0c;M0…

PlantUML-使用文本来画时序图

介绍 PlantUML 是一个开源工具&#xff0c;用户可以使用纯文本描述来创建 UML (统一建模语言) 图形。由于它使用文本来描述图形&#xff0c;因此可以很容易地将这些描述与源代码一起存储在版本控制系统中。然后&#xff0c;PlantUML 负责将这些描述转换为图形。 资料 官方文…

k8s部署1.27.3版本,使用containerd模式

环境 操作系统&#xff1a;centos7.9 机器&#xff1a;1个master 和 1个node 节点&#xff08;云ECS&#xff09; 系统设置 # 所有机器设置hostname hostnamectl set-hostname master1 hostnamectl set-hostname node1# 所有机器增加内网ip和 master1 对应关系 vi /etc/ho…

杂牌记录仪TS视频流恢复方法

大多数的记录仪都采用了MP4/MOV文件方案&#xff0c;极少数的可能在用AVI文件&#xff0c;极极少数的在用TS文件方案。很多人可能不太解TS文件&#xff0c;这是一种古老的视频文件结构&#xff0c;下边这个案例我们来看下TS视频文件的恢复方法。 故障存储:8G存储卡/fat32文件系…

2-1RT-Thread线程管理-笔记

2-1RT-Thread线程管理-笔记 其中系统线程由内核创建&#xff0c;如main函数和空闲线程都属于系统线程&#xff0c;而用户线程是由应用程序所创建的。 对于资源较大的MCU可以适当设计较大的线程栈&#xff0c;也可以在初始化时设置一个具体的数值&#xff0c;如1K或2K字节。…

索引 ---- mysql

目录 1. 索引 1.1 概念 1.2 作用 1.3 使用场景 1.4 使用 1.4.1查看索引 1.4.2 创建索引 1.4.3 删除索引 1.5 注意事项 1.6 索引底层的数据结构 (面试经典问题) 1. 索引 1.1 概念 索引是一种特殊的文件&#xff0c;包含着对数据表里所有记录的引用指针。可以对表中的…

2006NOIP普及组真题 2. 开心的金明

线上OJ&#xff1a; 【06NOIP普及组】开心的金明 本题只要把 1、限定金额看成背包总容量 2、每件物品的价格 v 看成占用背包的体积 3、每件物品的价格v乘以权重w作为该物品的价值 则本题可套用标准的01背包问题模板&#xff1a; f [ j ] m a x ( f [ j ] , f [ j − v ] w …

Redis单线程

Redis是基于Reactor模式开发的网络事件处理器,这个处理器是单线程的,所 以redis是单线程的。 为什么它是单线程还那么快呢? 主要有以下几个原因: 一、纯内存操作 由于Redis是 纯内存操作,相比于磁盘来说,内存就快得多,这个是Redis快的主要 原因。 二、多路复用I/O机制(…

优先队列优化哈夫曼编码

前言 个人小记 一、代码 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #define MAX_NODE 80 #define MAX_STR 50 #define MAX_HEAP 100 #define father(i) ((i)/2) #define left(i) ((i)*2) #define right(i) …

11.3 指针和函数

11.3 指针和函数 本节必须掌握的知识点&#xff1a; 指针作为函数的参数 数组作为函数的参数 指针作为函数的返回值 在C语言中&#xff0c;指针的一个重要作用就是作为函数参数使用&#xff0c;本节将介绍这一重要作用。 11.3.1 指针作为函数的参数 实验一百一十三&#xff…

电磁兼容(EMC):BUCK变换器基本原理及传导辐射分析设计

目录 1. BUCK电路拓扑及原理 2. Buck拓扑电路电磁场分析 3.总结 开关电源替代线性电源&#xff0c;解决了效率和体积问题&#xff0c;但也带来了新的EMI问题。开关电源也是产品内部的强辐射源之一&#xff0c;基于透过现象看本质&#xff0c;将复杂问题简单化&#xff0c;本…

Xilinx FPGA 管脚的默认电平配置方法 XDC约束

目录 未使用的引脚&#xff0c;XDC约束其他已使用的引脚&#xff0c;XDC约束 未使用的引脚&#xff0c;XDC约束 set_property BITSTREAM.CONFIG.UNUSEDPIN PULLDOWN [current_design] set_property BITSTREAM.CONFIG.UNUSEDPIN PULLUP [current_design] set_property BITSTREA…

T检验——单样本t检验/两独立样本t检验/配对样本t检验

T检验——单样本t检验/两独立样本t检验/配对样本t检验 1.单样本t检验1.1 适用范围 2. &#xff08; 独立样本t检验&#xff09;两独立样本t检验3.ANOVA多组样本显著性检验&#xff08;2组以上&#xff09;4. 配对样本T检验 1.单样本t检验 1.1 适用范围 单样本t检验:即已知样本…

Linux如何设置系统发送告警脚本到邮箱

本次测试版本&#xff1a;centos7.6 第一步安装mailx yum install mailx 安装结果如下&#xff1a; [rootCentOS764 ~]# yum install mailx Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile epel/x86_64/metalink …

成功解决“IndexError: deque index out of range”错误的全面指南

成功解决“IndexError: deque index out collections.deque out of range”错误的全面指南 引言 在Python编程中&#xff0c;collections.deque 是一个双端队列&#xff08;double-ended queue&#xff09;&#xff0c;支持从两端快速添加和删除元素。然而&#xff0c;与列表&…