python用爬虫实战Future

【python】async异步编程 async异步编程 阅读详情

实现下载功能,顺序执行

sites = [
    'https://www.tutorialspoint.com/python/index.htm',
    'https://www.w3schools.com/python/default.asp',
    'https://realpython.com/tutorials/python/',
    'https://www.programiz.com/python-programming/tutorial',
    'https://pythonbasics.org/learn-python/',
    'https://www.learnpython.org/',
    'https://www.datacamp.com/community/tutorials/python-data-science-handbook',
    'https://www.codecademy.com/learn/learn-python',
    'https://python-course.eu/python3_tutorial.php'
    'https://docs.python.org/3/tutorial/index.html'
]
import requests
import time

def download_one(url):
    resp = requests.get(url)
    print('Read {} from {}'.format(len(resp.content), url))
    
def download_all(sites):
    for site in sites:
        download_one(site)

def main():
    start_time = time.perf_counter()
    download_all(sites)
    end_time = time.perf_counter()
    print('Download {} sites in {} seconds'.format(len(sites), end_time - start_time))
    
if __name__ == '__main__':
    main()
Read 190716 from https://www.tutorialspoint.com/python/index.htm
Read 360091 from https://www.w3schools.com/python/default.asp
Read 135028 from https://realpython.com/tutorials/python/
Read 79647 from https://www.programiz.com/python-programming/tutorial
Read 3082 from https://pythonbasics.org/learn-python/
Read 31649 from https://www.learnpython.org/
Read 15536 from https://www.datacamp.com/community/tutorials/python-data-science-handbook
Read 604652 from https://www.codecademy.com/learn/learn-python
Read 26062 from https://python-course.eu/python3_tutorial.phphttps://docs.python.org/3/tutorial/index.html
Download 9 sites in 32.739756299999996 seconds

改用多线程

import concurrent.futures
import requests
import threading
import time

def download_one(url):
    resp = requests.get(url)
    print('Read {} from {}'.format(len(resp.content), url))


def download_all(sites):
    with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:
        executor.map(download_one, sites)

def main():
    start_time = time.perf_counter()
    download_all(sites)
    end_time = time.perf_counter()
    print('Download {} sites in {} seconds'.format(len(sites), end_time - start_time))

if __name__ == '__main__':
    main()

Read 3082 from https://pythonbasics.org/learn-python/
Read 190716 from https://www.tutorialspoint.com/python/index.htm
Read 31649 from https://www.learnpython.org/Read 79647 from https://www.programiz.com/python-programming/tutorial

Read 15538 from https://www.datacamp.com/community/tutorials/python-data-science-handbook
Read 607295 from https://www.codecademy.com/learn/learn-python
Read 360091 from https://www.w3schools.com/python/default.asp
Read 26062 from https://python-course.eu/python3_tutorial.phphttps://docs.python.org/3/tutorial/index.html
Read 135028 from https://realpython.com/tutorials/python/
Download 9 sites in 43.716087200000004 seconds

增加future

import concurrent.futures
import requests
import time

def download_one(url):
    resp = requests.get(url)
    print('Read {} from {}'.format(len(resp.content), url))
    return resp.content

def download_all(sites):
    with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:
        to_do = []
        for site in sites:
            future = executor.submit(download_one, site)
            to_do.append(future)
            
        for future in concurrent.futures.as_completed(to_do):
            future.result()
            #print(future.result())
            
def main():
    start_time = time.perf_counter()
    download_all(sites)
    end_time = time.perf_counter()
    print('Download {} sites in {} seconds'.format(len(sites), end_time - start_time))

if __name__ == '__main__':
    main()

Read 3082 from https://pythonbasics.org/learn-python/
Read 190716 from https://www.tutorialspoint.com/python/index.htm
Read 15560 from https://www.datacamp.com/community/tutorials/python-data-science-handbook
Read 31649 from https://www.learnpython.org/
Read 79647 from https://www.programiz.com/python-programming/tutorial
Read 604638 from https://www.codecademy.com/learn/learn-python
Read 26062 from https://python-course.eu/python3_tutorial.phphttps://docs.python.org/3/tutorial/index.html
Read 135028 from https://realpython.com/tutorials/python/
Read 360091 from https://www.w3schools.com/python/default.asp
Download 9 sites in 25.880217799999997 seconds

使用协程来跑

import asyncio
import aiohttp
import time
import ssl

async def download_one(url):
    ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)  # 尝试指定不同的 SSL 版本
    ssl_context.check_hostname = False
    ssl_context.verify_mode = ssl.CERT_NONE
    async with aiohttp.ClientSession(connector=aiohttp.TCPConnector(ssl=ssl_context)) as session:
        async with session.get(url) as resp:
            print('Read {} from {}'.format(resp.content_length, url))
            
async def download_all(sites):
    tasks = [asyncio.create_task(download_one(site)) for site in sites]
    await asyncio.gather(*tasks)

def main():
    start_time = time.perf_counter()
    asyncio.run(download_all(sites))
    end_time = time.perf_counter()
    print('Download {} sites in {} seconds'.format(len(sites), end_time - start_time))
    
if __name__ == '__main__':
    main()
SSL error in data received
protocol: <asyncio.sslproto.SSLProtocol object at 0x000001EEA10D89B0>
transport: <_SelectorSocketTransport fd=1800 read=polling write=<idle, bufsize=0>>
Traceback (most recent call last):
  File "D:\Sdk\Anaconda3\lib\asyncio\sslproto.py", line 526, in data_received
    ssldata, appdata = self._sslpipe.feed_ssldata(data)
  File "D:\Sdk\Anaconda3\lib\asyncio\sslproto.py", line 207, in feed_ssldata
    self._sslobj.unwrap()
  File "D:\Sdk\Anaconda3\lib\ssl.py", line 767, in unwrap
    return self._sslobj.shutdown()
ssl.SSLError: [SSL: KRB5_S_INIT] application data after close notify (_ssl.c:2609)
SSL error in data received
protocol: <asyncio.sslproto.SSLProtocol object at 0x000001EEA10D8748>
transport: <_SelectorSocketTransport fd=1732 read=polling write=<idle, bufsize=0>>
Traceback (most recent call last):
  File "D:\Sdk\Anaconda3\lib\asyncio\sslproto.py", line 526, in data_received
    ssldata, appdata = self._sslpipe.feed_ssldata(data)
  File "D:\Sdk\Anaconda3\lib\asyncio\sslproto.py", line 207, in feed_ssldata
    self._sslobj.unwrap()
  File "D:\Sdk\Anaconda3\lib\ssl.py", line 767, in unwrap
    return self._sslobj.shutdown()
ssl.SSLError: [SSL: KRB5_S_INIT] application data after close notify (_ssl.c:2609)


Read None from https://www.datacamp.com/community/tutorials/python-data-science-handbook
Read None from https://www.learnpython.org/
Read 32445 from https://www.tutorialspoint.com/python/index.htm


SSL error in data received
protocol: <asyncio.sslproto.SSLProtocol object at 0x000001EEA10D8550>
transport: <_SelectorSocketTransport fd=1828 read=polling write=<idle, bufsize=0>>
Traceback (most recent call last):
  File "D:\Sdk\Anaconda3\lib\asyncio\sslproto.py", line 526, in data_received
    ssldata, appdata = self._sslpipe.feed_ssldata(data)
  File "D:\Sdk\Anaconda3\lib\asyncio\sslproto.py", line 207, in feed_ssldata
    self._sslobj.unwrap()
  File "D:\Sdk\Anaconda3\lib\ssl.py", line 767, in unwrap
    return self._sslobj.shutdown()
ssl.SSLError: [SSL: KRB5_S_INIT] application data after close notify (_ssl.c:2609)


Read None from https://python-course.eu/python3_tutorial.phphttps://docs.python.org/3/tutorial/index.html
Read None from https://pythonbasics.org/learn-python/
Read None from https://www.programiz.com/python-programming/tutorial
Read None from https://www.w3schools.com/python/default.asp


SSL error in data received
protocol: <asyncio.sslproto.SSLProtocol object at 0x000001EEA0F76438>
transport: <_SelectorSocketTransport fd=1508 read=polling write=<idle, bufsize=0>>
Traceback (most recent call last):
  File "D:\Sdk\Anaconda3\lib\asyncio\sslproto.py", line 526, in data_received
    ssldata, appdata = self._sslpipe.feed_ssldata(data)
  File "D:\Sdk\Anaconda3\lib\asyncio\sslproto.py", line 207, in feed_ssldata
    self._sslobj.unwrap()
  File "D:\Sdk\Anaconda3\lib\ssl.py", line 767, in unwrap
    return self._sslobj.shutdown()
ssl.SSLError: [SSL: KRB5_S_INIT] application data after close notify (_ssl.c:2609)
SSL error in data received
protocol: <asyncio.sslproto.SSLProtocol object at 0x000001EEA0FC6710>
transport: <_SelectorSocketTransport fd=1764 read=polling write=<idle, bufsize=0>>
Traceback (most recent call last):
  File "D:\Sdk\Anaconda3\lib\asyncio\sslproto.py", line 526, in data_received
    ssldata, appdata = self._sslpipe.feed_ssldata(data)
  File "D:\Sdk\Anaconda3\lib\asyncio\sslproto.py", line 207, in feed_ssldata
    self._sslobj.unwrap()
  File "D:\Sdk\Anaconda3\lib\ssl.py", line 767, in unwrap
    return self._sslobj.shutdown()
ssl.SSLError: [SSL: KRB5_S_INIT] application data after close notify (_ssl.c:2609)
SSL error in data received
protocol: <asyncio.sslproto.SSLProtocol object at 0x000001EEA0FC6AC8>
transport: <_SelectorSocketTransport fd=1824 read=polling write=<idle, bufsize=0>>
Traceback (most recent call last):
  File "D:\Sdk\Anaconda3\lib\asyncio\sslproto.py", line 526, in data_received
    ssldata, appdata = self._sslpipe.feed_ssldata(data)
  File "D:\Sdk\Anaconda3\lib\asyncio\sslproto.py", line 207, in feed_ssldata
    self._sslobj.unwrap()
  File "D:\Sdk\Anaconda3\lib\ssl.py", line 767, in unwrap
    return self._sslobj.shutdown()
ssl.SSLError: [SSL: KRB5_S_INIT] application data after close notify (_ssl.c:2609)


Read None from https://www.codecademy.com/learn/learn-python


SSL error in data received
protocol: <asyncio.sslproto.SSLProtocol object at 0x000001EEA0FB6BE0>
transport: <_SelectorSocketTransport fd=1788 read=polling write=<idle, bufsize=0>>
Traceback (most recent call last):
  File "D:\Sdk\Anaconda3\lib\asyncio\sslproto.py", line 526, in data_received
    ssldata, appdata = self._sslpipe.feed_ssldata(data)
  File "D:\Sdk\Anaconda3\lib\asyncio\sslproto.py", line 207, in feed_ssldata
    self._sslobj.unwrap()
  File "D:\Sdk\Anaconda3\lib\ssl.py", line 767, in unwrap
    return self._sslobj.shutdown()
ssl.SSLError: [SSL: KRB5_S_INIT] application data after close notify (_ssl.c:2609)


Read None from https://realpython.com/tutorials/python/
Download 9 sites in 22.620816800000057 seconds
#!pip install -U aiohttp asyncio
Python 协程 asyncio 极简入门与爬虫实战 在了解了 Python 并发编程的多线程和多进程之后,我们来了解一下基于 asyncio 的异步IO编程--协程 协程简介 协程(Coroutine)又称微线程、纤程,协程不是进程或线程,其执行过程类似于 Python 函数调用,Python 的 asyncio 模块实现的异步IO编程框架中,协程是对使用 async 关键字定义的异步函数的调用; 一个进程包含多个线程,类似于一个人体组织有多种细... 阅读详情

相关推荐

60 python asyncio模块(异步IO)

Python的asyncio模块是实现异步I/O编程的强大工具,特别适合处理网络请求、文件读写等高延迟操作。其核心机制包括:1)协程(通过async/await定义),2)事件循环(调度执行),3)任务(管理协程),4)Future(异步结果)。asyncio提供并发执行(asyncio.gather)、超时控制(wait_for)、异步队列(Queue)等基本功能,以及同步原语(Lock)和网络编程支持。

水滴爬呀爬 172

FUTURE POLICE语音模型Python爬虫实战:音频数据自动化采集与处理

本文介绍了如何利用星图GPU平台自动化部署🛡️ FUTURE POLICE: 高精度语音解构镜像,构建音频数据自动化采集与处理流水线。该方案结合Python爬虫自动抓取网络音频,并通过该镜像的核心功能进行智能降噪、人声分割与特征提取,高效产出适用于语音识别等AI模型的训练数据。

weixin_42143092的博客 1127

保姆级教程:手把手教你给联想System x 3650 M5服务器配置RAID 5并U盘装系统

本文提供联想System x 3650 M5服务器配置RAID 5并U盘安装系统的详细教程,特别适合零基础运维人员。从准备工作、RAID 5配置到U盘引导和系统安装,涵盖全流程关键步骤与常见问题解决方案,帮助用户高效完成服务器部署。

weixin_42535703的博客 358

FUTURE POLICE语音解构模型实战:基于Python爬虫的音频数据采集与处理

本文介绍了如何利用星图GPU平台自动化部署🛡️ FUTURE POLICE: 高精度语音解构镜像,快速搭建语音分析环境。该方案结合Python爬虫采集网络音频数据,并通过该镜像对音频进行深度解构,提取情绪、声纹、语速等多维度特征,可应用于内容分析、用户体验研究等场景。

weixin_35757531的博客 729

告别同质化!用PyTorch Geometric手把手实现RGCN处理多关系图数据(附实战代码)

本文详细介绍了如何使用PyTorch Geometric实现关系图卷积网络(RGCN)处理多关系图数据,特别适用于社交网络分析、推荐系统等场景。通过实战代码演示了从数据加载、模型构建到训练优化的完整流程,帮助开发者高效处理异构图数据,提升模型性能。

weixin_30781433的博客 259

akshare 布林通道策略

import datetime import pandas as pd import backtrader as bt import matplotlib.pyplot as plt from datetime import datetime import matplotlib import akshare as ak %matplotlib inline class Boll_strategy(bt.Strategy): #自定义参数,每次买入1800手 params=(('size'.

qq_26742269的博客 5338

FUTURE POLICE语音解构实战:Python爬虫数据采集与语音分析

本文介绍了如何利用星图GPU平台,自动化部署🛡️ FUTURE POLICE: 高精度语音解构镜像,构建网络音频智能分析系统。该方案结合Python爬虫自动采集播客等音频数据,并通过该镜像进行语音转文本、情感分析与关键词提取,可高效应用于市场研究、舆情监控等场景。

weixin_42576467的博客 30

AgentScope Java多智能体框架

AgentScope Java 的核心设计理念是“Agent-Oriented Programming” (面向智能体编程)。

zzz19920821的博客 1737

FUTURE POLICE语音解构实战:Python爬虫数据采集与语音分析集成

本文介绍了如何利用星图GPU平台自动化部署🛡️ FUTURE POLICE: 高精度语音解构镜像,构建一套高效的语音数据分析流程。该方案通过Python爬虫自动采集网络音频数据,并调用该镜像的语音识别、情感分析等能力,可广泛应用于市场调研、舆情监控等场景,实现从海量语音中快速提取结构化信息。

weixin_32312889的博客 1002

【DaVinci Developer专题】-41-APP SWC如何读取写入NVM Block数据

APP SWC Port如何Read读取/Write写入NVM Block数据; DaVinci Developer中的Calibration Parameter/Per-Instance Memory/Service Need如何配置。

「汽车电子助手」的博客 4471

【漏洞复现】爱数云盘 Usrm_GetAllUsers 未授权访问漏洞

爱数 AnyShare存在未授权漏洞,未授权的攻击者可以通过该漏洞获取用户名信息。

qq_67810151的博客 3121

FUTURE POLICE语音模型Python爬虫实战:音频数据智能采集与处理

本文介绍了如何利用星图GPU平台自动化部署🛡️ FUTURE POLICE: 高精度语音解构镜像,构建智能音频数据处理流水线。该方案结合Python爬虫与语音识别技术,可自动采集网络音频并转写为文本,适用于播客内容分析、市场舆情监测等场景,实现音频数据的规模化智能处理。

weixin_35748962的博客 54

QT实现计算器(C/C++)

digitClicked()槽函数用于处理数字按钮的点击事件,operatorClicked()槽函数用于处理运算符按钮的点击事件,equalsClicked()槽函数用于处理等号按钮的点击事件。在operatorClicked()槽函数中,我们获取被点击按钮的文本作为当前运算符,并将文本框中的内容转换为双精度浮点数,存储为操作数1。在上述代码中,我们添加了一个私有成员变量m_operand1,用于存储第一个操作数的值,以及一个私有成员变量m_currentOperator,用于存储当前运算符的值。

CyberNova的博客 385

Python异步编程实战:asyncio原理与高性能爬虫应用

异步编程是现代软件开发中处理I/O密集型任务的核心技术,其通过事件循环机制实现非阻塞操作。在Python生态中,asyncio库基于协程模型,允许单线程内并发执行数万个轻量级任务,相比多线程方案避免了锁竞争和上下文切换开销。该技术特别适用于网络爬虫、微服务通信等场景,例如使用aiohttp库可将网页抓取效率提升10倍以上。通过await关键字和Future/Task抽象,开发者能以同步代码风格编写异步逻辑,同时需注意避免阻塞调用和未等待协程等常见陷阱。合理运用Semaphore限流和async with资源

weixin_33938733的博客 422

CATIA文件的网页预览方案

CATIA是工业设计中广泛使用的专业软件,产出`.CATPart`或 `.CATProduct`等文件类型,当资产数量较大时,我们希望快捷预览这些文件,就有了`CATPart`文件网页预览的需求 但我们知道,网页上无法直接渲染`CATPart`这种复杂的文件, CATIA生成的文件(如 `CATPart` 和 `CATProduct`)不仅包含三维几何信息(例如点、线和曲面),还涵盖了丰富的元数据与专业设计特征。 那有没有办法,能实现CATIA文件在网页上的便捷预览?

weixin_44211633的博客 1449

IEM模型,地表粗糙度模拟

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

FUTURE POLICE语音解构模型Python爬虫实战:音频数据智能采集与分析

本文介绍了如何利用星图GPU平台自动化部署🛡️ FUTURE POLICE: 高精度语音解构镜像,构建智能音频分析流水线。通过结合Python爬虫技术,该方案能自动采集网络音频数据,并利用该镜像进行实时语音解构,高效应用于播客舆情监控、内容情感分析等场景。

weixin_42522857的博客 94

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

FUTURE POLICE语音解构模型Python爬虫实战:音频数据智能采集与处理

本文介绍了如何利用星图GPU平台自动化部署🛡️ FUTURE POLICE: 高精度语音解构镜像,构建智能音频数据处理流水线。该方案结合Python爬虫技术,能自动采集网络音频数据,并通过该镜像实现高精度的语音转文字、内容分析等功能,适用于舆情监控、内容审核等批量音频处理场景。

weixin_42509513的博客 98

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

ECC 多模型协作开发工作流(/multi-workflow):Codex + Gemini + Claude 六阶段编排实战指南

> 本文以 [docs/ja-JP/commands/multi-workflow.md](https://link.gitcode.com/i/8a15b74939f8700d80242a7fb9d4cfc6) 为核心骨架展开。该文档是 ECC(The agent harness performance optimization system)中 `/multi-workflow` 命令的日文版

gitblog_00415的博客 352

《实战Python网络爬虫》- 感想

端午节假期过了,之前一直在做出行准备,后面旅游完又休息了一下,最近才恢复状态。 端午假期最后一天收到一个快递,回去打开,发现是微信抽奖中的一本书,黄永祥的《实战Python网络爬虫》。 去各大网站搜了一下这个人,没有名气,去网购平台看了他别的书的书评,整体来说,书都是拼凑的。。。 但是既然书到手了,不妨翻开看看,刚好最近没有什么头绪,又偏头痛。花了几个半天整体翻了一下这本书,感觉是有点浅...

dengyong6584的博客 920

【Python高阶编程技术】第3篇 异步编程——asyncio、await 与事件循环深析

摘要:本文深入解析Python异步编程(asyncio)的核心原理与实战应用。通过对比串行、线程池和asyncio三种模式在I/O密集型任务中的表现,揭示asyncio在并发性能和资源占用上的优势。文章详细讲解协程对象、事件循环工作机制、Future/Task概念,并给出网络爬虫和微服务网关两个完整案例。测试数据显示,asyncio在处理1000并发请求时内存占用仅为线程池的1/10,微服务场景下QPS提升6倍。同时指出常见陷阱如未await协程、异常处理不当、队列背压等问题,提供调优建议。适合需要处理高并

1092

Python开发中如何处理并发?asyncio入门指南

你想从Python多线程、多进程的泥潭里挣脱出来,拥抱真正高效的并发?。但多数人第一次接触它时,都会被async/await的语法、事件循环的诡异行为、以及“协程到底怎么跑起来”的困惑逼疯。别急,我们直接从最核心的问题入手。

searchboy2025的博客 15

Python异步任务管理终极方案(asyncio.ensure_future使用全解)

掌握Python异步编程精髓,详解Python 3.5 asyncio.ensure_future的使用场景与核心方法,涵盖任务调度、协程管理与异常处理。提升并发性能,构建高效异步应用,值得收藏。

ByteVein的博客 441

Python 异步编程

文章目录高性能异步编程一、 引入背景1、 概述2、 分析处理二、 终极处理方案三、 异步协程1、 协程2、 用法3、 实现协程3.1 greenlet3.2 yield3.3 asyncio3.4 async & await4、 协程的意义5、 异步编程5.1 事件循环5.2 快速上手5.3 await5.4 Task 对象5.5 Future 对象5.5.1 asyncio.Future 对象5.5.2 concurrent.future.Future 对象5.5.3 案例5.6 异步迭代器5

一个专注于机器学习基础与实战的技术博客,内容涵盖算法推导、模型实现、数学原理与代码实践。用通俗的语言解析复杂概念,记录学习过程中的思考与总结,适合机器学习爱好者和从业者参考。 6012

【Python 3.5 asyncio.ensure_future 深度解析】:掌握异步编程核心技巧,提升协程调度效率

掌握Python 3.5 asyncio.ensure_future高效调度协程,解决异步任务管理难题。详解其在Web爬虫、高并发IO等场景的应用,对比create_task差异,提升事件循环效率,异步编程进阶必读,值得收藏。

ByteGlow的博客 363
上一篇: python协程coroutine
悟空学编程
博客等级 码龄12年 32粉丝 123原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

悟空学编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值