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

python第一个多进程爬虫

使用 multiprocessing 模块实现多进程爬取股票网址买卖数据的基本思路是:

  1. 定义爬虫函数,用于从一个或多个股票网址上抓取数据。
  2. 创建多个进程,每个进程执行爬虫函数,可能针对不同的股票或不同的网页。
  3. 使用 multiprocessing.Queue 或 multiprocessing.Manager() 管理共享数据结构,以便进程间可以共享爬取的数据。

以下是一个简化的示例,展示如何使用 multiprocessing 模块和 requests 库来实现多进程爬取股票数据:

# encoding:utf-8
import sys,os,copy,time,traceback,copy
import multiprocessing
# from queue import Queue
import pandas as pd
from loguru import logger
sys.path.append("..")
from QhSetting import QHJSPATH
from QhSpiderObj import QhDFSpider
from QhCsvMode import QHDFDBJSON,QhPdCsvUnique
from QhSpiderTool import QhDbPathJieXiIsMkdir,QhDfDateSort,QhSouHuJiaoYiDate,QhNotNaNdf,\QhDfWeiYiZhi,QhGetTimes
from QhSpiderTool import QhStarEndTime 
from QhInterFace import _QhDfMaiMAIDetails,_QhDBToCsvdef worker(num):print(f'Worker: {num}')# @QhStarEndTime
def QhDfMaiMAIDetailsForM(QhCodeList,QhQueue,QhIsCsv=False):"""作者:阙辉功能:获取每日买卖明细"""# QhCsvPath = QHDFDBJSON["QhDfAllStock"]["QhCsvPath"]# QhCsvPath = QhDbPathJieXiIsMkdir(QhCsvPath,QHJSPATH)# QhCsvName = QHDFDBJSON["QhDfAllStock"]["QhCsvName"]# QhCsvPath = "{}\{}".format(QhCsvPath,QhCsvName)# QhOldCsvDf = pd.read_csv(QhCsvPath,encoding='gbk')# QhOldCsvDf.set_index('股票代码',drop=False,inplace=True)   #重置索引并保留原列  要先设置所以 否则无法使用at方法# QhOldCsvDf = QhOldCsvDf[QhOldCsvDf["交易板块"].isin(["上证A股","深证A股","北证A股","科创板","创业板"])]#[:10]QhUniqueValue = QHDFDBJSON["_QhDfMaiMAIDetails"]["QhUniqueValue"]QhJiaoYiDateD = QhSouHuJiaoYiDate()[2]    # 获取交易日期('YYYY','YYYY-MM','YYYY-MM-DD')QhCsvPath = QHDFDBJSON["_QhDfMaiMAIDetails"]["QhCsvPath"]QhCsvName0 = QHDFDBJSON["_QhDfMaiMAIDetails"]["QhCsvName"]QhCsvName = QhCsvName0.format(QhJiaoYiDateD)QhCsvPathF0 = QHDFDBJSON["_QhDfMaiMAIDetails"]["QhCsvPathF"]QhCsvNameF0 = QHDFDBJSON["_QhDfMaiMAIDetails"]["QhCsvNameF"]QhCsvPath = QhDbPathJieXiIsMkdir(QhCsvPath,QHJSPATH)QhCsvPath = "{}\{}".format(QhCsvPath,QhCsvName)print(QhCsvPath)QhI = 0for QhRow in QhCodeList:try:QhCode01 = QhRow[0]QhShiChang = QhRow[1]QhCsvPathF = copy.deepcopy(QhCsvPathF0)QhCsvNameF = QhCsvNameF0.format(QhCode01)QhCsvPathF = QhDbPathJieXiIsMkdir(QhCsvPathF,QHJSPATH)QhCsvPathF = "{}\{}".format(QhCsvPathF,QhCsvNameF)QhCode = QhCode01.replace("Q","")QhCodes = QhShiChangsecid ="{}.{}".format(QhCodes,QhCode)QhJieGuoRowDf = _QhDfMaiMAIDetails(QhSecid=secid)QhJieGuoRowDf["交易日期01"] = QhJiaoYiDateDQhQueue.put(QhJieGuoRowDf)print(QhJieGuoRowDf)# 将数据添加后面if QhI == 0:QhJieGuoDfNew = QhJieGuoRowDf.copy(deep=True) else:try:  # 兼容旧版本处理QhJieGuoDfNew = QhJieGuoDfNew._append(QhJieGuoRowDf)except:QhJieGuoDfNew = QhJieGuoDfNew.append(QhJieGuoRowDf)_QhDBToCsv(QhCsvPathF,QhUniqueValue,QhJieGuoRowDf,QhDateSort="",QhIsCsv=True)QhI = QhI + 1except:QhErrMsg = traceback.print_exc()logger.error("【买卖竞价数据】获取失败,报错消息\n{QhErrMsg}!QueHui!".format(QhErrMsg=QhErrMsg))_QhDBToCsv(QhCsvPath,QhUniqueValue,QhJieGuoDfNew,QhDateSort="",QhIsCsv=True)QhI = QhI + 1# 存储_QhDBToCsv(QhCsvPath,QhUniqueValue,QhJieGuoDfNew,QhDateSort="",QhIsCsv=QhIsCsv)return QhJieGuoDfNew
if __name__ == '__main__':# processes = []# for i in range(5):  # 创建5个进程#     p = multiprocessing.Process(target=worker, args=(i,))#     processes.append(p)#     p.start()  # 启动进程# for process in processes:#     process.join()  # 等待进程结束QhCsvPath = QHDFDBJSON["QhDfAllStock"]["QhCsvPath"]QhCsvPath = QhDbPathJieXiIsMkdir(QhCsvPath,QHJSPATH)QhCsvName = QHDFDBJSON["QhDfAllStock"]["QhCsvName"]QhCsvPath = "{}\{}".format(QhCsvPath,QhCsvName)QhOldCsvDf = pd.read_csv(QhCsvPath,encoding='gbk')QhOldCsvDf.set_index('股票代码',drop=False,inplace=True)   #重置索引并保留原列  要先设置所以 否则无法使用at方法QhOldCsvDf = QhOldCsvDf[QhOldCsvDf["交易板块"].isin(["上证A股","深证A股","北证A股","科创板","创业板"])][:500]QhOldCsvList = []for index, row  in QhOldCsvDf.iterrows():# print(row)QhOldCsvListRow = []QhCode = row["股票代码"]QhOldCsvListRow.append(QhCode)QhShiChang = row["市场代码"]QhOldCsvListRow.append(QhShiChang)QhOldCsvList.append(QhOldCsvListRow)qh_group_count = 100processes = []QhQueueList = []QhTotalTimes = QhGetTimes(len(QhOldCsvList),qh_group_count = qh_group_count)QhManager = multiprocessing.Manager()QhQueue = QhManager.Queue()  # 设置队列上限为3QhStart = 0for QhRow in range(1,QhTotalTimes+1):QhPa = QhOldCsvList[QhStart:QhRow*qh_group_count]print(QhPa)QhStart = QhRow*qh_group_count p = multiprocessing.Process(target=QhDfMaiMAIDetailsForM, args=(QhPa,QhQueue,False))processes.append(p)# QhQueueList.append(QhQueue)p.start()  # 启动进程for process in processes:process.join()  # 等待进程结束

相关文章:

python第一个多进程爬虫

使用 multiprocessing 模块实现多进程爬取股票网址买卖数据的基本思路是: 定义爬虫函数,用于从一个或多个股票网址上抓取数据。创建多个进程,每个进程执行爬虫函数,可能针对不同的股票或不同的网页。使用 multiprocessing.Queue …...

在Ubuntu 18.04上安装和配置Ansible的方法

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 简介 配置管理系统旨在简化对大量服务器的控制,适用于管理员和运维团队。它们允许您从一个中央位置以自动化的方式控制许多…...

【详细教程】如何使用YOLOv10进行图片与视频的目标检测

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推…...

LLM大语言模型-AI大模型全面介绍

简介: 大语言模型(LLM)是深度学习的产物,包含数十亿至数万亿参数,通过大规模数据训练,能处理多种自然语言任务。LLM基于Transformer架构,利用多头注意力机制处理长距离依赖,经过预训…...

瑜伽馆管理系统的设计

管理员账户功能包括:系统首页,个人中心,管理员管理,教练管理,用户管理,瑜伽管理,套餐管理,体测报告管理,基础数据管理 前台账户功能包括:系统首页&#xff0…...

JAVA【案例5-2】模拟默认密码自动生成

【模拟默认密码自动生成】 1、案例描述 本案例要求编写一个程序,模拟默认密码的自动生成策略,手动输入用户名,根据用户名自动生成默认密码。在生成密码时,将用户名反转即为默认的密码。 2、案例目的 (1&#xff09…...

小区业主管理系统

摘 要 随着城市化进程的加速和人口的不断增加,小区的数量也在不断增加。小区作为城市居民居住的主要场所,其管理工作也变得越来越重要。传统的小区业主管理方式存在诸多问题,如信息传递不畅、业务处理效率低下等。因此,开发一个高…...

vncsever ,window 远程ubuntu远程界面安装方式,VNC Viewer安装教程+ linux配置server 操作

linux 端安装 # 安装VNC 服务器软件 sudo apt install autocutsel # 剪切黏贴操作支持的包 sudo apt-get install tightvncserver # 安装的是 VNC 服务器软件,用于远程桌面访问 # 安装Xfce桌面环境 sudo apt-get install xfce4 xfce4-goodies #安装的是 XFCE 桌…...

java spring boot 单/多文件上传/下载

文章目录 使用版本文件上传服务端客户端(前端)方式一方式二 文件下载服务端客户端(前端) 代码仓库地址 使用版本 后端 spring-boot 3.3.0jdk17 前端 vue “^3.3.11”vite “^5.0.8”axios “^1.7.2” 文件上传 上传文件比较…...

C语言的内存函数

1. memcpy使⽤和模拟实现 1 void * memcpy ( void * destination, const void * source, size_t num ); • 函数memcpy从source的位置开始向后复制num个字节的数据到destination指向的内存位置。 • 这个函数在遇到 \0 的时候并不会停下来。 • 如果source和destination有任…...

【网络通信】计算机网络安全技术总结

一、概述 在数字时代的浪潮下,计算机网络安全技术已成为保护数据完整性和安全性的基石。这项技术不仅是计算机科学的重要组成部分,也是应对各种网络威胁和挑战的关键手段。 二、核心技术和应用 2.1 加密技术 作为网络安全技术的核心,加密技…...

Redis-实战篇-什么是缓存-添加redis缓存

文章目录 1、什么是缓存2、添加商户缓存3、前端接口4、ShopController.java5、ShopServiceImpl.java6、RedisConstants.java7、查看Redis Desktop Manager 1、什么是缓存 缓存就是数据交换的缓冲区(称为Cache),是存贮数据的临时地方&#xff…...

《妃梦千年》第十一章:再遇故人

第十一章:再遇故人 宫中的局势暂时平静下来,但林清婉知道,危险随时可能卷土重来。她必须不断提升自己,才能在这复杂的环境中保护自己和皇上。一天,林清婉正在寝宫中读书,忽然收到了一封信。信中只有短短几…...

反序列化底层学习

反序列化底层学习 前言 以前也是懒得学,觉得没有必要,学到现在发现好多东西都需要学习java的底层,而且很多漏洞都是通过反序列化底层挖出来的,比如weblogic的一些绕过,我这里也主要是为了学习weblogic来学习的&#…...

项目训练营第五天

项目训练营第五天 后端代码优化 通用异常处理类编写 Data public class BaseResponse<T> implements Serializable {int code;T data;String message null;String description null;public BaseResponse(int code, T data, String message, String description) {th…...

数据收集和数据分析

数据分析和收集是一个多步骤的过程&#xff0c;涉及到不同的方法和思维构型。 以下是一些常见的数据收集方法和数据分析的思维模式&#xff1a; ### 数据收集方法&#xff1a; 1. **调查问卷**&#xff1a; 通过设计问卷来收集定量或定性数据。&#xff08;质量互变规律里面…...

Kubernetes(K8s)从入门到精通系列之十九:Operator模式

Kubernetes K8s从入门到精通系列之十九&#xff1a;Operator模式 一、动机二、Operators in Kubernetes三、Operator示例四、部署Operator五、使用Operator六、编写自己的operator Operator 是 Kubernetes 的软件扩展&#xff0c;它利用自定义资源来管理应用程序及其组件。 Ope…...

vuex的actions返回结果类型是promise及actions方法互相调用

this.$store.dispatch(‘logout’)返回的结果是Promise类型的 调用成功的情况下&#xff0c;返回状态为fulfilled&#xff0c;值为undefined。 所以可以直接进行.then操作&#xff1a; this.$store.dispatch(logout).then((result) > {console.log(result); });因为 Vuex …...

【干货】Jupyter Lab操作文档

Jupyter Lab操作文档1. 使用须知2. 定制化Jupyter设置主题显示代码行数设置语言更多设置 3. 认识Jupyter界面4. 初用Jupyter运行调试格式化查看源码 5. 使用Jupyter Terminal6. 使用Jupyter Markdown7. 上传下载文件&#xff08;云服务器中的Jupyter Lab&#xff09;上传文件到…...

iOS分享到微信,配置Universal Links,并从微信打开app,跳转到指定界面

iOS分享到微信之后&#xff0c;需要从微信浏览器直接打开app&#xff0c;跳转到指定界面&#xff0c;这个时候最主要的就是分以下几步(微信sdk集成就不说了) 1.配置Universal Links Universal Links是iOS新系统出来后通用链接&#xff0c;用于在第三方浏览器直接打开app&…...

ncmdumpGUI:3分钟掌握网易云音乐ncm格式转换的终极方案

ncmdumpGUI&#xff1a;3分钟掌握网易云音乐ncm格式转换的终极方案 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换&#xff0c;Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 你是否曾经在网易云音乐下载了心爱的歌曲&a…...

LangGraph 并发执行不是开 Goroutine 那么简单:状态竞争与事务处理

LangGraph 并发执行不是开 Goroutine 那么简单:状态竞争与事务处理深度解析 元数据 关键词:LangGraph, 大语言模型工作流, 有状态并发, 状态一致性, 事务处理, 多Agent系统, 分布式状态管理 摘要:很多开发者初次接触LangGraph的并发特性时,会下意识将其等同于传统协程/线程…...

10分钟掌握Autovisor:智慧树网课自动化学习的完整解决方案

10分钟掌握Autovisor&#xff1a;智慧树网课自动化学习的完整解决方案 【免费下载链接】Autovisor 2025智慧树刷课脚本 基于Python Playwright的自动化程序 [有免安装版] 项目地址: https://gitcode.com/gh_mirrors/au/Autovisor 还在为繁重的智慧树网课任务而烦恼吗&am…...

C语言结构体、枚举、联合体:从内存布局看区别,新手避坑指南

C语言结构体、枚举、联合体&#xff1a;从内存布局看区别&#xff0c;新手避坑指南 在C语言开发中&#xff0c;结构体、枚举和联合体是构建复杂数据模型的三大基石。但很多开发者在实际项目中常遇到这样的困惑&#xff1a;为什么结构体占用的内存比预期大&#xff1f;枚举变量在…...

如何用Sunshine打造个人游戏云:终极自托管游戏串流解决方案

如何用Sunshine打造个人游戏云&#xff1a;终极自托管游戏串流解决方案 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine 你是否曾经梦想在任何设备上畅玩PC游戏&#xff1f;无论是想…...

CircuitPython状态灯、安全模式与文件系统故障排查实战指南

1. 项目概述与核心价值 如果你正在用CircuitPython做项目&#xff0c;无论是物联网传感器节点、智能穿戴设备还是互动艺术装置&#xff0c;大概率都遇到过这样的瞬间&#xff1a;板子上的RGB状态灯突然开始闪烁诡异的颜色&#xff0c;或者电脑上那个熟悉的 CIRCUITPY U盘图标…...

基于Kubernetes Lease构建分布式部署锁:解决CI/CD环境下的资源竞争

1. 项目概述&#xff1a;从“clawfight”看一场被遗忘的社区技术博弈看到“2019-02-18/clawfight”这个标题&#xff0c;很多人的第一反应可能是困惑。它不像一个标准的软件项目名&#xff0c;没有清晰的版本号&#xff0c;也没有指明具体的技术栈。但恰恰是这种看似随意的命名…...

Kubernetes上Jenkins全栈部署:动态Agent与生产环境调优指南

1. 项目概述&#xff1a;一个面向Kubernetes的Jenkins全栈部署方案在容器化和云原生技术成为主流的今天&#xff0c;如何高效、稳定地部署和管理持续集成/持续交付&#xff08;CI/CD&#xff09;流水线&#xff0c;是每个开发团队和运维工程师必须面对的课题。传统的单体Jenkin…...

基于Electron的ChatGPT桌面客户端开发:架构、功能与进阶实践

1. 项目概述&#xff1a;一个开源桌面客户端的诞生与价值如果你和我一样&#xff0c;在日常开发、写作或者处理一些需要深度思考的任务时&#xff0c;经常需要和ChatGPT这样的AI助手对话&#xff0c;那你一定对在浏览器里反复切换标签页、刷新页面、管理冗长的对话历史感到厌烦…...

番茄小说下载器终极指南:3分钟打造你的私人数字图书馆

番茄小说下载器终极指南&#xff1a;3分钟打造你的私人数字图书馆 【免费下载链接】fanqienovel-downloader 下载番茄小说 项目地址: https://gitcode.com/gh_mirrors/fa/fanqienovel-downloader 你是否曾在深夜追更小说时&#xff0c;突然发现网络连接中断&#xff1f;…...