基于python多线程多进程爬虫的maa作业站技能使用分析

基于python多线程多进程爬虫的maa作业站技能使用分析

技能使用分析
在这里插入图片描述

多线程(8核)

import json
import multiprocessing
import requests
from multiprocessing.dummy import Pooldef maa(st):url = "https://prts.maa.plus/copilot/get/"m = 1out = {}for i in range(st[0], st[0] + st[1]):print(i, "运行进度:" + str(m) + "/" + str(st[1]))m += 1skills = requests.get(url=url + str(i)).json()if skills["status_code"] == 200:try:content = skills["data"]["content"]opers = json.loads(content)["opers"]for j in opers:if j["name"] not in out:out[j["name"]] = [0, 0, 0]if "skill" in j:out[j["name"]][j["skill"] - 1] += 1except:passelse:continueprint(out)return outstart = 20000
end = 46625
pn = multiprocessing.cpu_count()  # 线程数
selist = []
print(int((end - start) / pn))
for i in range(0, pn):selist.append([start + int((end - start) / pn) * i, int((end - start) / pn)])
print(selist)
# 创建线程池,调用下载函数
print(multiprocessing.cpu_count())
pool = Pool(pn)
re = pool.map(maa, selist)
# 关闭线程池
pool.close()
pool.join()
print(re)
addout = {}
for i in re:for j in i:if j not in addout:addout[j] = [0, 0, 0]addout[j][0] += i[j][0]addout[j][1] += i[j][1]addout[j][2] += i[j][2]
print(addout)
with open('data.json', 'w', encoding='utf-8') as f:json.dump(addout, f, ensure_ascii=False, indent=4)

json处理

import json
with open('data.json', 'r', encoding='utf-8') as file:data = json.load(file)
print(data)
out = {}
for i in data:if i + "1技能" not in out:out[i + "1技能"] = 0if i + "2技能" not in out:out[i + "2技能"] = 0if i + "3技能" not in out:out[i + "3技能"] = 0out[i+"1技能"] += data[i][0]out[i + "2技能"] += data[i][1]out[i + "3技能"] += data[i][2]
out = sorted(out.items(),key=lambda x:x[1],reverse=True)
for i in out:print(i)

多线程模式(容易死机)

import json
import multiprocessing
import requests
from multiprocessing.dummy import Pool
import threadingdef fetch_title(url, results, index):try:out = {}global progressglobal total_workskills = requests.get(url).json()if skills["status_code"] == 200:try:print(skills["data"]["id"])with lock:progress += 1print(f"Progress: {progress}/{total_work}")content = skills["data"]["content"]opers = json.loads(content)["opers"]for j in opers:if j["name"] not in out:out[j["name"]] = [0, 0, 0]if "skill" in j:out[j["name"]][j["skill"] - 1] += 1except:passresults[index] = outexcept:passdef maa(st):url = "https://prts.maa.plus/copilot/get/"threads = []results = [None] * st[1]urls = []for i in range(st[0],st[0]+st[1]):urls.append(url+str(i))# 为每个URL创建一个线程for i, url in enumerate(urls):t = threading.Thread(target=fetch_title, args=(url, results, i))t.start()threads.append(t)# 等待所有线程完成for t in threads:t.join()# print(results)return resultsprogress = 0
lock = threading.Lock()
start = 20000
end = 46625
total_work = end - start + 1
pn = multiprocessing.cpu_count()  # 线程数
selist = []
print(int((end - start) / pn))
for i in range(0, pn):selist.append([start + int((end - start) / pn) * i, int((end - start) / pn)])
print(selist)
# 创建线程池,调用下载函数
print(pn)
pool = Pool(pn)
re = pool.map(maa, selist)
# 关闭线程池
pool.close()
pool.join()
print(re)
addout = {}
for i in re[0]:for j in i:if j not in addout:addout[j] = [0, 0, 0]addout[j][0] += i[j][0]addout[j][1] += i[j][1]addout[j][2] += i[j][2]
print(addout)
with open('data.json', 'w', encoding='utf-8') as f:json.dump(addout, f, ensure_ascii=False, indent=4)

出场率分析(单作业)
在这里插入图片描述
出场率分析(结合访问量)
在这里插入图片描述
出场率分析代码

import requestsfirst_num = 20000
limit = 50
page = 1
url = "https://prts.maa.plus/copilot/query?desc=true&limit=%d&page=%d&order_by=id"
last_url = "https://prts.maa.plus/copilot/query?desc=true&limit=1&page=1&order_by=id"
result = {}
model = 0  # 0 计数,1 热度
if model == 0:txt_name = "result_num.txt"
else:txt_name = "result_view.txt"last_get = requests.get(last_url).json()
print(last_get)
last_num = last_get['data']['data'][0]['id']
print("maa最新ID:" + str(last_num))for i in range(1, (last_num - first_num) // limit):print("第%d次请求" % i)maa_json = requests.get(url % (limit, i)).json()print(maa_json)if maa_json["status_code"] == 200 and (not maa_json['data']['data'] == []):for j in range(0, limit - 1):if j < len(maa_json['data']['data']):maa_id = str(maa_json['data']['data'][j]['id'])# print("maa://" + maa_id + " 请求成功")content = eval(maa_json['data']['data'][j]['content'], {"true": True, "false": False, "null": None})maa_opers = content['opers']for m in maa_opers:if m['name'] in result and model == 1:result[m['name']] += maa_json['data']['data'][j]['views']elif m['name'] in result and model == 0:result[m['name']] += 1elif (not m['name'] in result) and model == 1:result[m['name']] = maa_json['data']['data'][j]['views']else:result[m['name']] = 1# print(result)with open(txt_name, "w", encoding="utf-8") as f:for n in result:f.write(str(n) + str(result[n]) + "\n")maa_groups = content  # ['groups']可能没有groups# print(maa_groups)else:breakelse:print(str(i) + "请求失败")breakresult = sorted(result.items(), key=lambda x: x[1], reverse=True)
print(result)
with open(txt_name, "w", encoding="utf-8") as f:for n in result:f.write(str(n) + "\n")

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

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

相关文章

2025.2.8——一、[护网杯 2018]easy_tornado tornado模板注入

题目来源&#xff1a;BUUCTF [护网杯 2018]easy_tornado 目录 一、打开靶机&#xff0c;整理信息 二、解题思路 step 1&#xff1a;分析已知信息 step 2&#xff1a;目标——找到cookie_secret step 3&#xff1a;构造payload 三、小结 一、打开靶机&#xff0c;整理信…

深度学习里面的而优化函数 Adam,SGD,动量法,AdaGrad 等 | PyTorch 深度学习实战

前一篇文章&#xff0c;使用线性回归模型逼近目标模型 | PyTorch 深度学习实战 本系列文章 GitHub Repo: https://github.com/hailiang-wang/pytorch-get-started 本篇文章内容来自于 强化学习必修课&#xff1a;引领人工智能新时代【梗直哥瞿炜】 深度学习里面的而优化函数 …

番外篇:寄人篱下的岁月

在小冷的记忆深处&#xff0c;有一段时光如同一幅陈旧却又色彩浓烈的画卷&#xff0c;被岁月的尘埃轻轻覆盖着。那是他小时候&#xff0c;在二姨家度过的一年。这段经历&#xff0c;在他的生命中刻下了深深的印记&#xff0c;成为了他成长路上一段难以忘怀的过往&#xff0c;其…

腾讯混元3D创作引擎:一站式AI 3D创作平台的深度解析

在当今数字化的时代,3D内容创作正逐渐成为各行各业不可或缺的一部分。从游戏开发到影视制作,再到教育和广告行业,3D技术的应用场景日益广泛。然而,传统的3D创作往往需要大量的时间和技能积累,这使得许多非专业人士望而却步。为了打破这一壁垒,腾讯于2025年1月21日正式发布…

Chrome谷歌多开教程:实用方法与工具

不管是电子商务、技术测试、空投等不同专业领域&#xff0c;还是个人的工作和生活账号管理&#xff0c;使用不同的独立账户往往需要借助Chrome谷歌浏览器多开来提高效率。Chrome谷歌多开有哪些方法和工具&#xff1f;可以来参考以下实用内容。 一、Chrome谷歌多开方法与工具 1…

数据库操作与数据管理——Rust 与 SQLite 的集成

第六章&#xff1a;数据库操作与数据管理 第一节&#xff1a;Rust 与 SQLite 的集成 在本节中&#xff0c;我们将深入探讨如何在 Rust 中使用 SQLite 数据库&#xff0c;涵盖从基本的 CRUD 操作到事务处理、数据模型的构建、性能优化以及安全性考虑等方面。SQLite 是一个轻量…

Android原生开发问题汇总

Fragment顶部出现一个白条怎么办&#xff1f;父类布局搞事情。 layer-list被拉伸问题 Android之 ImageView android:src和tools:src的区别是什么? Android运行时权限的总结&#xff0c;以及EasyPermissions框架的使用 Android Studio添加EasyPemissions Android中module怎…

【AI实践】Cursor上手-跑通Hello World和时间管理功能

背景 学习目的&#xff1a;熟悉Cursor使用环境&#xff0c;跑通基本开发链路。 本人背景&#xff1a;安卓开发不熟悉&#xff0c;了解科技软硬件常识 实践 基础操作 1&#xff0c;下载安装安卓Android Studio 创建一个empty project 工程&#xff0c;名称为helloworld 2&am…

深度解析DeepSeek模型系列:从轻量级到超大规模(附DeepSeek硬件配置清单)

在人工智能领域&#xff0c;深度学习模型的选择对于任务的执行效率和精度至关重要。DeepSeek模型系列提供了多种不同参数量的版本&#xff0c;以满足不同场景下的需求。本文将详细解析DeepSeek模型系列的特点、适用场景以及硬件需求。 DeepSeek模型系列概览 DeepSeek模型系列…

LeetCodeHot 100 第一天

哈希组 1、两数之和使用的是HashMap&#xff0c;如果数字数目比较小可以使用数组作为Hash表&#xff0c;HashMap使用的函数市put&#xff0c;get&#xff0c;containsKey。 2、遇到判断字母异位词首先进行排序&#xff0c;本质上就是找字母异位词的共同之处&#xff0c;也就是…

讯飞绘镜(ai生成视频)技术浅析(五):视频生成

讯飞绘镜(AI生成视频)是一种先进的AI视频生成技术,能够将静态的分镜画面转换为动态视频,并使画面中的元素按照一定的逻辑和动作进行动态展示。 一、讯飞绘镜视频生成技术概述 讯飞绘镜的视频生成技术主要包含以下几个核心模块: 1.视频生成模型:包括生成对抗网络(GAN)…

LabVIEW铅酸蓄电池测试系统

本文介绍了基于LabVIEW的通用飞机铅酸蓄电池测试系统的设计与实现。系统通过模块化设计&#xff0c;利用多点传感器采集与高效的数据处理技术&#xff0c;显著提高了蓄电池测试的准确性和效率。 ​ 项目背景 随着通用航空的快速发展&#xff0c;对飞机铅酸蓄电池的测试需求也…

JVM虚拟机以及跨平台原理

相信大家已经了解到Java具有跨平台的特性&#xff0c;即“一次编译&#xff0c;到处运行”&#xff0c;例如在Windows下编写的程序&#xff0c;无需任何修改就可以在Linux下运行&#xff0c;这是C和C很难做到的。 那么&#xff0c;跨平台是怎样实现的呢&#xff1f;这就要谈及…

重新刷题求职2-DAY7

1.454. 四数相加 II 给你四个整数数组 nums1、nums2、nums3 和 nums4 &#xff0c;数组长度都是 n &#xff0c;请你计算有多少个元组 (i, j, k, l) 能满足&#xff1a; 0 < i, j, k, l < nnums1[i] nums2[j] nums3[k] nums4[l] 0 示例 1&#xff1a; 输入&#…

如何用大语言模型提高工作效率

软件工程师对大型语言模型&#xff08;LLM&#xff09;的看法存在严重分歧。许多人认为它们是迄今为止对该行业最具变革性的技术。另一些人则认为它们不过是又一个炒作过度的产品&#xff1a;想想很兴奋&#xff0c;但最终对从事严肃工作的专业人士来说毫无用处。 就我个人而言…

CSP晋级组比赛生成文件夹与文件通用代码Python

快速生成文件夹与文件的脚本 import sys import osmyfiles sys.argv[1::] for f in myfiles:os.mkdir(f)os.system(f"touch {f}/{f}.in")os.system(f"touch {f}/{f}.out")os.system(f"touch {f}/{f}.cpp")with open("template.cpp",…

基于STM32校车安全监控系统的设计(论文+源码+实物

1 方案设计 根据设计要求&#xff0c;本设计校车安全监控系统的设计以STM32F103单片机作为主控制器&#xff0c;通过MQ传感器实现异常气体的检测&#xff0c;当异常气体浓度异常时会通过继电器打开车窗进行通风&#xff0c;以保证舒适的环境&#xff0c;通过红外传感器用于监测…

Vite 打包原理

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

基于yolo的视频检测分析

基于yolo的视频检测分析 分步骤实现视频处理、目标检测与追踪、动作分析、计数逻辑&#xff0c;然后整合成API 完整的解决方案&#xff0c;包含视频分析逻辑和API封装&#xff0c;使用Python、YOLOv8和FastAPI实现代码如下&#xff1a; python代码实现 import os import uu…

探索C语言:寻找数组中连续1的最大长度

在编程的世界里&#xff0c;我们常常会遇到各种有趣的算法问题&#xff0c;今天让我们来深入剖析一段C语言代码&#xff0c;它的功能是在给定的整数数组中找出连续1的最大长度。 一、代码功能概述 这段代码定义了一个名为 findMaxConsecutiveOnes 的函数&#xff0c;它接受一个…