asyncio

Python下载文件的11种方式

南笙酒味 提交于 2020-12-23 19:02:38
在本教程中,你将学习如何使用不同的Python模块从web下载文件。此外,你将下载常规文件、web页面、Amazon S3和其他资源。 最后,你将学习如何克服可能遇到的各种挑战,例如下载重定向的文件、下载大型文件、完成一个多线程下载以及其他策略。 使用Requests 你可以使用requests模块从一个URL下载文件。 考虑以下代码: 你只需使用requests模块的get方法获取URL,并将结果存储到一个名为“myfile”的变量中。然后,将这个变量的内容写入文件。 使用wget 你还可以使用Python的wget模块从一个URL下载文件。你可以使用pip按以下命令安装wget模块: 考虑以下代码,我们将使用它下载Python的logo图像。 在这段代码中,URL和路径(图像将存储在其中)被传递给wget模块的download方法。 下载重定向的文件 在本节中,你将学习如何使用requests从一个URL下载文件,该URL会被重定向到另一个带有一个.pdf文件的URL。该URL看起来如下: 要下载这个pdf文件,请使用以下代码: 在这段代码中,我们第一步指定的是URL。然后,我们使用request模块的get方法来获取该URL。在get方法中,我们将allow_redirects设置为True,这将允许URL中的重定向,并且重定向后的内容将被分配给变量myfile。 最后

Python核心技术与实战 笔记

烂漫一生 提交于 2020-12-21 20:21:46
基础篇 Jupyter Notebook 优点 整合所有的资源 交互性编程体验 零成本重现结果 实践站点 Jupyter 官方 Google Research 提供的 Colab 环境 安装 运行 列表与元组 列表和元组,都是 一个可以放置任意数据类型的有序集合 。 l = [1, 2, 'hello', 'world'] # 列表中同时含有 int 和 string 类型的元素 l [1, 2, 'hello', 'world'] tup = ('jason', 22) # 元组中同时含有 int 和 string 类型的元素 tup ('jason', 22) 列表是动态的,长度大小不固定,可以随意地增加、删减或者改变元素 (mutable) 元组是静态的,场地大小固定,无法增加删除或者改变 (immutable) 都支持负数索引; 都支持切片操作; 都可以随意嵌套; 两者可以通过 list() 和 tuple() 函数相互转换; 列表和元组存储方式的差异 由于列表是动态的,所以它需要存储指针,来指向对应的元素。增加/删除的时间复杂度均为 O(1)。 l = [] l.__sizeof__() // 空列表的存储空间为 40 字节 40 l.append(1) l.__sizeof__() 72 // 加入了元素 1 之后,列表为其分配了可以存储 4 个元素的空间 (72 -

微软最强 Python 自动化工具开源了!不用写一行代码!

三世轮回 提交于 2020-12-19 11:25:44
点击上方“ AirPython ”,选择“ 加为星标 ” 第一时间关注 Python 原创干货! 1. 前言 最近,微软开源了一款非常强大的 Python 自动化依赖库: playwrigh t-python 它支持主流的浏览器,包含:Chrome、Firefox、Safari、Microsoft Edge 等, 同时支持以无头模式 、有头模式运行 playwright-python 提供了同步、异步的 API,可以结合 Pytest 测试框架使用,并且支持浏览器端的自动化脚本录制 项目地址: https://github.com/microsoft/playwright-python 2. 准备 在实战之前,我们只需要 2 步 第 1 步, 安装 playwright-python 依赖库 # 安装依赖库 pip3 install playwright 第 2 步, 安装主流的浏览器驱动 这样,会将 Chromeium、Firefox、Webkit 浏览器驱动下载到本地 # 安装浏览器驱动 python -m playwright install 3. 实战一下 3-1 录制脚本 我们先查看录制脚本的命令说明 其中 python -m playwright codegen 录制脚本 --help 帮助文档 -o 生成自动化脚本的目录 --target 脚本语言, 包含 JS 和

推荐一款最强Python自动化神器!不用写一行代码!

☆樱花仙子☆ 提交于 2020-12-19 11:25:13
关注上方“ 测试开发技术 ”,选择星标, 干货技术,第一时间送达! 搞过自动化测试的小伙伴,相信都知道,在Web自动化测试中,有一款自动化测试神器工具: selenium 。结合标准的WebDriver API来编写Python自动化脚本,可以实现解放双手,让脚本代替人工在Web浏览器上完成指定的操作。 虽然 selenium 有完备的文档,但也需要一定的学习成本,对于一个纯小白来讲还是有些门槛的。 最近, 微软开源 了一个非常强大的自动化项目叫 playwright-python ,项目地址: https://github.com/microsoft/playwright-python 它支持主流的浏览器,包含: Chrome 、 Firefox 、 Safari 、 Microsoft Edge 等,同时支持以 无头模式 、 有头模式运行 ,并提供了 同步 、 异步 的 API,可以结合 Pytest 测试框架使用,并且支持浏览器端的自动化脚本录制。 而对于Python爱好者来说,还有一个更大的福利,这个项目是针对Python语言的纯自动化工具, 可以做到,连一行代码都不用写,就能实现自动化功能 。听起来,简直太碉堡了! 可能你会觉得有点不可思议,真的不用写一行代码吗?但它真的就是这么厉害。下面我们一起看下这个神器。 1. Playwright介绍

推荐一款最强Python自动化神器!不用写一行代码!

元气小坏坏 提交于 2020-12-19 11:00:36
搞过自动化测试的小伙伴,相信都知道,在Web自动化测试中,有一款自动化测试神器工具: selenium 。结合标准的WebDriver API来编写Python自动化脚本,可以实现解放双手,让脚本代替人工在Web浏览器上完成指定的操作。 虽然 selenium 有完备的文档,但也需要一定的学习成本,对于一个纯小白来讲还是有些门槛的。 最近, 微软开源 了一个非常强大的自动化项目叫 「playwright-python」 ,项目地址: https://github.com/microsoft/playwright-python 它支持主流的浏览器,包含: Chrome 、 Firefox 、 Safari 、 Microsoft Edge 等,同时支持以 无头模式 、 有头模式运行 ,并提供了 同步 、 异步 的 API,可以结合 Pytest 测试框架使用,并且支持浏览器端的自动化脚本录制。 而对于Python爱好者来说,还有一个更大的福利,这个项目是针对Python语言的纯自动化工具, 可以做到,连一行代码都不用写,就能实现自动化功能 。听起来,简直太碉堡了! 可能你会觉得有点不可思议,真的不用写一行代码吗?但它真的就是这么厉害。下面我们一起看下这个神器。 1. Playwright介绍 Playwright是一个强大的Python库,仅用一个API即可自动执行 Chromium

新一代的网络请求库 Httpx

空扰寡人 提交于 2020-12-08 03:32:19
点击上方“ Python学习开发 ”,选择“ 加为星标 ” 第一时间关注Python技术干货! 简介 HTTPX 是最近 GitHub看的到一个比较火的一个项目,根据官网的描述,总结有如下特点: 和使用 requests 一样方便,requests 有的它都有 加入 HTTP/1.1 和 HTTP/2 的支持。 能够直接向 WSGI 应用程序或 ASGI 应用程序发出请求。 到处都有严格的超时设置 全类型注释 100% 的测试覆盖率 比较不错的一个特点是全类型注解,这让我想起了一个叫 Starlette 的库,它也是全类型注解的,类型注解主要方便IDE的智能提示,Java 等静态类型的语言都有这个功能,Python 是近期新加的。其他的后面再说吧,我们还是看例子吧。 安装 httpx 的安装很简单,像其他的 Python 库一样,直接 pip 就完事了 python3 -m pip install httpx 如果需要对 HTTP/2 支持,我们需要额外安装一个库 python3 -m pip install httpx [http2] 使用示例 import httpx r = httpx. get ( 'https://www.example.org/' ) r.text r.content r.json() r.status_code 基本的用法直接导包然后 get 就行了

aiohttp爬虫的模板,类的形式

爱⌒轻易说出口 提交于 2020-12-04 13:45:47
1 import asyncio 2 import aiohttp 3 import async_timeout 4 from lxml import html 5 from timeit import default_timer as timer 6 7 from db import DBData 8 9 10 class Crawler: 11 def __init__ (self, ** kwargs): 12 self.domains = kwargs[ " domains " ] 13 self.max_depth = kwargs[ " max_depth " ] 14 self.max_retries = 3 15 self.max_workers = 10 16 self.Q = asyncio.Queue() 17 self.db_Q = asyncio.Queue() 18 self.cache = set() 19 self.count = 0 20 self.loop = asyncio.get_event_loop() 21 self.db_data = DBData() 22 23 # Clear 24 self.db_data.clear_crawler() 25 26 async def get(self, url, timeout): 27

为 aiohttp 爬虫注入灵魂

久未见 提交于 2020-12-04 13:23:52
为 aiohttp 爬虫注入灵魂 摄影:产品经理 与产品经理在苏州的小生活 听说过异步爬虫的同学,应该或多或少听说过aiohttp这个库。它通过 Python 自带的async/await实现了异步爬虫。 使用 aiohttp,我们可以通过 requests 的api写出并发量匹敌 Scrapy 的爬虫。 我们在 aiohttp 的官方文档上面,可以看到它给出了一个代码示例,如下图所示: 我们现在稍稍修改一下,来看看这样写爬虫,运行效率如何。 修改以后的代码如下: import asyncio import aiohttp template = 'http://exercise.kingname.info/exercise_middleware_ip/{page}' async def get(session, page): url = template.format(page=page) resp = await session.get(url) print(await resp.text(encoding='utf-8')) async def main(): async with aiohttp.ClientSession() as session: for page in range(100): await get(session, page) loop = asyncio

Linux信号(Understanding Linux Kernel 3rd)

烈酒焚心 提交于 2020-11-21 06:13:39
总览 产生 内核或应用程序产生,一份简短的信息。 传递 挂起状态 非挂起状态 信号类型 发给进程的信号(所有线程共享) 发给线程的信号 处理者 进程信号是其中一个没有屏蔽这个信号的线程处理。 线程就是指定线程处理。 处理方式 do_signal 处理 创建对应的特定栈帧来处理。 信号处理函数 整个进程中的线程共享。 有默认也有自定义。 需要的信息也可以自定义。 信号的作用 简讯 一份简短的信息。 生产者是内核或进程。 处理者是具体的线程或者是进程组中符合处理条件的线程。 内容 标准的信号就只有一个数字。 32 位的整数,每一位对应一个信号位。 支持实时信号的系统是 64 位,即两个 long . 信号定义 trap -l 用上面的指令罗列出支持的信号。 在编程中一般是宏定义,然后每个宏对应一个数字。 #define SIGHUP 1 #define SIGINT 2 #define SIGQUIT 3 #define SIGILL 4 #define SIGTRAP 5 #define SIGABRT 6 #define SIGIOT 6 #define SIGBUS 7 #define SIGFPE 8 #define SIGKILL 9 #define SIGUSR1 10 #define SIGSEGV 11 #define SIGUSR2 12 #define

python并发编程之asyncio协程(三)

落花浮王杯 提交于 2020-11-18 05:00:10
协程实现了在单线程下的并发,每个协程共享线程的几乎所有的资源,除了协程自己私有的上下文栈;协程的切换属于程序级别的切换,对于操作系统来说是无感知的,因此切换速度更快、开销更小、效率更高,在有多IO操作的业务中能极大提高效率。 系列文章 python并发编程之threading线程(一) python并发编程之multiprocessing进程(二) python并发编程之asyncio协程(三) python并发编程之gevent协程(四) python并发编程之Queue线程、进程、协程通信(五) python并发编程之进程、线程、协程的调度原理(六) asyncio模块创建协程 asyncio在python3.4后被内置在python中,使得python的协程创建变得更加方便。 import asyncio import os # async 关键字定义一个协程 async def target_func1(): print('the func start') print(os.getpid()) print('the func end') def run(): # 创建一个协程对象 coroutine = target_func1() # 创建一个事件循环 loop = asyncio.get_event_loop() loop.run_until_complete