『python爬虫』17. 线程池和进程池以及线程池实战(保姆级图文)

news2024/11/30 2:33:40

目录

    • 1. 线程池和进程池解决的是调度问题
    • 2. 线程池
    • 3. 线程池实战:爬取西游记的标题
    • 总结


欢迎关注 『python爬虫』 专栏,持续更新中
欢迎关注 『python爬虫』 专栏,持续更新中

1. 线程池和进程池解决的是调度问题

⽹站的数据太多了,有⼀万多⻚,⼀万多个url.,我们设计多线程的时候如果每个url对应⼀个线程就,会浪费资源,可能2个url对应一个线程,可能有些url爬取的数据少,3个url对应一个线程,这种调度的问题很麻烦。

线程池: 一次性开辟一些线程. 我们用户直接给线程池子提交任务. 线程任务的调度交给线程池来完成。

进程池的内容和线程池类似,下面只介绍线程池。


2. 线程池

# 线程池: 一次性开辟一些线程. 我们用户直接给线程池子提交任务. 线程任务的调度交给线程池来完成
from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor

def fn(name):
    for i in range(1000):
        print(name, i)


if __name__ == '__main__':
    # 创建线程池
    with ThreadPoolExecutor(50) as t:#50个线程
        for i in range(100):#100个任务由线程池分配给50个线程执行
            t.submit(fn, name=f"线程{i}")#把任务提交给线程池t
    # 等待线程池中的任务全部执行完毕. 才继续执行(守护)
    print("执行结束")

3. 线程池实战:爬取西游记的标题

其实这种有先后顺序要求的内容,线程池无法保证正确序列,还需要一些方法保证顺序,其实这里用线程池有点不恰当,仅供学习参考。

# 1. 如何提取单个页面的数据
# 2. 上线程池,多个页面同时抓取
import codecs

import requests
from lxml import etree
import csv
from concurrent.futures import ThreadPoolExecutor

f = open("data.csv", mode="w", encoding="gbk")#gbk防止乱码中文

csvwriter = csv.writer(f)

def download_one_page(url):
    # 拿到页面源代码
    resp = requests.get(url)
    #print(resp.apparent_encoding)#utf-8
    resp.encoding = "utf-8"#解析时得到的数据是utf-8
    html = etree.HTML(resp.text)
    title = html.xpath("/html/body/div[2]/div[1]/main/section/header/h2/text()")
    print(title)

    csvwriter.writerow(title)
    print(url, "提取完毕!")


if __name__ == '__main__':
    # for i in range(1, 14870):  # 效率及其低下
    #     download_one_page(f"http://www.xinfadi.com.cn/marketanalysis/0/list/{i}.shtml")

    # 创建线程池
    with ThreadPoolExecutor(50) as t:
        for i in range(0, 100):  # 199 * 20 = 3980
            # 把下载任务提交给线程池
            t.submit(download_one_page, f"https://xiyouji.5000yan.com/{19830+i}.html")
    print("全部下载完毕!")

在这里插入图片描述

在这里插入图片描述


总结

大家喜欢的话,给个👍,点个关注!给大家分享更多计算机专业学生的求学之路!

版权声明:

发现你走远了@mzh原创作品,转载必须标注原文链接

Copyright 2023 mzh

Crated:2023-3-1

欢迎关注 『python爬虫』 专栏,持续更新中
欢迎关注 『python爬虫』 专栏,持续更新中
『未完待续』


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

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

相关文章

典型随机噪声激励

1.按噪声的起源分类 根据噪声的起源,分为内部噪声和外部噪声。 内部噪声:来源于系统内部的涨落运动或被检测信号,如布朗粒子受到周围液体分子的无规则碰撞即为内部噪声; 外部噪声:来自系统所处外部环境的随机涨落&…

endNote X9 导入英文文献(谷歌学术、web of science 等)

文章目录 1 导入英文文献(谷歌学术、web of science 等)2 EndNote X9 插入参考文献常见问题总结3 EndNote X9 快速上手教程(毕业论文参考文献管理器) 1 导入英文文献(谷歌学术、web of science 等) 谷歌学术…

Vite如何实现秒级依赖预构建的能力

大家都知道, Vite是一个提倡 no-bundle 的构建工具,相比于传统的 Webpack,能做到开发时的模块按需编译,而不用先打包完再加载。这一点我们在快速上手这一节已经具体地分析过了。 需要注意的是,我们所说的模块代码其实分为两部分,一部分是源代码,也就是业务代码,另一部…

线性代数——特征值与特征向量的性质

(1)设A为方阵,则A与 A T A^{T} AT有相同的特征值。 此处用到了两个关键性质,一:单位阵的转置为其本身,二:转置并不改变行列式的值。 (2): 设n阶方阵A( a i j…

汽车电子的电磁兼容性分析

随着电子技术的不断发展,新技术越来越多的应用到汽车领域,因此各个电子装置和电子控制系统必须相互适应,这就是电磁兼容性(EMC)要求。为了保证汽车可靠性,设计师必须在早期设计阶段分析电磁兼容性问题。目前市场上推出了一些电磁兼…

jdk20-虚拟线程简单了解

普通线程 JDK中的普通线程和操作系统线程是一对一关系的,存在映射关系;由操作系统进行调度,线程过多,会引起操作系统频繁调度,导致线程上下文切换太过频繁,反而会降低系统性能;线程越多&#x…

即时通讯私有化部署有哪些优势?企业在选择时需要考虑哪些因素?

即时通讯私有化部署是一种将即时通讯系统部署在企业的私有服务器上,以保护企业的信息安全和隐私。相比于使用Saas部署即时通讯应用程序,私有化部署可以更好地保护企业的机密信息,避免信息泄露的风险。 在即时通讯私有化部署中,企业…

半导体热处理设备微环境中的精密微正压控制解决方案

摘要:针对半导体热处理设备微环境中的微正压精密控制,本文分析了现有技术造成微正压控制不稳定的原因,提出了相应的解决方案。解决方案主要是采用绝对电容真空计替代压差计,采用真空低漏率的高速电动针阀和电动球阀替代气体质量流…

【Python 正则表达式】零基础也能精通的正则表达式学习路线与参考资料

文章目录 一、正则表达式基础二、进阶知识三、优秀实践参考资料: 一、正则表达式基础 正则表达式是一种用来描述字符模式的语言,它可以用来匹配、查找、替换字符串中的文本。在Python中,我们可以使用re模块来操作正则表达式。 正则表达式基…

MATLAB三维曲面作图(三)特殊效果的绘图(灯光)

首先,我们来绘制一个海螺的复杂图形 close all t linspace(0,2*pi,512); [u v] meshgrid(t); a -0.4; b 0.5; c 0.1; n 3; x (a*(1-v/(2*pi)).*(1cos(u))c).*cos(n*v); y (a*(1-v/(2*pi)).*(1cos(u))c).*sin(n*v); z b*v/(2*pi)a*(1-v/(2*pi)).*sin(u); s…

RabbitMQ详解(五):过期时间TTL、死信队列、磁盘监控

过期时间TTL(Time To Live) 过期时间TTL表示可以对消息设置预期的时间,在这个时间内都可以被消费者接收获取;过了之后消息将自动被删除。 目前有两种方法可以设置 第一种方法是通过队列属性设置,队列中所有消息都有…

App报毒-Google Play保护机制,已屏蔽不安全的应用

一、概述 解决安卓app在海外国际版本如:华为、OPP/VIVO、小米和荣耀报毒问题.触发Google Play保护机制. 安卓app报毒爆红,vivo手机爆红,oppo小米华为荣耀手机报毒,手机安装app时提示报毒,有的app是刚打包出来、有的是用…

Cocos Creator 3.7.3 正式上线,渲染管线和算法持续更新

Cocos Creator 3.7.3 正式发布。该版本对近日用户反馈的一系列关键性问题进行了集中修复,也对一部分性能进行了优化,提升了用户体验,建议所有 v3.x 用户升级。 Engine Features Render Graph 自定义渲染管线支持 GLES 后端Deprecate addRast…

【C++】五一假期,我学会了C++类和对象 ( 看完这篇你也能学会 ~ )

文章目录 ☑️前言✅类和对象【🏆上篇🏆】一. 面向过程和面向对象初步认识二. 与类的完美邂逅❤️1. 类的引入2. 类的定义 三. 增进与类的距离❤️1. 类的访问限定符及封装1.1. 访问限定符1.2. 封装【⭐重大思想⭐】 2. 类的作用域3. 类的实例化 四. 类对…

专访惠众科技|元宇宙应用如何借助3DCAT实时云渲染实现流畅大并发呈现?

当前互联网流量红利已经逐渐消失,营销同质化愈发严重。在这样的背景下,催生了以为元宇宙 焦点的虚拟产业经济。元宇宙在各行各业中以不同形式快速萌生、成长,呈现出多元化的应用场景。尤其是众多品牌,将元宇宙视为品牌建设与营销新…

JavaScript - 进阶+高级(笔记)

前言 给孩子点点关注吧!😭 本篇文章主要记录以下几部分: 进阶: 作用域;函数进阶(函数提升、函数参数、箭头函数);解构赋值;对象进阶(构造函数、实例成员、静…

算法记录 | Day57 动态规划

647.回文子串 思路: 1.确定dp数组(dp table)以及下标的含义: 布尔类型的dp[i][j]:表示区间范围[i,j] (注意是左闭右闭)的子串是否是回文子串,如果是dp[i][j]为true,否…

【前端】实际开发案例

文章目录 1. 侧边栏2. 调查报告3. 显示隐藏遮罩案列4. 鼠标经过,图片放大5. 奔跑的熊6. 旋转木马7. 百度换肤8. tab栏切换9. 下拉菜单10. 发布留言11. 动态生成表格12. 图片跟随鼠标移动13. 按键输入内容14. 定时器实现15. 发送短信16. 5秒后跳转页面17. 获取URL参数…

Ajax + axios + 常用状态码(笔记)

Ajax 求关注😭 一、客户端与服务器相关的概念 1.1 客户端与服务器 1.1.1 服务器 服务器: 负责 存放 和 对外提供 资源 的 电脑本质: 就是一台电脑,只不过 性能 要比别的电脑 高 1.1.2 客户端 客户端: 在上网过程…

【HttpRunner3】一分钟生成测试用例

【大家好,我是爱干饭的猿,本文重点介绍HttpRunner概念、设计思想和理念、环境搭建、一分钟生成测试用例和脚手架快速创建。 后续会继续分享其他重要知识点总结,如果喜欢这篇文章,点个赞👍,关注一下吧】 上…