Jsoup爬虫

1 Jsoup简介

        Jsoup是一个Java库,它简化了使用真实世界的HTML和XML。它提供了一个易于使用的API,用于使用DOM API方法、CSS和xpath选择器进行URL获取、数据解析、提取和操作。

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

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

        Jsoup设计用于处理各种各样的HTML;从原始和验证,到无效标签汤;jsoup将创建一个合理的解析树。

2 爬取一个页面

        创建Maven项目,并添加Jsoup依赖,内容如下。

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

        我们先来爬取单个页面(王者荣耀官方网站-腾讯游戏),了解Jsoup的基本使用。

        获取页面内容

Document doc = null;
try {doc = Jsoup.connect("https://pvp.qq.com/index.shtml").get();
} catch (IOException e) {e.printStackTrace();
}
String content = doc.html();

        保存页面到本地

File file = new File("d:/pvp.qq.com");
if (!file.exists()) {file.mkdirs();
}
try {FileWriter writer = new FileWriter(file.getPath() + "/index.html");writer.write(content);writer.flush();writer.close();
} catch (IOException e) {e.printStackTrace();
}

        完整代码

import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;public class PageFetch {public static void main(String[] args) {fetchPage();}/*** 爬取页面并保存*/public static void fetchPage() {Document doc = null;try {doc = Jsoup.connect("https://pvp.qq.com/index.shtml").get();} catch (IOException e) {e.printStackTrace();}String content = doc.html();File file = new File("d:/pvp.qq.com");if (!file.exists()) {file.mkdirs();}try {FileWriter writer = new FileWriter(file.getPath() + "/index.html");writer.write(content);writer.flush();writer.close();} catch (IOException e) {e.printStackTrace();}}}

3 保存图片

        在保存的首页中找到背景图的网址

//436行
background-image:url(//ossweb-img.qq.com/upload/webplat/info/yxzj/20200807/9771361431874.jpg)

        打开图片链接

URL url = new URL("https://ossweb-img.qq.com/upload/webplat/info/yxzj/20200807/9771361431874.jpg");
URLConnection conn = url.openConnection();
conn.setConnectTimeout(8 * 1000);

        获取图片对应的输入流

InputStream in = conn.getInputStream();

        保存图片到本地

byte[] buff = new byte[1024];
int len = 0;
File file = new File("d:/pvp.qq.com");
if (!file.exists()) {file.mkdirs();
}
FileOutputStream out = new FileOutputStream(file.getPath() + "/9771361431874.jpg");while ((len = in.read(buff)) != -1) {out.write(buff, 0, len);
}
out.close();
in.close();

        完整代码

import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;public class ImageSave {public static void main(String[] args) {saveImage();parsePage();editPage();}/*** 保存图片*/public static void saveImage() {try {//首页背景图<div class="kv-bg-container"><div class="kv-bg" style="background-image:url(...URL url = new URL("https://ossweb-img.qq.com/upload/webplat/info/yxzj/20200807/9771361431874.jpg");URLConnection conn = url.openConnection();conn.setConnectTimeout(8 * 1000);InputStream in = conn.getInputStream();byte[] buff = new byte[1024];int len = 0;File file = new File("d:/pvp.qq.com");if (!file.exists()) {file.mkdirs();}FileOutputStream out = new FileOutputStream(file.getPath() + "/9771361431874.jpg");while ((len = in.read(buff)) != -1) {out.write(buff, 0, len);}out.close();in.close();}  catch (IOException e) {e.printStackTrace();}}}

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

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

相关文章

Java Spring中的事务管理是如何实现的?

Spring框架中的事务管理是其核心特性之一&#xff0c;它允许开发者以声明式或编程式的方式控制数据库事务。这确保了数据的完整性和一致性&#xff0c;特别是在并发操作和多用户环境中。 Spring事务管理主要基于以下几个核心概念&#xff1a; PlatformTransactionManager&…

QT C++ QCustomPlot 简单使用

//本文描述QCustomPlot的简单使用&#xff0c; //使用QCustomPlot 画曲线分5步 //1.初始化 //2.发送 //3.接收 //4.绑定 //5.重绘 //通常单独的线程发送&#xff0c;发送线程通过emit函数或者waik函数告诉接收方&#xff0c; //接收方通常是GUI类的函数&#xff0c;把数…

go 测试和文件

go 测试和文件 需求传统测试单元测试牛刀小试总结练习文件介绍打开关闭文件读文件一次性读取文件写文件文件或文件夹是否存在文件拷贝 需求 有一个函数&#xff0c;怎样确认他运行结果是正确的&#xff1f; func addUpper(n int)int {res : 0for i : 1; i < n; i {res1}r…

Matlab绘制对数轴

Matlab绘制对数轴 在Matlab中&#xff0c;可以使用semilogx和semilogy函数分别绘制对数坐标轴和线性坐标轴的图形&#xff0c;可以使用loglog绘制双对数轴图形。 使用semilogx函数绘制对数x轴的图形示例&#xff1a; x linspace(0.1, 10, 100); % 生成从0.1到10的100个等间隔…

【基础算法总结】双指针算法二

双指针 1.有效三角形的个数2.和为S的两个数字3.和为S的两个数字4.四数之和 点赞&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;关注&#x1f496;&#x1f496; 你的支持是对我最大的鼓励&#xff0c;我们一起努力吧!&#x1f603;&#x1f603; 1.有效三角形的个数…

elasticsearch-8.1.0安装记录

目录 零、版本说明一、安装二、使用客户端访问 零、版本说明 centos [rootnode1 ~]# cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core)elasticsearch elasticsearch-8.1.0-linux-x86_64一、安装 systemctl stop firewalld.servicesystemctl disable firewal…

mysql中join内外连接查询例子

文章目录 join关键字概要举例using 与 on 区别 join关键字 在MySQL中&#xff0c;JOIN 是一种用于将两个或多个表中的行联合起来的操作。 连接&#xff08;join&#xff09;就是将一张表中的行按照某个条件&#xff08;连接条件&#xff09;与另一张表中的行连接起来形成一个新…

debian配置BIND DNS服务器

前言 局域网内有很多台主机&#xff0c;IP难以记忆。 而修改hosts文件又难以做到配置共享和统一&#xff0c;需要一台内网的DNS服务器。 效果展示 这里添加了一个域名hello.dog&#xff0c;将其指向为192.168.1.100。 同时&#xff0c;外网的域名不会受到影响&#xff0c;…

C语言:内存操作函数memcpy、memmove、memset和memcpy的使用和模拟实现

一&#xff1a;memcpy的使用和模拟 memcpy使用时需要包含的头文件为#include<string.h> void* memcpy(void* destination,const void* source,size_t num) 函数memcpy从source的位置开始向后复制num个字节的数据到destination指向的内存位置&#xff08;特别注意的是…

百度百科推广轻松实现销量翻倍的4个秘诀-华媒舍

在如今的数字化时代&#xff0c;网络推广已经成为企业推广产品和增加销量的重要手段之一。其中&#xff0c;百度百科作为国内最大的中文百科网站&#xff0c;拥有庞大的用户群体&#xff0c;成为众多企业进行产品推广和提升知名度的选择之一。本文将介绍如何高效运用百度百科进…

电子盖章管理软件

电子盖章管理软件是一种专门设计用于生成、管理和验证电子印章&#xff0c;以及支持电子文档安全签署过程的应用程序。这些软件通常具备以下核心功能&#xff1a; 电子印章生成&#xff1a;允许用户创建、设计或导入符合法律要求的电子印章图像&#xff0c;关联数字证书以确保印…

FORM调用标准AP\AR\GL\FA界面

EBS FORM客户化界面有时候数据需要追溯打开AP\AR\GL\FA等界面&#xff1a; 一种打开日记账的方式&#xff1a; PROCEDURE SHOW_JOURNAL ISparent_form_id FormModule;child_form_id FormModule; BEGINclose_jrn;parent_form_id : FIND_FORM(:SYSTEM.CURRENT_FORM);COPY(TO…

C#中对象类型转换

对象类型转换通常有两种情况&#xff1a; 一种是当需要转化对象的类型属于转换目标类型或者转换目标类型的派生类型两个对象没有关系&#xff0c;但属性和方法一样。 1. 针对第一种情况可以使用as进行对象转换 public class StudentInfo{public string Name;public int Age;…

螺栓的常识介绍

钢结构连接用螺栓性能等级分3.6、4.6、4.8、5.6、6.8、8.8、9.8、10.9、12.9等10余个等级&#xff0c;其中8.8级及以上螺栓材质为低碳合金钢或中碳钢并经热处理&#xff08;淬火、回火&#xff09;&#xff0c;通称为高强度螺栓&#xff0c;其余通称为普通螺栓。螺栓性能等级标…

4/26发布发布:缺了好几次的作业,矩形法+二分法求下面方程根+顺序查找n+程序填空,补一下还有八九没做,炸8412 字不是干的,哈哈哈

OK了发布 你说的对&#xff0c;但是釜山行里逃过了六节车厢的丧尸&#xff0c;却逃不过一节车厢的人心&#xff0c;这说明了什么&#xff1f;说明一节更比六节强&#xff0c;王中王&#xff0c;火腿肠&#xff0c;果冻我要喜之郎&#xff0c;上课要听鹏哥讲&#xff01; 目录…

【数据结构】最短路径

在图论中&#xff0c;最短路径问题是一个经典且重要的问题&#xff0c;它用于寻找两个顶点之间距离最短的路径。本文将详细介绍两种常用的最短路径算法——Dijkstra算法和Bellman-Ford算法的原理&#xff0c;并提供C语言代码示例&#xff0c;演示它们的实现方式及应用场景。 一…

Hive,Presto,Spark 共性

Hive、Presto 和 Spark 都是大数据处理工具&#xff0c;都属于大数据处理技术栈&#xff0c;都需要集群环境支持&#xff0c;都可以进行数据处理和分析。 都可以进行数据处理&#xff1a;Hive、Presto、Spark 都可以用 SQL 语句进行数据处理&#xff0c;也可以用它们的语言&…

【算法模板】图论基础算法

文章目录 图论算法基础模板树与图的存储1. 邻接矩阵&#xff1a;2. 邻接表&#xff1a; 树与图的遍历(1)深度优先搜索 (DFS)深度优先遍历 (DFS)(2)宽度优先搜索 (BFS)宽度优先遍历 (BFS) 拓扑排序朴素Dijkstra算法堆优化版Dijkstra算法Bellman-Ford算法SPFA算法SPFA判断图中是否…

2024年4月计算机视觉论文推荐

本文将整理4月发表的计算机视觉的重要论文&#xff0c;重点介绍了计算机视觉领域的最新研究和进展&#xff0c;包括图像识别、视觉模型优化、生成对抗网络(gan)、图像分割、视频分析等各个子领域 扩散模型 1、Tango 2: Aligning Diffusion-based Text-to-Audio Generations th…