python多线程爬虫教学,清晰易懂。

2023-05-16

首先需要知道什么是多线程,多线程的作用。
首先举个例子,并发和并行:

并发:并发,在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。
并行:并行是指“并排行走”或“同时实行或实施”。在操作系统中是指,一组程序按独立异步的速度执行,不等于时间上的重叠(同一个时刻发生)。

例子:吃一碗米饭和菜。并发:一个人吃,吃完一口米饭再吃一口菜,切换速度快,感觉是同时进行的。并行:两个人吃,一人吃饭一人吃菜,真正的同时进行。

而Python的多线程本质就是并发,听起来是同时进行多个事情,但是微观上是进行一件事情的时间很短,然后在执行另一个事情,只是速度很快,让人看起来是同时进行的。

然后呢,为什么要多线程,Python有多线程和多进程,多协程,多进程就是并行,每一种都有自己适合的用途,比如爬虫,多线程就比多进程要好,但是多线程更复杂一些。例如你有一个网址,需要抓取详情页,在抓取详情页里面的很多内容,这个时候就可以在抓取详情页里的链接后用多线程一起抓取。

这里使用的模块是threading(),没下载的可以在命令行pip install threading

import threading
import time

class mythread(threading.Thread):
    def __init__(self,name,ls2):#参数根据自己的需要改变
        threading.Thread.__init__(self)#必须有的
        self.name=name
        self.ls2=ls2
    def run(self):#线程运行函数
        F1(self.name,self.ls2)#主要函数

先构造一个类,引用父类threading.Thread。

def F1(name,ls2):
    time.sleep(2)
    print('%s : %s : %s \n' % (name,time.ctime(time.time()),ls2))

上面这些都是多线程的初始设置方面,接下来就是启动和结束线程。

over=[]
#创建url列表
ls=[]
for i in range(30):
    ls.append(i)

for i in range(3):
    #列表分为三类
    ls2=[]
    a=len(ls)//3
    ls2.append(ls[i*a:i*a+a])
    #创建线程,并将分裂的url导入线程
    threadtext = mythread('线程'+str(i),ls2)#导入线程初始设置的参数
    threadtext.start()#启动线程
    over.append(threadtext)#将线程导入接下来结束的列表中

print('当前线程活动数为:'+str(threading.active_count()))
for i in over:
    i.join()#线程阻塞,使子线程在主线程结束前一直运行。

print('线程全部结束')

基本上格式就上面的那些,爬虫抓取数据的步骤可以写在一个函数里面,然后在run里面调用。

import time
import threading

class mythread(threading.Thread):
    def __init__(self,name,ls2):
        threading.Thread.__init__(self)
        self.name=name
        self.ls2=ls2
    def run(self):
        shiyan()
        F1(self.name,self.ls2)


def F1(name,ls2):
    time.sleep(2)
    print('%s : %s : %s \n' % (name,time.ctime(time.time()),ls2))


over=[]
#创建url列表
ls=[]
for i in range(30):
    ls.append(i)

for i in range(3):
    #列表分为三类
    ls2=[]
    a=len(ls)//3
    ls2.append(ls[i*a:i*a+a])
    #创建线程,并将分裂的url导入线程
    threadtext = mythread('线程'+str(i),ls2)
    threadtext.start()
    over.append(threadtext)

print('当前线程活动数为:'+str(threading.active_count()))
for i in over:
    i.join()

print('线程全部结束')
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python多线程爬虫教学,清晰易懂。 的相关文章

  • acc--›Android无障碍开发框架

    文章目录 前言框架介绍目标界面找到元素进行操作 系列文章联系作者 前言 针对Android无障碍开发 和使用场景 封装出来一个可以适用于各种场景的快速开发框架 框架介绍 无障碍的本质就是通过代码模拟人工操作 所以流程很明确 可以归纳为 目标
  • debian(Linux) gnome-control-center

    参考链接 xff1a http iokevins blogspot com 2015 09 gnome 3 system settings gnome control html 问题 今天在simba配置完成后 xff0c gnome co
  • KindEditor上传单个图片成功,页面却提示失败 —— 在Chrome新版本中不兼容的解决方案

    不得不说 xff0c 这个所谓的不兼容 xff0c 就是Chrome浏览器搞的鬼啊 我也不知道是我机子上的Chrome浏览器配置有问题还是怎么回事 xff0c 总之记录下来 xff0c 大家可以看看你们是不是也遇到了一样的问题 先上图 1
  • Zookeeper 应用

    数据发布 订阅 数据发布 订阅 xff08 Publish Subscribe xff09 系统 xff0c 即所谓的配置中 xff0c 顾名思义就是发布者将数据发布到ZooKeeper的 个或 系列节点上 xff0c 供订阅者进 数据订阅
  • ONVIF协议--ONVIF协议简介

    1 ONVIF简介 网络摄像机是网络设备 xff0c 需要有通讯协议 xff0c 早期的网络摄像机硬件提供商都采用私有协议 随着视频监控的网络化应用 xff0c 产业链的分工将越来越细 有些厂商专门做摄像头 xff0c 有些厂商专门做视频服
  • GB28181协议--GB28181协议简介

    1 GB T 28181 2016协议简介 近年来 xff0c 国内视频监控应用发展迅猛 xff0c 系统接入规模不断扩大 xff0c 涌现了大量平台提供商 xff0c 平台提供商的接入协议各不相同 xff0c 终端制造商需要给每款终端维护
  • 网络基础--UPnP基本原理

    1 简介 UPnP是通用即插即用 xff08 Universal Plug and Play xff09 的缩写 xff0c 主要用于设备的智能互联互通 xff0c 使用UPnP协议不需要设备驱动程序 xff0c 它可以运行在目前几乎所有的
  • 数学基础--高斯分布详解

    1 简介 正态分布 xff08 Normal Distribution xff09 xff0c 又名高斯分布 xff08 Gaussian Distribution xff09 xff0c 是一个在数学 物理及工程等领域都非常重要的概率分布
  • GB28181协议--流媒体的几种传输方式(UDP、TCP被动、TCP主动模式)

    1 简介 根据 GB T 28181 2016 4 3 1 5 2的要求 xff0c SIP和流媒体都应该支持TCP和UDP两种方式 如下图所示 xff1a 在附录F xff08 SDP 定义 xff09 中介绍了TCP支持主动模式和被动模
  • GB28181协议--校时

    1 简介 根据 GB T 28181 2016 7 10 9 10的要求 xff0c GB28181设备网络校时功能描述如下 xff1a 联网系统内的IP 网络服务器设备宜支持 NTP 见IETF RFC2030 协议的网络统一校时服务 网
  • GB28181协议--报警

    1 简介 根据 GBT 28181 2016 公共安全视频监控联网系统信息传输 交换 控制技术要求 9 4节的 报警事件通知和分发基本要求 描述 xff1a 发生报警事件时 源设备应将报警信息发送给 SIP 服务器 SIP 服务器接收到报警
  • AS--›Android Studio安装教程

    文章目录 前言下载官方智能下载地址官方手动下载地址 安装运行常见问题Android SDK安装JVM启动失败卡在启动页重装软件 推荐阅读联系作者 前言 android studio是Google官方推荐的Android开发工具 以前用的是E
  • GB28181协议--SIP协议介绍

    1 SIP协议简介 SIP xff08 Session Initiation Protocol xff0c 会话初始协议 xff09 是一个用于建立 更改和终止多媒体会话的应用层控制协议 xff0c 其中的会话可以是IP电话 多媒体会话或多
  • 代码管理--svnadmin工具介绍

    1 简介 SVNAdmin2 是一款通过图形界面管理服务端SVN的web程序 正常情况下配置SVN仓库的人员权限需要登录到服务器手动修改 authz 和 passwd 两个文件 xff0c 当仓库结构和人员权限上了规模后 xff0c 手动管
  • 深度学习--FAISS向量数据库

    简介 我们日常使用的各种 APP 中的许多功能 xff0c 都离不开相似度检索技术 比如一个接一个的新闻和视频推荐 各种常见的对话机器人 保护我们日常账号安全的风控系统 能够用哼唱来找到歌曲的听歌识曲 xff0c 甚至就连外卖配送的最佳路线
  • 腾讯云4核8G服务器性能怎么样?

    腾讯云4核8G云服务器的价位硬件配置性能指标怎么样 如何买便宜呢 4核8G云服务器是中大型商业网站及服务采用的实例规格 xff0c 能够 承载每日几十万浏览量的网站服务 当一个企业网站发展到这一程度的情况下 xff0c 针对云服务器成本费用
  • networkx画图

    使用networkx画图 xff0c 关键是掌握draw networkx edges draw networkx nodes和draw networkx labels三个方法的使用 xff0c 设置好位置列表 xff0c 节点列表 xff
  • virt-manager cannot open display

    解决方法 xff1a 1 vi etc ssh sshd config 2 找到 34 X11Forwarding no 34 修改为 34 X11Forwarding yes 34 3 service sshd restart 4 重启终
  • 【蓝牙模块】三款常用的基础蓝牙模块,HC05,JDY-31,CC2541介绍与测试说明

    文章目录 一 HC05二 JDY 311 介绍2 测试 二 CC2541 一 HC05 HC05与其他两款的区别是 xff0c 需要按住RST键进入AT指令模式 一 上电进入AT模式方法 先按住HC05蓝牙模块上面的RST按键 xff0c
  • #Ubuntu#SSH 新建虚拟机开启SSH服务

    由于Ubuntu默认未安装SSH服务 xff0c 所以需要通过联网下载安装SSH服务 前置条件 xff1a Ubuntu需要配置好网络地址 xff0c 并配置正确的DNS服务器 xff0c 能够正常上网 1 右键打开终端界面 xff0c 输

随机推荐

  • #Ubuntu#root 新建虚拟机怎么切换到root用户权限

    我现在新建了一台ubuntu xff0c 需要通过切换到root用户执行文件 xff0c 发现怎么切换都是失败的 通过su root命令 xff0c 输入普通用户的密码 xff0c 会显示认证错误 xff0c 百度了一下 xff0c 这是由
  • Gradle--›Spring Kotlin多模块项目搭建√

    文章目录 前言使用IntelliJ IDEA创建单模块工程搭建多模块环境创建主模块创建库模块 部署参考文档联系作者 前言 环境说明 工具版本IntelliJ IDEAUltimate 2021 1SpringBoot2 5 0Kotlin1
  • #华为 #usg 华为防火墙安全区域的概念

    简介 安全区域 xff08 Security Zone xff09 xff0c 或者简称为区域 xff08 Zone xff09 xff0c 是设备所引入的一个安全概念 xff0c 大部分的安全策略都基于安全区域实施 定义 一个安全区域是若
  • #VMware ESXI7.0的下载

    一 VMware ESXI7 0版本的下载 xff08 一 xff09 概述 VMware vSphere是VMware公司推出的服务器虚拟化解决方案 xff0c 包含两个重量级的产品 xff1a VMware ESXI和VMware vC
  • #VMware#ESXI 配置虚拟机服务器开机自启动

    目录 1 登录到esxi xff0c 配置管理模块 2 将虚拟机配置开机启动 3 返回主机管理界面 xff0c 完成配置 4 停电后重启主机 xff0c 查看并验证自启动是否生效 1 登录到esxi xff0c 配置管理模块 选择管理 系统
  • #VMware#ESXI ESXI如何修改管理IP

    目录 一 修改方法 1 进入硬件管理平台 2 登录虚拟控制台 二 实际操作 1 在主界面按 F2 并输入控制台界面root的密码 xff0c 进入设置界面 2 找到 configure Management Network 选项并按 Ent
  • #华为 #usg USG6000双链路透明部署实验(一)

    目录 一 实验背景 二 实验环境 三 实验步骤 1 在所有交换机创建对应vlan 2 在核心交换机创建网关 xff0c 所有的网段IP都是254 网段是10 10 10 0 24 10 10 13 0 24 3 配置接入交换机的管理IP x
  • #VMware#ESXI 修改主机的控制台HTTP/HTTPS端口

    目录 一 开启SSH服务 二 修改控制台的默认端口 1 关闭防火墙的情境下 xff1a 1 1 远程进入ESXI的后台 xff0c 修改HTTP端口配置文件 1 2 关闭ESXI防火墙 1 3 重启服务器 2 不关闭防火墙的情景下 xff1
  • #ESXI #Centos 业务服务器故障如何恢复盘

    一 环境描述 有一台centos7的业务服务器 xff0c 因为操作人员重大失误 xff0c 导致业务服务器宕机 xff0c 由于未做备份与快照 xff0c 无法进行恢复 xff0c 考虑通过将硬盘挂载在其他虚拟机上重新获取数据 设备环境为
  • pikachu 靶场搭建

    一 准备环境 1 搭建环境 win 10phpstudypikachu 2 下载链接 win10自行寻找资源 pickchu靶机下载地址 xff1a https github com zhuifengshaonianhanlu pikach
  • virtualbox命令行启动虚拟机和关闭虚拟机和虚拟机关闭防火墙

    查看virtualbox正在运行的虚拟机命令 VBoxManage list runningvms 根据查到的虚拟机 ip 号 使用后台命令启动虚拟机的方法 xff1a VBoxManage startvm ip 使用后台命令关闭虚拟机的方
  • android studio 最新3.0 kotlin与databinding 结合使用报错。

    最近android studio 3 0更新 xff0c 迫不及待将项目中的代码向kotlin转 其中转到有databinding的时候遇到报错 xff1a Unresolved reference databinding 找到网上解决办法
  • AS--›Android Studio内存大小设置和插件推荐(2021-1-14更新)

    调整AS的占用内存 多开工程毫无压力 AS 3 5 的版本 已经支持通过设置界面修改内存大小了 但是 旧方法依旧有效 文章目录 Windows修改方法MAC修改方法插件推荐 ignore A Search with GithubTransl
  • android Camera预览界面拉伸问题解决

    问题现象 项目中的扫一扫界面打开以后 xff0c 扫描二维码的界面显示的二维码被拉伸 xff0c 图片如下 xff1a 问题原因 通常 xff0c 拍照预览页面的视图拉伸主要与下面两个因素有关 xff1a Surfaceview的大小Cam
  • 什么是 AOP,AOP 的作用是什么?

    分析 amp 回答 AOP的介绍 AOP全称 xff08 Aspect Oriented Programming xff09 面向切片编程的简称 AOP面向方面编程基于IoC xff0c 是对OOP的有益补充 xff1b AOP利用一种称为
  • Ubuntu图形界面卡死的解决方法

    转到字符界面 xff1a Ctrl 43 Alt 43 F1 查看进程 xff1a ps t tty7 找到Xorg进程的PID号xxx xff0c 如992 杀死进程Xorg xff1a kill xxx xff08 这里是kill 99
  • 笔记本电脑电源指示灯亮但是黑屏开不了机(或者成功开机之后发现很卡顿)的解决方法

    问题描述 本人电脑是联想拯救者Y7000P xff0c 性能如下 近期遇到一个问题 xff0c 笔记本电脑开机的之后 xff0c 突然出现卡顿 xff0c 不管是打开浏览器还是打开软件 xff0c 都要等上几秒钟 xff0c 连刷新都要等一
  • windows下的WSL开发环境配置以及相关工具、插件

    最近在自己的X1上捣鼓Django框架的编程 xff0c windows环境使用起来确实让人痛苦 xff0c 因此决定还是在Linux系统下进行Django框架的编程 xff0c 跟朋友交流了一下 xff0c 最终敲定了以下方案并把中间使用
  • 最全spring框架工作流程

    Spring执行流程 xff1a 用户发起请求到前端控制器 xff08 DispatcherServlet xff09 xff0c 该控制器会过滤出哪些请求可以访问Servlet 哪些不能访问 就是url pattern的作用 xff0c
  • python多线程爬虫教学,清晰易懂。

    首先需要知道什么是多线程 xff0c 多线程的作用 首先举个例子 xff0c 并发和并行 xff1a 并发 xff1a 并发 xff0c 在操作系统中 xff0c 是指一个时间段中有几个程序都处于已启动运行到运行完毕之间 xff0c 且这几