当前位置: 首页 > news >正文

爬虫基础

maven pom

<dependencies><!--前端jqury--><dependency><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.16.1</version></dependency><!--http工具--><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpcore</artifactId><version>4.4.16</version></dependency><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.14</version></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.13.0</version></dependency>
</dependencies>

====================================

遍历网站内容爬取网站网址

package com.xiaocao;import com.sun.org.apache.bcel.internal.generic.NEW;
import com.sun.org.apache.regexp.internal.RE;import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;public class UrlPool {public static void main(String[] args) {/*首页地址*/getUrl("https://www.nipic.com/");}private static void getUrl(String baseUrl) {Map<String, Boolean> oldMap = new LinkedHashMap<>();/*相对路径拼接*/String oldLinkHost = "";Pattern p = Pattern.compile("(https?://)?[^\\s]*");Matcher m = p.matcher(baseUrl);if (m.find()) {oldLinkHost = m.group();}oldMap.put(baseUrl, false);oldMap = crawlLinks(oldLinkHost, oldMap);for (Map.Entry<String, Boolean> mapping : oldMap.entrySet()) {System.out.println("连接:" + mapping.getKey());}}private static Map<String, Boolean> crawlLinks(String oldLinkHost, Map<String, Boolean> oldMap) {LinkedHashMap<String, Boolean> newMap = new LinkedHashMap<>();String oldLink = "";for (Map.Entry<String, Boolean> mapping : oldMap.entrySet()) {if (!mapping.getValue()){System.out.println(mapping.getKey()+"连接有参数:" + mapping.getKey());oldLink = mapping.getKey();try {URL url = new URL(oldLink);HttpURLConnection connection = (HttpURLConnection) url.openConnection();connection.setRequestMethod("GET");if (connection.getResponseCode() == 200) {BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
//                        Pattern p = Pattern.compile("<a.*?href=[\"']?(https?://)?/?[^\"']?.*?>(.+)</a>");Pattern p = Pattern.compile("<a\\b[^>]+\\bhref=\"([^\"]*)\"[^>]*>([\\s\\S]*?)</a>");Matcher matcher = null;String line = "";while ((line = reader.readLine()) != null) {matcher = p.matcher(line);if (matcher.find()) {String newLink = matcher.group(1);if (!newLink.startsWith("http")) {/*相对路径*/if (newLink.startsWith("/")) {newLink = oldLinkHost + newLink;} else {newLink = oldLinkHost + "/" + newLink;}}if (newLink.endsWith("/")) {newLink = newLink.substring(0, newLink.length() - 1);}if (!oldMap.containsKey(newLink) && !newMap.containsKey(newLink) && newLink.startsWith(oldLinkHost)) {newMap.put(newLink, false);}}}}} catch (Exception e) {} finally {oldMap.replace(oldLink, true);}}}if (!newMap.isEmpty()) {oldMap.putAll(newMap);oldMap.putAll(crawlLinks(oldLinkHost, oldMap));}return oldMap;}
}

==============

下载网站内容

package com.xiaocao;import org.apache.commons.io.FileUtils;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.jsoup.Connection;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import sun.net.www.http.HttpClient;import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpCookie;public class ImageCraw {private static String url = "https://xxx";public static void main(String[] args) {
//        apacheHttpClient();try {Document document = Jsoup.connect(url).get();Elements select = document.select(".newdetail-skin #J_worksImg");try {Connection.Response src = Jsoup.connect("https:"+select.attr("src")).userAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:130.0) Gecko/20100101 Firefox/130.0").ignoreContentType(true).execute();String name = select.attr("alt");System.out.println(name);ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(src.bodyAsBytes());FileUtils.copyInputStreamToFile(byteArrayInputStream,new File("F:\\filetest\\"+name+".jpg"));}catch (Exception e){e.printStackTrace();}//            for (int i = 0; i < select.size(); i++) {
//                Elements img = select.get(i).select(".newdetail-skin #J_worksImg");
//
//                try {
//                    Connection.Response src = Jsoup.connect("https:"+img.attr("src"))
//                            .userAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:130.0) Gecko/20100101 Firefox/130.0")
//                            .ignoreContentType(true)
//                            .execute();
//
//                    String name = img.attr("alt");
//                    System.out.println(name);
//                    ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(src.bodyAsBytes());
//                    FileUtils.copyInputStreamToFile(byteArrayInputStream,new File("F:\\filetest\\"+name+".jpg"));
//                }catch (Exception e){
//                    e.printStackTrace();
//                }
//
//            }} catch (IOException e) {e.printStackTrace();}}private static void apacheHttpClient() {CloseableHttpClient client = HttpClients.createDefault();HttpGet httpGet = new HttpGet(url);/*伪装浏览器*/httpGet.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:130.0) Gecko/20100101 Firefox/130.0");try {CloseableHttpResponse execute = client.execute(httpGet);HttpEntity entity = execute.getEntity();String s = EntityUtils.toString(entity);System.out.println(s);} catch (IOException e) {e.printStackTrace();}}
}

相关文章:

爬虫基础

maven pom <dependencies><!--前端jqury--><dependency><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.16.1</version></dependency><!--http工具--><dependency><grou…...

HTML3D旋转相册

文章目录 序号目录1HTML满屏跳动的爱心(可写字)2HTML五彩缤纷的爱心3HTML满屏漂浮爱心4HTML情人节快乐...

[linux]快速入门

学习目标 通过学习能够掌握以下的linux操作 操作系统 按照应用领域的不同, 操作系统可以分为几类 桌面操作系统服务器操作系统移动设备操作系统嵌入式操作系统 不同领域的主流操作系统 桌面操作系统 Windows(用户数量最多)MacOS(操作体验好&#xff0c;办公人士首选)Linux…...

域3:安全工程 第6章 密码学与对称密钥算法

---域3主要包括OSG 6、7、8、9、10 章--- 随着信息化时代的推进&#xff0c;网络安全愈发关键。CISSP认证考试中的第6章&#xff0c;专注于密码学与对称密钥算法&#xff0c;这两者是网络安全的核心。 密码学&#xff0c;历经演变&#xff0c;从古代简单的替代密码到现代的复杂…...

MySQL注入load_file常用路径

在MySQL注入攻击中&#xff0c;攻击者可能会尝试利用LOAD_FILE()函数来读取服务器上的敏感文件。LOAD_FILE()函数允许从服务器的文件系统中读取文件&#xff0c;并将其内容作为字符串返回。然而&#xff0c;这个函数需要满足一定的权限条件&#xff0c;并且文件路径必须是服务器…...

ubuntu20.04版本 快速安装 python3.11(宝宝级攻略)

1.前言 深度学习领域中&#xff0c;Python是首选编程语言&#xff0c;因此安装python进行深度学习是必要的&#xff0c;我在安装时踩过了一些坑&#xff0c;就想出一个宝宝级的攻略&#xff0c;希望能够帮助大家。 本宝宝攻略无论是在双系统下还是在虚拟机的环境下均能安装&a…...

DeepSeek AI 推出 Janus 自回归框架,统一视觉、文本理解与生成的创新解决方案

❤️ 如果你也关注大模型与 AI 的发展现状&#xff0c;且对大模型应用开发非常感兴趣&#xff0c;我会快速跟你分享最新的感兴趣的 AI 应用和热点信息&#xff0c;也会不定期分享自己的想法和开源实例&#xff0c;欢迎关注我哦&#xff01; &#x1f966; 微信公众号&#xff…...

NORDIC nPM1100 是一款集成式电源管理

nPM1100 是一款集成式电源管理IC(PMIC)&#xff0c;采用2.1x2.1毫米WLCSP或4.0x4.0 毫米 QFN 封装 &#xff0c;内置线性模式锂离子/锂聚合物电池充电器。它采用高效DC/DC降压调节器&#xff0c;具有可配置的双模式 输出。 nPM1100是一款极其紧凑的PMIC器件&#xff0c;专为空间…...

深入RAG:知识密集型NLP任务的解决方案

在当今知识密集型任务日益增多的时代&#xff0c;如何有效地利用外部知识来增强语言模型的生成能力成为了一个重要的研究方向。RAG技术应运而生&#xff0c;通过从外部记忆源中检索相关信息&#xff0c;RAG不仅提高了模型生成的精准性和相关性&#xff0c;还解决了大型语言模型…...

vue-element-admin顶部导航栏的修改

基于vue-element-admin的顶部一级导航栏的调整&#xff0c;因为一级路由过多导致其他元素被挤到第二行&#xff0c;故现在将原来一级路由数组拆分成两个数组&#xff0c;第二个数组以子菜单显示 关键处调整代码 html <el-menu:active-text-color"variables.menuActiv…...

微信小程序 setData数据量过大的解决与分页加载的实现

我们经常使用setData方法来修改数据&#xff0c;从而达到更新页面的目的。但是当我们通过setData方法设置的数据过大时就会报如下错误。 vdSyncBatch 数据传输长度为 2260792 已经超过最大长度 1048576这是因为setData设置的数据量是有限制的&#xff0c;单次设置的数据大小不…...

体育动画直播嵌入方式以及作用

什么是体育动画直播&#xff1f; 体育动画直播是通过动画技术和实时数据&#xff0c;将体育赛事的进程以动态的方式展现出来。这种形式不仅可以实时呈现比赛的关键时刻&#xff0c;还能够将数据和信息以更生动、有趣的方式传达给观众。比如&#xff0c;在一场足球比赛中&#…...

腾讯云轻量服务器Lighthouse的前世今生

目录 序一、名字的由来二、Lighthouse的定位是什么&#xff0c;与CVM的差异化有哪些三、Lighthouse是如何实现简单易用的四、Lighthouse对于开发者有哪些具体的利好 序 印象中&#xff0c;腾讯云轻量应用服务器Lighthouse是在2020年正式上线的。 在其一经推出后&#xff0c;就…...

java实现redis的消息发送和消费,类似kafka功能

确保在 pom.xml 中添加了 Spring Data Redis 和 Jedis 的依赖。如下所示&#xff1a;<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency&g…...

【软件设计】常用设计模式--代理模式

文章目录 代理模式&#xff08;Proxy Pattern&#xff09;1. 概念2. 模式结构3. UML 类图4.实现方式C# 示例步骤1&#xff1a;定义主题接口步骤2&#xff1a;实现真实主题步骤3&#xff1a;实现代理类步骤4&#xff1a;客户端使用代理模式输出结果&#xff1a; Java 示例步骤1&…...

生命与自由,抑郁的来源

在中国文学史上&#xff0c;有一句极其伟大的话&#xff0c;它点出了所有人痛苦的根源。它出自《我与地坛》&#xff0c;太阳它每时每刻即是夕阳也都是旭日&#xff0c;当他从这一段熄灭着走下山去&#xff0c;收尽苍凉参照之际&#xff0c;也正是它在另一端燃烧着爬上山巅布散…...

CTFHUB技能树之文件上传——双写后缀

开启靶场&#xff0c;打开链接&#xff1a; 直接指明是双写绕过方法 上传06shaungxie.php&#xff0c;内容如下&#xff1a; 这一步其实最好换成.png或者.jpg或者.gif这三个符合文件格式的要求后缀 用burp抓包改包&#xff1a; 将php改成pphphp后再“Forward”&#xff1a; 上传…...

SpringBoot整合HTTPS

文章目录 1_Https 的作用2_获取证书3_配置项4_配置类5_控制类6_启动类 1_Https 的作用 保护用户的隐私信息安全&#xff1a; 在 HTTP 网站数据以明文方式传输&#xff0c;客户的隐私极容易被盗取和泄露&#xff0c;而部署 SSL 证书&#xff0c;数据以 HTTPS 加密传输&#xf…...

LVGL-从入门到熟练使用

LVGL简介 LVGL&#xff08; Light and Versatile Graphics Library &#xff09;是一个轻量、多功能的开源图形库。 1、丰富且强大的模块化图形组件&#xff1a;按钮 、图表 、列表、滑动条、图片等 2、高级的图形引擎&#xff1a;动画、抗锯齿、透明度、平滑滚动、图层混合等…...

【MySQL数据库】MySQL读写分离

文章目录 读写分离概念读写分离的动机读写分离的适用场景主从复制与读写分离MySQL 读写分离原理MySQL读写分离的实现方式代表性程序 MySQL读写分离实验搭建 MySQL 读写分离Amoeba 服务器配置测试读写分离 问答 读写分离 概念 读写分离是为了优化数据库性能&#xff0c;通过将…...

【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密

在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

ESP32读取DHT11温湿度数据

芯片&#xff1a;ESP32 环境&#xff1a;Arduino 一、安装DHT11传感器库 红框的库&#xff0c;别安装错了 二、代码 注意&#xff0c;DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...

django filter 统计数量 按属性去重

在Django中&#xff0c;如果你想要根据某个属性对查询集进行去重并统计数量&#xff0c;你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求&#xff1a; 方法1&#xff1a;使用annotate()和Count 假设你有一个模型Item&#xff0c;并且你想…...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用&#xff0c;可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器&#xff0c;能够帮助开发者更好地管理复杂的依赖关系&#xff0c;而 GraphQL 则是一种用于 API 的查询语言&#xff0c;能够提…...

实现弹窗随键盘上移居中

实现弹窗随键盘上移的核心思路 在Android中&#xff0c;可以通过监听键盘的显示和隐藏事件&#xff0c;动态调整弹窗的位置。关键点在于获取键盘高度&#xff0c;并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)

1.获取 authorizationCode&#xff1a; 2.利用 authorizationCode 获取 accessToken&#xff1a;文档中心 3.获取手机&#xff1a;文档中心 4.获取昵称头像&#xff1a;文档中心 首先创建 request 若要获取手机号&#xff0c;scope必填 phone&#xff0c;permissions 必填 …...

【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制

使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下&#xff0c;限制某个 IP 的访问频率是非常重要的&#xff0c;可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案&#xff0c;使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...

前端中slice和splic的区别

1. slice slice 用于从数组中提取一部分元素&#xff0c;返回一个新的数组。 特点&#xff1a; 不修改原数组&#xff1a;slice 不会改变原数组&#xff0c;而是返回一个新的数组。提取数组的部分&#xff1a;slice 会根据指定的开始索引和结束索引提取数组的一部分。不包含…...

高防服务器价格高原因分析

高防服务器的价格较高&#xff0c;主要是由于其特殊的防御机制、硬件配置、运营维护等多方面的综合成本。以下从技术、资源和服务三个维度详细解析高防服务器昂贵的原因&#xff1a; 一、硬件与技术投入 大带宽需求 DDoS攻击通过占用大量带宽资源瘫痪目标服务器&#xff0c;因此…...

Linux安全加固:从攻防视角构建系统免疫

Linux安全加固:从攻防视角构建系统免疫 构建坚不可摧的数字堡垒 引言:攻防对抗的新纪元 在日益复杂的网络威胁环境中,Linux系统安全已从被动防御转向主动免疫。2023年全球网络安全报告显示,高级持续性威胁(APT)攻击同比增长65%,平均入侵停留时间缩短至48小时。本章将从…...