Python 爬虫:多进程,多线程爬虫<提高爬取效率>

关于多进程,多线程的知识,请自行查询资料补充· ~~~~~~~~~~~

使用多进程:

在python中,使用多进程需要先导包:

from threding import Threaddef work(name):for i in range(1000):print(f"我是线程:{name}, {i}")if __name__ == "__main__":for i in range(10):# 创建 十个线程t = Thread(target=work, args=(f"线程{i}",))t.start()

但是以上不推荐使用,

我们可以模拟一个场景, 例如 你来银行办理业务: 银行提供了5个窗口, 相当于开了5个线程, 而客户就是任务, 如果客户有100个,那么每个人都依次排队去办理业务, 这样我们就要写一个很复杂的检测系统, 所以, 这里直接使用线程池, 使用线程池就可以避免这种情况的发生:

使用线程池可以自动的帮我们来完成检测,调度等操作,我们只需要将任务交给线程池即可。

懒得讲,自己看吧·······

import requests
from lxml import etree
import time
from multiprocessing import Queue  # 队列
from multiprocessing import Process  # 进程
from concurrent.futures import ThreadPoolExecutorfrom fake_useragent import UserAgentdef get_ua():ua = UserAgent()return ua.randomdef get_img_url(q):""" 获取图片的url, 将url塞入队列 """url = f"https://www.doutupk.com/"resp = requests.get(url, headers={"User-Agent": get_ua()})tree = etree.HTML(resp.content)img_urls = tree.xpath('//li[@class="list-group-item"]/div[@class="pic-content text-center"]/div/a/img[2]/@data-original')for img_url in img_urls:print(img_url)# 把拿到的img_url 塞入队列q.put(img_url)  # 固定的q.put("滚蛋吧.没了")  # 结束的一个消息def download_img(url):# 如何下载一张图片resp = requests.get(url, headers={"User-Agent": get_ua()})# 文件名称file_name = url.split("/")[-1]with open("./img/" + file_name, mode="wb") as f:f.write(resp.content)print("一张图片下载完成")# 第二个进程. 只负责下载图片
def img_process(q):  # 从队列中提取url. 进行下载""" 下载图片 """with ThreadPoolExecutor(10) as t:  # ?while 1:  # 这边不确定有多少个. 那就一直拿img_url = q.get()  # 没有问题. 这里面, get是一个阻塞的逻辑if img_url == '滚蛋吧.没了':break# 在进程中开启多线程(唐马儒)t.submit(download_img, img_url)if __name__ == '__main__':# 准备队列q = Queue()  # 主进程 水p1 = Process(target=get_img_url, args=(q,))  # 单独开辟一个内存 阿大p2 = Process(target=img_process, args=(q,))  # 单独开辟一个内存 阿二p1.start()p2.start()p1.join()  # 主进程等待子进程跑完p2.join()  # 主进程等待子进程跑完

 

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

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

相关文章

Hadoop3:Yarn容量调度器配置多队列案例

一、情景描述 需求1: default队列占总内存的40%,最大资源容量占总资源60%,hive队列占总内存的60%,最大资源容量占总资源80%。 二、多队列优点 (1)因为担心员工不小心,写递归死循环代码&#…

科研与英文学术论文写作指南——于静老师课程

看到了一个特别棒的科研与英文学术论文写作指南,理论框架实例。主讲人是中科院信息工程研究所的于静老师。推荐理由:写论文和读论文或者讲论文是完全不一样的,即使现在还没有发过论文,但是通过于老师的课程,会给后续再…

Unity之创建与导出PDF

内容将会持续更新,有错误的地方欢迎指正,谢谢! Unity之创建与导出PDF TechX 坚持将创新的科技带给世界! 拥有更好的学习体验 —— 不断努力,不断进步,不断探索 TechX —— 心探索、心进取! 助力快速…

订单服务-提交订单业务立即购买业务

文章目录 1、提交订单 业务2、在 OrderController 创建 submitOrder 方法3、 在 OrderServiceImpl 中实现 submitOrder 方法4、根据id查询sku详情(service-product")5、查询用户地址保存到订单项中(service-user)6、删除购物…

udp发送数据如果超过1个mtu时,抓包所遇到的问题记录说明

最近在测试Syslog udp发送相关功能,测试环境是centos udp头部的数据长度是2个字节,最大传输长度理论上是65535,除去头部这些字节,可以大概的说是64k。 写了一个超过64k的数据(随便用了一个7w字节的buffer)发送demo,打…

USB-SC-09编程电缆使用手册

USB-SC-09编程电缆是通过电脑的USB口仿真成传统串口(俗称COM口),从而使用现有的各种编程软件、通信软件和监控软件等,转换盒上的发光二极管指示数据的收发状态,本电缆适用于三菱FX全系列PLC USB-SC-09电缆外观&#xf…

【AIGC评测体系】大模型评测指标集

大模型评测指标集 (☆)SuperCLUE(1)SuperCLUE-V(中文原生多模态理解测评基准)(2)SuperCLUE-Auto(汽车大模型测评基准)(3)AIGVBench-T2…

【python - 数据】

一、序列 序列(sequence)是一组有顺序的值的集合,是计算机科学中的一个强大且基本的抽象概念。序列并不是特定内置类型或抽象数据表示的实例,而是一个包含不同类型数据间共享行为的集合。也就是说,序列有很多种类&…

Python数据可视化书籍推荐:利用Python进行数据分析

《利用Python进行数据分析》 这本书几乎是数据分析入门必读书了 主要介绍了python 3个库numpy(数组),pandas(数据分析)和matplotlib(绘图)的学习 阅读本书可以获得一份关于在Python下操作、处…

2024“国培“来也UiBot6.0 RPA数字机器人开发综合应用

前言 (本博客中会有部分课程ppt截屏,如有侵权请及请及时与小北我取得联系~) 国培笔记: 依次读取数组中每个元素 输出调试信息 [ value=[ "vivian", value[0] "老师", "上午好,O(∩_∩)O哈哈~" ], v…

Ozon、美客多补单测评黑科技:打造无懈可击的自养号补单环境

不管哪个跨境平台的风控都会做升级,相对的补单技术也需要进行相应的做升级,风控升级后,自己养号补单需要注意以下技术问题,以确保补单的稳定性和安全性: 一、物理环境 1. 硬件参数伪装:平台已经开始通过I…

在手机上也能开发软件?而且只需要用几句话就可以自动生成一个应用!

随着人工智能技术的飞速发展,软件开发的门槛正在迅速降低。 曾几何时,开发一款软件需要精通编程语言和掌握复杂的开发工具,而如今,只需几句话的描述,便能在手机上轻松开发出功能齐全的软件。 这一切的背后&#xff0…

Steam夏促怎么注册 Steam夏促账号注册教程

随着夏日的炙热渐渐充斥着每一个角落,Steam平台也赶来添热闹,推出了一系列让人眼前一亮的夏季促销活动。如果你也是游戏爱好者,我们肯定不能错过这次的steam夏促。正直本次夏日促销有着很多的游戏迎来史低和新史低,有各种各样的游…

VSCode里python代码不扩展/级联了的解决办法

如图 解决办法:重新下载新的扩展工具 步骤如下 1、在左边工具栏打开Extensions 2、搜索框输入python,选择别的扩展工具,点击Install - 3在扩展工具所在的目录下,新建一个文件,就可以用了

如何通过指纹浏览器使用代理IP?

1.指纹浏览器定义 指纹浏览器是 一种浏览器技术,它根据用户设备的硬件、软件和配置等特征生成唯一标识符(称为“指纹”)。此指纹用于识别和追踪用户身份,即使用户更改其 IP 地址或清除浏览器数据(如缓存和 Cookie&…

PyCharm远程开发

PyCharm远程开发 1- 远程环境说明 每个人的本地电脑环境差别很大。各自在自己电脑上开发功能,测试/运行正常。但是将多个人的代码功能合并,运行服务器上,会出现各种版本兼容性问题。 在实际企业中,一般会有两套环境。第一套是测…

Jenkins教程-13-参数化任务构建

上一小节我们学习了发送html邮件测试报告的方法,本小节我们讲解一下Jenkins参数化任务构建的方法。 很多时候我们需要根据不同的条件去执行构建,如自动化测试中执行test、stg、prod环境的构建,Jenkins是支持参数化构建的。 以下是Jenkins官…

【C++】using namespace std 到底什么意思

📢博客主页:https://blog.csdn.net/2301_779549673 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 📢本文作为 JohnKi 的学习笔记,引用了部分大佬的案例 📢未来很长&a…

【C++】多态详解

💗个人主页💗 ⭐个人专栏——C学习⭐ 💫点击关注🤩一起学习C语言💯💫 目录 一、多态概念 二、多态的定义及实现 1. 多态的构成条件 2. 虚函数 2.1 什么是虚函数 2.2 虚函数的重写 2.3 虚函数重写的两个…

实战项目——用Java实现图书管理系统

前言 首先既然是管理系统,那咱们就要实现以下这几个功能了--> 分析 1.首先是用户分为两种,一个是管理员,另一个是普通用户,既如此,可以定义一个用户类(user),在定义管理员类&am…