多协程爬虫

爬虫并发及应用 HLSHLS(HTTP Live Streaming)是一种流媒体传输协议,最初由苹果公司开发并推出。它是一种基于HTTP的流媒体传输协议,旨在提供高质量的实时流媒体传输和适应不同网络条件的能力。HLS技术主要用于在互联网上实时传输音频和视频内容,通常用于直播活动、视频点播等场景。媒体分片(Media Segmentation):源视频或音频内容首先被分割成短小的媒体分片,通常每个分片持续几秒到十几秒不等。自适应码率(Adaptive Bitrate) 阅读详情

 

 

要实现异步的爬虫方式的话,需要用到多协程。

一.gevent库

同步的爬虫方式爬取这8个网站 :

 

import requests,time
#导入requests和time
start = time.time()
#记录程序开始时间

url_list = ['https://www.baidu.com/',
'https://www.sina.com.cn/',
'http://www.sohu.com/',
'https://www.qq.com/',
'https://www.163.com/',
'http://www.iqiyi.com/',
'https://www.tmall.com/',
'http://www.ifeng.com/']
#把8个网站封装成列表

for url in url_list:
#遍历url_list
    r = requests.get(url)
    #用requests.get()函数爬取网站
    print(url,r.status_code)
    #打印网址和抓取请求的状态码

end = time.time()
#记录程序结束时间
print(end-start)
#end-start是结束时间减去开始时间,就是最终所花时间。
#最后,把时间打印出来。

程序运行后,你会看到同步的爬虫方式,是依次爬取网站,并等待服务器响应(状态码为200表示正常响应)后,才爬取下一个网站。比如第一个先爬取了百度的网址,等服务器响应后,再去爬取新浪的网址,以此类推,直至全部爬取完毕。
异步方式爬取 :

 

from gevent import monkey
monkey.patch_all()
import gevent,time,requests

start = time.time()

url_list = ['https://www.baidu.com/',
'https://www.sina.com.cn/',
'http://www.sohu.com/',
'https://www.qq.com/',
'https://www.163.com/',
'http://www.iqiyi.com/',
'https://www.tmall.com/',
'http://www.ifeng.com/']

def crawler(url):
    r = requests.get(url)
    print(url,time.time()-start,r.status_code)

tasks_list = []

for url in url_list:
    task = gevent.spawn(crawler,url)
    tasks_list.append(task)
gevent.joinall(tasks_list)
end = time.time()
print(end-start)

通过每个请求运行的时间,我们能知道:爬虫用了异步的方式抓取了8个网站,因为每个请求完成的时间并不是按着顺序来的。比如在我测试运行这个代码的时候,最先爬取到的网站是搜狐,接着是凤凰,并不是百度和新浪。且每个请求完成时间之间的间隔都非常短,你可以看作这些请求几乎是“同时”发起的。通过对比同步和异步爬取最终所花的时间,用多协程异步的爬取方式,确实比同步的爬虫方式速度更快。

 

 

二.queue模块(创建多个爬虫)

当我们用多协程来爬虫,需要创建大量任务(假如我们要爬的不是8个网站,而是1000个网站,我们可以怎么做?)时,我们可以借助queue模块。
queue翻译成中文是队列的意思。我们可以用queue模块来存储任务,让任务都变成一条整齐的队列,就像银行窗口的排号做法。因为queue其实是一种有序的数据结构,可以用来存取数据。

 

 

 

from gevent import monkey
monkey.patch_all()
import gevent,time,requests
from gevent.queue import Queue

start = time.time()

url_list = ['https://www.baidu.com/',
'https://www.sina.com.cn/',
'http://www.sohu.com/',
'https://www.qq.com/',
'https://www.163.com/',
'http://www.iqiyi.com/',
'https://www.tmall.com/',
'http://www.ifeng.com/']

work = Queue()
for url in url_list:
    work.put_nowait(url)

def crawler():
    while not work.empty():
        url = work.get_nowait()
        r = requests.get(url)
        print(url,work.qsize(),r.status_code)

tasks_list  = [ ]

for x in range(2):
    task = gevent.spawn(crawler)
    tasks_list.append(task)
gevent.joinall(tasks_list)

end = time.time()
print(end-start)

 

 

 

 

【爬虫】使用多线程、多进程、多协程提升爬虫速度 本系列为自己学习爬虫的相关笔记,如有误,欢迎大家指正 要学习提升爬虫速度用到的知识,必须先熟悉并发和并行、同步和异步的概 一、并发和并行,同步和异步 并发和并行 并发(concurrency)和并行(parallelism)是两个相似的概念。并发是指在一个时间段内发生若干事件的情况,并行是指在同一时刻发生若干事件的情况。 使用单核CPU和多核CPU来说就是:在使用单核CPU时,多个工作任务是以并发的方式运行的,因为只有一个CPU,所以各个任务会分别占用CPU的一段时间依次执行。如果在自己分得的时间段没有. 阅读详情

相关推荐

Python爬虫中多线程、多进程、多协程的介绍和对比

前面咱们也写了好几篇爬虫的文章,都是些数据量不是很多的例子。那如果遇到数据量比较大的时候怎么办提高速度和效率呢。今天的这篇会给你答案。 一、线程、进程、协程的简介 1.同步、异步、并行、并发 同步:各个任务不是独自运行的,任务之间有一定的运行顺序 异步:各个任务是独立运行的,一个任务的运行不收另一个任务的影响 并行:同一时刻发生若干事情的情况 并发:同一时间段发生若干事情。 这里可能并行和并发...

梁先森的博客 1077

Python的多线程爬虫详解

Python 提供了两个支持多线程的模块,分别是 _thread 和 threading。其中 _thread 模块偏底层,它相比于 threading 模块功能有限,因此推荐大家使用 threading 模块。

Python966的博客 4395

Python高级特性与网络爬虫(四):异步多协程维护代理池

在做爬虫的时候,如果我们过于频繁地访问某个网站,可能会导致我们的ip被封掉,在这个时候我们需要代理来伪装自己的ip,网上的代理服务有很多,免费的和收费的都有。这些ip有的时候不太稳定,所以我们需要维护一个能够实时从代理服务网站上爬取代理ip并测试其是否可用,选取可用ip,这就需要爬取和测试一个代理池。这篇博文讲述的就是这样一个代理池的构造方法,主要涉及到的有python与redis缓存数据库的交互...

weixin_41977332的博客 772

提升爬虫效率:多线程,多进程,多协程

提升python爬虫效率

悦上心灵的博客 1432

多协程多个爬虫 [爬虫专题(15)]

引言 商业爬虫,爬取的数据量极为惊人。 如果按照之前的爬虫博客的爬取方法,效率是一点都不高的。 目录 多协程是什么 语法如何 小结 队列 今天上一波...

Debroon 396

《Python网络爬虫从入门到实践 第2版》第8章 提升爬虫的速度

第8章 提升爬虫的速度 通过前面7章的学习,相信读者已经能够从获取网页、解析网页、存储数据来实现一些基本的爬虫了。从本章开始,我们将进入爬虫的进阶部分,包括第8章到第13章。进阶部分的各章并没有先后顺序,对某一章感兴趣的读者可以直接跳到这章学习。 本章将介绍如何提升爬虫的速度,主要有3种方法:多线程爬虫、多进程爬虫和多协程爬虫。相对于普通的单线程爬虫,使用这3种方法爬虫的速度能实现成倍的提升。...

jxgy01的博客 189

爬虫扩展——多协程该咋说呢?模板教你学会

本文介绍了爬虫多线程使用的一些相关知识,并为大家提供了使用多线程的代码模板,希望对大家有用~~

weixin_53919192的博客 986

利用VBA宏实现LightTools仿真数据自动化导出至Excel

本文详细介绍了如何利用VBA宏实现LightTools仿真数据自动化导出至Excel的完整流程。通过调用LTAPI接口,工程师可以自动执行仿真、抓取照度与光强等数值数据、捕获并粘贴仿真图像,从而将重复性工作自动化,显著提升光学设计工作的效率和准确性。

weixin_28314575的博客 502

爬虫-------多协程

python 是一个脚本语言, 里面编写的代码是从头一行一行的执行,所以一般我们要等到它全部执行完,才能拿到我们要的数据。 一个爬虫爬取大量数据要爬很久,那我们能不能让多个爬虫一起爬取? 爬虫每发起一个请求,都要等服务器返回响应后,才会执行下一步。而很多时候,由于网络不稳定,加上服务器自身也需要响应时间,导致爬虫会浪费大量时间在等待上,这也是爬取大量数据时,爬虫的速度会比较慢的原因。 每台计算...

Nurbiya_K的博客 597

Python 使用Pygame库实现足球游戏:创建一个球员和一个足球,并使玩家能够控制球员的移动。游戏将包括碰撞检测、简单的物理模拟,以及基本的用户输入处理

本文将介绍如何使用Python和Pygame库创建一个简单的足球游戏。我们将搭建一个基本的游戏环境,创建一个球员和一个足球,并使玩家能够控制球员的移动。游戏将包括碰撞检测、简单的物理模拟,以及基本的用户输入处理。这个简单的足球游戏展示了Pygame的一些基本功能。虽然这是一个简单的游戏,但它包含了创建游戏循环、用户输入处理、物理模拟、碰撞检测等重要概念。

程序熊的博客 743

Python由放弃到网络爬虫六:《多协程的用法(gevent库的使用)》

多协程的用法 偶得一不错的爬虫教程,现博客分享,想要获取完整教程,加V:ff17328081445。文章为系列文章,持续更新,欢迎关注。 gevent库的应用 多协程能实现“让多个爬虫替我们干活”。 #!/usr/bin/python3 from gevent import monkey #从gevent库里导入monkey模块。 monkey.patch_all() #monkey.pat...

ff876409866的博客 596

深入解析mSATA与mini-PCIE接口的硬件设计要点

本文深入解析mSATA与mini-PCIE接口的硬件设计要点,涵盖信号定义、电源设计、高速信号处理及PCB布局布线等关键内容。通过实战案例和调试技巧,帮助工程师规避常见设计陷阱,提升电路设计效率,特别适合工业控制和嵌入式系统开发场景。

weixin_28741413的博客 317

Python 多协程爬虫

多协程爬虫 除了多线程和多进程外,Python的网络爬虫还可以使用协程(Coroutine) 协程是种用户态的轻量级线程,使用协程有众多好处: (1)第一个好处是协程像种在程序级别模拟系统级别的进程,由于是单线程,并且少了上下文切换,因此相对来说系统消耗很少,而且网上的各种测试也表明协程确实拥有惊人的速度。 (2)第二个好处是协程方便切换控制流,这就简化了编程模型。协程能保留上一次调用时的状态(所有局部状态的一个特定组合),每次过程重入时,就相当于进入了上一次调用的状态。 (3)第三个好处是协程的高扩展性和

化身孤岛的鲸o的博客 1712

RAG-Anything 实战指南:从零构建企业级多模态知识库

本文是RAG-Anything的实战指南,详细介绍了如何从零构建企业级多模态知识库。通过一体化框架,它能无差别解析文本、表格、图片、公式等多格式文档,并构建可深度理解和智能检索的知识图谱。指南涵盖了环境搭建、核心实战、智能查询及生产级部署优化,帮助企业将杂乱文档转化为智能知识大脑。

pandas7gardener的博客 242

KEGG数据库与KAAS工具:基因功能注释的实用指南

本文提供了使用KEGG数据库与KAAS工具进行基因功能注释的完整实用指南。详细阐述了如何从准备基因或蛋白序列开始,通过KAAS服务器获取KEGG Orthology(KO)编号,并解读注释结果。文章进一步介绍了如何利用KOBAS工具进行通路富集分析,将定性观察转化为定量洞察,并分享了提高注释准确率、处理大数据集及使用API等避坑技巧与高阶方法,为基因组学、转录组学研究者奠定坚实的数据分析基础。

weixin_29292535的博客 390

python多协程爬虫示例

写python协程时使用gevent模块和queue模块可以大大提高爬虫速度。在同时爬取多个网站时,原来用for循环一个网站一个网站按循序顺序爬,就像先烧饭后烧菜,两个步骤异步进行。使用多协程可以让爬虫自己选择爬取顺序,就像边烧饭边烧菜,两个步骤同步进行,速度自然快了。不多说了,来看下代码吧: from gevent import monkey monkey.patch_all() #打上多协程布...

chengduan37102900的博客 536

【智能流体力学】使用ANSYS Fluent + SpaceClaim + SCDM制作流体力学前处理的几何模型

生成来源.scdoc文件来自前处理工具生成的模型数据,或在 FLUENT 中创建和保存的模型。生成方式: 通过前处理工具导出网格数据,或在 FLUENT 中设置并保存模型。作用: 用于储存模型的结构信息和设置,确保在 FLUENT 中的正确导入和使用。.x_t文件是 Parasolid 文件格式的扩展名,用于存储三维模型数据。在 ANSYS Fluent 中,这种格式通常用于在前处理工具之间交换几何数据。要创建.x_t。

源代码杀手的博客 3265

简单的多协程小说爬虫

from gevent import monkey, joinall monkey.patch_all() # 重点 from random import randint from urllib.parse import quote from gevent.pool import Pool import requests from lxml import etree import os import time from re import match, findall def download_fun

Ch_Chenjs的博客 465

YOLOv9电力巡检实战:绝缘子破裂/鸟巢识别+无人机自动定位

摘要:本文聚焦电力输电线路巡检的效率与安全痛点,提出基于YOLOv9与无人机的智能巡检解决方案。针对绝缘子破裂、鸟巢等高危缺陷,通过“无人机改装-模型训练-缺陷识别-工单生成”四阶段工程落地流程,实现全自动化巡检。系统采用大疆M300无人机搭载RTK模块与Jetson边缘计算盒,结合改进YOLOv9模型实时识别5类缺陷,通过4G传输将GPS定位与缺陷数据同步至工单系统。实测表明,该方案巡检效率达50公里/天(较人工提升10倍),缺陷发现率95%(提升40%),事故预防率98%。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1511

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Python使用Asyncio协程以及多协程爬虫

Python使用Asyncio协程以及多协程爬虫的使用方法。 我们都知道python有一个GIL(全局解释器锁),因此虽然有Threading库,但那只是用来模拟多线程,因此Python的多线程也不能带来真正的并行。 所以要用python达到并发的效果,要么多进程(multiprocess),要么就是——多协程。 话说进程、线程、协程的区别应该也是面试重点了,值得一背~ 直接来说这篇文章的重点,协程。它涉及到Asyncio的基本使用方法,最后再附...

TranSad的博客 786

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

python协程池爬虫,python多协程爬虫示例

from gevent import monkeymonkey.patch_all()#打上多协程布丁,下面的程序就可以执行多协程了import requests,gevent,csvfrom gevent.queue import Queuefrom bs4 import BeautifulSoup#把所有URL都放到一个列表里:url_list=[]i=1for i in range(10):...

weixin_39551103的博客 173

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

python+多协程爬虫

本文介绍了一个基于gevent协程库的多协程网络爬虫实现。代码通过创建10个工作协程,从任务队列中获取URL进行并发抓取,主要功能是从特定网站采集影视信息(如名称、类型等)并保存到本地文件。实现包含请求头设置、xpath解析、异常处理等核心功能,使用Queue进行任务分发,通过gevent.spawn创建协程池。文章分析了代码的协程管理机制、队列实现方式,并给出了性能优化、异常处理和存储改进等方面的建议。该方案适合中等规模定向数据采集,展示了协程在爬虫应用中的高效并发处理能力。

Sunshine的博客 450

python爬虫基础Ⅳ——多协程:爬取食物热量

文章目录基础爬虫部分Ⅳ(1) 协程是什么(2) gevent库(3) 使用多协程1. 把程序设置为多协作式运行2. 定义爬取函数3. 用gevent.spawn()创建任务(4) queue模块和协程配合(5) 实例:爬取食物热量 基础爬虫部分Ⅳ (1) 协程是什么 我们前面爬取的数据都不算大,如果我们想要爬取的是成千上万条的数据,那么就会遇到一个问题:因为程序是一行一行依次执行的缘故,要等待很...

早睡早起 2731
上一篇: 倒排索引的原理
下一篇: 一些网站的反爬机制(持续补充中)
SpringBears
博客等级 码龄9年 2粉丝 73原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值