浅浅谈谈如何利用Javase+多线程+计算机网络的知识做一个爬CSDN阅读量总访问量的程序

目录

我们发现csdn的文章

首先为了印证我们的想法

我们用postman往csdn我们任意一篇文章发起post请求

发送请求

​编辑获得响应结果

我们发现我们的阅读量上涨

PostRequestSender类

但是我们经过测试发现

定义一个字符串数组 把URL放进去

然后延迟启动

在线程池里面设置任务的延迟和每次执行的间隔

主方法代码

博客的阅览量也在增长

然而为了防止被网站监测出来

我们可以采取其他策略

比如说往请求体里面塞一个随机数

注意不要写的太复杂 防止电脑卡爆

个人号推广

博客主页

Web后端开发

Web前端开发

数据库开发

项目实战

算法与数据结构

计算机基础

回忆录


我们发现csdn的文章

只要你点进去

就会增长阅读量

结合我们学习的计算机网络相关知识

不难猜测是只要向网页发送post请求

就能获得一次阅读量的增长。

POST请求是HTTP协议中的一种方法,用于向服务器提交数据,通常用于创建或更新资源,或者执行一些操作,比如提交表单数据、上传文件等。在Web开发中,POST请求比GET请求更安全,因为它将数据包含在请求体中,而不是像GET请求一样在URL中可见。

首先为了印证我们的想法

我们用postman往csdn我们任意一篇文章发起post请求

打开postman

发送请求

获得响应结果

我们发现我们的阅读量上涨

证实了我们的想法

我们只要往文章发送请求就行

利用网络编程的知识

我们写个发起请求的类

PostRequestSender类

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.Random;public class PostRequestSender {private String url;static long ans=0;public PostRequestSender(String url) {this.url = url;}public void sendPostRequest() throws IOException {// 创建URL对象URL obj = new URL(url);// 打开连接HttpURLConnection con = (HttpURLConnection) obj.openConnection();// 设置请求方法为POSTcon.setRequestMethod("POST");// 设置请求头con.setRequestProperty("User-Agent", "Java client");con.setRequestProperty("Content-Type", "application/json");// 可选:设置请求体Random random=new Random();int randomValue = random.nextInt(1000); // 生成一个0到999的随机整数String postData = "{\"key1\":\"value1\", \"key2\":\"" + randomValue + "\"}";con.setDoOutput(true);try (OutputStream os = con.getOutputStream()) {byte[] input = postData.getBytes(StandardCharsets.UTF_8);os.write(input, 0, input.length);}// 获取响应int responseCode = con.getResponseCode();System.out.println("Sending POST request to URL: " + url);System.out.println("Response Code: " + responseCode);System.out.println("run "+(ans++)+" ...");// 读取响应内容try (BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream(), StandardCharsets.UTF_8))) {String inputLine;StringBuilder response = new StringBuilder();while ((inputLine = in.readLine()) != null) {response.append(inputLine);}
//            System.out.println("Response Body: " + response.toString());}}
}

但是我们经过测试发现

在同一时间内连续发送多次post请求

只会记录一次阅读量

这说明

CSDN自带有反爬的程序

我们可以规定在1分钟内依次爬取100篇文章

定义一个字符串数组 把URL放进去

然后延迟启动

利用的是多线程的知识

创建线程池

在线程池里面设置任务的延迟和每次执行的间隔

我们遍历数组

主方法代码

import java.io.IOException;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;public class Main {public static void main(String[] args) throws Exception {String[] urls = {"https://blog.csdn.net/qq_30500575/article/details/139987333?spm=1001.2014.3001.5501","https://blog.csdn.net/qq_30500575/article/details/139962431?spm=1001.2014.3001.5501","https://blog.csdn.net/qq_30500575/article/details/139962247?spm=1001.2014.3001.5501","https://blog.csdn.net/qq_30500575/article/details/139926411?spm=1001.2014.3001.5501","https://blog.csdn.net/qq_30500575/article/details/139920678?spm=1001.2014.3001.5501","https://blog.csdn.net/qq_30500575/article/details/139920678?spm=1001.2014.3001.5501","https://blog.csdn.net/qq_30500575/article/details/139904327?spm=1001.2014.3001.5501","https://blog.csdn.net/qq_30500575/article/details/139904250?spm=1001.2014.3001.5501","https://blog.csdn.net/qq_30500575/article/details/139841808?spm=1001.2014.3001.5501","https://blog.csdn.net/qq_30500575/article/details/139841808?spm=1001.2014.3001.5501","https://blog.csdn.net/qq_30500575/article/details/139842155?spm=1001.2014.3001.5501","https://blog.csdn.net/qq_30500575/article/details/139857617?spm=1001.2014.3001.5501","https://blog.csdn.net/qq_30500575/article/details/139857996?spm=1001.2014.3001.5501","https://blog.csdn.net/qq_30500575/article/details/139858097?spm=1001.2014.3001.5501"// Add more URLs as needed};// 创建定时执行的线程池ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);// 循环访问多个网址,并每隔20秒执行一次for (String url : urls) {Runnable task = () -> {try {PostRequestSender sender = new PostRequestSender(url);sender.sendPostRequest();} catch (IOException e) {e.printStackTrace();}};// 初始延迟10秒,每隔50秒执行一次任务executor.scheduleAtFixedRate(task, 10, 50, TimeUnit.SECONDS);}// 等待所有任务完成后关闭线程池executor.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);executor.shutdown();}
}

启动 查看控制台信息

注意联网哦

依次爬取打印

博客的阅览量也在增长

同时还会打印状态码和URL地址

然而为了防止被网站监测出来

我们可以采取其他策略

比如说往请求体里面塞一个随机数

注意不要写的太复杂 防止电脑卡爆

个人号推广

博客主页

多多!-CSDN博客

Web后端开发

https://blog.csdn.net/qq_30500575/category_12624592.html?spm=1001.2014.3001.5482

Web前端开发

https://blog.csdn.net/qq_30500575/category_12642989.html?spm=1001.2014.3001.5482

数据库开发

https://blog.csdn.net/qq_30500575/category_12651993.html?spm=1001.2014.3001.5482

项目实战

https://blog.csdn.net/qq_30500575/category_12699801.html?spm=1001.2014.3001.5482

算法与数据结构

https://blog.csdn.net/qq_30500575/category_12630954.html?spm=1001.2014.3001.5482

计算机基础

https://blog.csdn.net/qq_30500575/category_12701605.html?spm=1001.2014.3001.5482

回忆录

https://blog.csdn.net/qq_30500575/category_12620276.html?spm=1001.2014.3001.5482

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

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

相关文章

SaaS架构Client/Server应用的实验室LIS系统源码,服务可拆分,功能易扩展

LIS系统,即实验室(检验科)信息系统,它是医院信息管理的重要组成部分之一,LIS系统采用了智能辅助功能来处理大信息量的检验工作,即LIS系统不仅是自动接收检验数据,打印检验报告,系统保…

Jboss通过未授权/弱口令进入后台上传webshell

目录 Jboss介绍 CVE-2007-1036 漏洞产生的原因 利用原理 访问页面 写入webshell 未授权访问后上传webshell 这一篇学习通过参考大佬的好文章学习Jboss的弱口令/未授权漏洞进入后台Getshell Jboss介绍 JBoss是一个基于J2EE的开放源代码应用服务器,代码遵循L…

python使用Pybind11扩展c++

Pybind11 是一个轻量级的C 库,旨在无缝地将C代码绑定到Python。它简化了C 函数、类和数据结构在Python中使用的过程,使得开发人员可以方便地在Python中调用C 代码,同时保留两者的性能优势下面将详细介绍Pybind11的基本概念、安装方法、用法以…

《梦醒蝶飞:释放Excel函数与公式的力量》6.2 TIME函数

6.2 TIME函数 1) TIME函数概述 TIME函数是Excel中用于根据指定的小时、分钟和秒返回时间值的内置函数。这个时间值是一个从0(12:00 AM)开始的序列数,其中一天的每个小时等于1/24,每分钟等于1/(24*60),每秒…

MySQL中的TRUNCATE命令是否直接删除文件

1. TRUNCATE命令的基本原理 命令格式:TRUNCATE TABLE table_name;功能:TRUNCATE命令用于删除表中的所有数据,但保留表结构和定义(如列、索引、约束等)。 2. TRUNCATE命令的实现机制 数据删除:TRUNCATE命…

【系统架构设计师】六、信息系统基础知识(电子政务|企业信息化|电子商务|信息化战略体系)

目录 一、电子政务EG 1.1 电子政务的内容 1.2 电子政务的主要特征 二、企业信息化EI 2.1 企业信息化实现 2.2 企业信息化方法 三、电子商务EC 四、信息化战略体系 五、客户关系CRM 5.1 CRM的功能 5.2 CRM解决方案具备的要素 5.3 CRM的实现过程 六、供应链管理SCM 七…

tensorflow神经网络

训练一个图像识别模型,使用TensorFlow,需要以下步骤。 1. 安装所需的库 首先,确保安装了TensorFlow和其他所需的库。 pip install tensorflow numpy matplotlib2. 数据准备 需要收集和准备训练数据。每个类别应有足够多的样本图像。假设有…

Flutter TIM 项目实现

目录 1. 服务端API 1.1 生成签名 1.1.1 步骤 第一步:获取签名算法 第二步:查看函数输入输出 第三步:nodejs 实现功能 1.1.2 验证签名 小结 1.2 Rest API 调用 1.2.1 签名介绍 1.2.2 腾讯接口 生成管理员 administrator 签名 包装一个 post 请求函数 查询账号 …

2734. 执行子串操作后的字典序最小字符串(Rust单百算法)

题目 给你一个仅由小写英文字母组成的字符串 s 。在一步操作中,你可以完成以下行为: 选择 s 的任一非空子字符串,可能是整个字符串,接着将字符串中的每一个字符替换为英文字母表中的前一个字符。例如,‘b’ 用 ‘a’…

人机融合的分布式

分布式系统是指通过多个互相连接但独立运行的节点共同完成任务的计算架构。分布式系统的拓展与生长是指通过增加更多独立节点来提升系统整体性能和容量,同时保持各节点间的协调与协作。 人机融合的分布式系统是一种强调人类和机器之间协同工作的计算架构&#xff0c…

001 线性查找(lua)

文章目录 迭代器主程序 迭代器 -- 定义一个名为 linearSearch 的函数,它接受两个参数:data(一个数组)和 target(一个目标值) function linearSearch(data, target) -- 使用 for 循环遍历数组 data&…

【高考志愿】通信工程

目录 一、专业概述 二、主要研究领域 三、就业前景与方向 四、专业难度与学习挑战 五、国内知名高校推荐 高考志愿选择通信工程专业是一个深思熟虑后极具前瞻性的决策,这一专业不仅拥有广泛的就业前景和深厚的学科基础,而且能够为学生提供丰富的知识…

反向代理服务器和正向代理服务器的介绍与区别

反向代理服务器之所以被称为“反向代理”,是因为它与传统的“正向代理”(或前向代理)服务器相对应。为了更好地理解这个概念,需要了解正向代理和反向代理的区别。 反向代理服务器和正向代理服务器的介绍与区别 一、正向代理服务器…

华为OD机试 - 石头剪刀布游戏(Java 2024 D卷 200分)

华为OD机试 2024D卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(D卷C卷A卷B卷)》。 刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测…

酷开科技丨酷开系统大屏购物 打造沉浸式购物体验

在这个信息化的时代,购物已经不仅仅局限于传统的线下店铺,线上购物逐渐成为了我们生活中重要的一部分。而大屏购物作为线上购物的一种形式,更是凭借其独特的优势和实用的技巧,成为了消费者们的新宠。随着科技的进步和消费者需求的…

如何在Java中实现安全编码

如何在Java中实现安全编码 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 在当今数字化和网络化的时代,安全编码成为软件开发中至关重要的一环。特…

vue3中使用keepalive和component

vue3和vue2中有些差异&#xff0c;直接上代码&#xff1a; <KeepAlive include"aComponent"><component :iscompList[active]goDetail"goDetail"back"back" /></KeepAlive> <script setup lang"ts"> /*** 将…

lumbda常用操作

文章目录 lumbda的常用操作将List<String>转List<Integer>filter 过滤max 和min将List<Object>转为Map将List<Object>转为Map&#xff08;重复key&#xff09;将List<Object>转为Map&#xff08;指定Map类型&#xff09; lumbda的常用操作 将Li…

解释一下泛型擦除的概念,并讨论它对 Java 类型系统的影响

泛型是Java语言中一个非常重要的特性&#xff0c;它允许你在类、接口和方法中使用类型参数&#xff0c;从而使得代码更加通用、灵活和类型安全。 然而&#xff0c;在Java中&#xff0c;泛型的实现方式有一个特殊之处&#xff0c;被称为“类型擦除”&#xff08;Type Erasure&a…

读AI新生:破解人机共存密码笔记13有益机器

1. 标准模型 1.1. 我们能控制一个从外太空来的超级智能实体的概率几乎为零 1.2. 随着根据标准模型设计的机器变得更加智能&#xff0c;以及它们的行动范围遍及全球&#xff0c;关闭机器这种方法越来越不可行 1.2.1. 机器将会追求它们自己的目标&#xff0c;无论目标错得多么…