深入理解协程(四):async/await异步爬虫实战
本文目录:
- 同步方式爬取博客标题
- async/await异步爬取博客标题
本片为深入理解协程系列文章的补充。
你将会在从本文中了解到:async/await如何运用的实际的爬虫中。
案例
从CSDN上批量爬取指定文章的标题。文章列表如下:
urls = [
'https://blog.csdn.net/Jmilk/article/details/103218919',
'https://blog.csdn.net/stven_king/article/details/103256724',
'https://blog.csdn.net/csdnnews/article/details/103154693',
'https://blog.csdn.net/dg_lee/article/details/103951021',
'https://blog.csdn.net/m0_37907797/article/details/103272967',
'https://blog.csdn.net/zzq900503/article/details/49618605',
'https://blog.csdn.net/weixin_44339238/article/details/103977138',
'https://blog.csdn.net/dengjin20104042056/article/details/103930275',
'https://blog.csdn.net/Mind_programmonkey/article/details/103940511',
'https://blog.csdn.net/xufive/article/details/102993570',
'https://blog.csdn.net/weixin_41010294/article/details/104009722',
'https://blog.csdn.net/yunqiinsight/article/details/103137022',
'https://blog.csdn.net/qq_44210563/article/details/102826406',
]
同步爬虫
import requests
import time
from lxml import etree
urls = [
'https://blog.csdn.net/Jmilk/article/details/103218919',
'https://blog.csdn.net/stven_king/article/details/103256724',
...此处略
]
def get_title(url):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36'
}
r = requests.get(url, headers)
html = r.content
title = etree.HTML(html).xpath('//h1[@class="title-article"]/text()')[0]
print(title)
def main():
for url in urls:
get_title(url)
if __name__ == '__main__':
start = time.time()
main()
print(f'cost time: {time.time() - start}s')
输出结果如下:
4G LTE/EPC 协议栈
Android-Universal-Image-Loader源码分析
8年经验面试官详解 Java 面试秘诀
AES中ECB模式的加密与解密(Python3.7)
【图解算法面试】记一次面试:说说游戏中的敏感词过滤是如何实现的?
java进阶(四)------java编程规范---代码质量检测工具FindBugs、PMD和CheckStyle的安装
这是一份集合一线大厂Android工程师必备技能体系+学习路线!
【程序人生】程序员接私活常用平台汇总
你不得不了解的卷积神经网络发展史
致 Python 初学者
OOM别慌,手把手教你定位
中国数据库OceanBase登顶之路
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
cost time: 6.065227508544922s
用时:6.065227508544922s。
async/await异步爬虫
要实现一个真正的异步爬虫,就需要引入aiohttp模块,aiohttp是一个利用asyncio的库,可以暂时看成协程版的requests。
import asyncio
import time
import aiohttp
from lxml import etree
urls = [
'https://blog.csdn.net/Jmilk/article/details/103218919',
'https://blog.csdn.net/stven_king/article/details/103256724',
...此处略
]
async def async_get_url(url):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36'
}
async with aiohttp.ClientSession() as session: # 解释1
async with session.get(url, headers=headers) as r:
html = await r.read()
title = etree.HTML(html).xpath('//h1[@class="title-article"]/text()')[0]
print(title)
def async_main():
loop = asyncio.get_event_loop()
tasks = [async_get_url(url) for url in urls]
loop.run_until_complete(asyncio.wait(tasks))
loop.close()
if __name__ == '__main__':
start = time.time()
async_main()
print(f'cost time: {time.time() - start}s')
输出结果:
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
【程序人生】程序员接私活常用平台汇总
致 Python 初学者
中国数据库OceanBase登顶之路
Android-Universal-Image-Loader源码分析
OOM别慌,手把手教你定位
这是一份集合一线大厂Android工程师必备技能体系+学习路线!
AES中ECB模式的加密与解密(Python3.7)
4G LTE/EPC 协议栈
【图解算法面试】记一次面试:说说游戏中的敏感词过滤是如何实现的?
8年经验面试官详解 Java 面试秘诀
java进阶(四)------java编程规范---代码质量检测工具FindBugs、PMD和CheckStyle的安装
你不得不了解的卷积神经网络发展史
cost time: 0.6428999900817871s
说明:
解释1:此处为异步的上下文管理器,是aiohttp官方文档提供的写法。如果对上下文管理器不是很了解的话,可以参看【吃透Python上下文管理器】。
用时:0.6428999900817871s。从两种爬虫的输出结果中可以看到:
- 文章标题的顺序不同。同步爬虫会按照
urls内部的url顺序依次爬取文章标题。而异步爬虫爬取的顺序并不完全和urls中的url顺序相同。 - 爬取速度差异很大。异步爬虫速度大概是普通同步爬虫的8~10倍。异步爬虫充分利用了网络请求这段时间。从而提高了爬取效率。
关于aiohttp的更多用法。会在后面文章讲到。
推荐阅读
关注公众号西加加先生一起玩转Python。

深入理解协程(四):async/await异步爬虫实战的更多相关文章
- Python PEP 492 中文翻译——协程与async/await语法
原文标题:PEP 0492 -- Coroutines with async and await syntax 原文链接:https://www.python.org/dev/peps/pep-049 ...
- Python的异步编程[0] -> 协程[0] -> 协程和 async / await
协程 / Coroutine 目录 生产者消费者模型 从生成器到异步协程– async/await 协程是在一个线程执行过程中可以在一个子程序的预定或者随机位置中断,然后转而执行别的子程序,在适当的时 ...
- 协程 和 async await
协程, 是 为了 避免 闭包传递变量 的 性能损耗 而产生 . 如果不是 为了 避免 闭包传递变量 的 性能损耗 , 线程池 和 Task 已经够了, 不需要 再设计 出 协程 来 . 闭 ...
- 深入理解协程(三):async/await实现异步协程
原创不易,转载请联系作者 深入理解协程分为三部分进行讲解: 协程的引入 yield from实现异步协程 async/await实现异步协程 本篇为深入理解协程系列文章的最后一篇. 从本篇你将了解到: ...
- Python的异步编程[0] -> 协程[1] -> 使用协程建立自己的异步非阻塞模型
使用协程建立自己的异步非阻塞模型 接下来例子中,将使用纯粹的Python编码搭建一个异步模型,相当于自己构建的一个asyncio模块,这也许能对asyncio模块底层实现的理解有更大的帮助.主要参考为 ...
- 深入理解协程(二):yield from实现异步协程
原创不易,转载请联系作者 深入理解协程分为三部分进行讲解: 协程的引入 yield from实现异步协程 async/await实现异步协程 本篇为深入理解协程系列文章的第二篇. yield from ...
- 阿里开源 iOS 协程开发框架 coobjc!--异步编程的问题与解决方案
阿里妹导读:刚刚,阿里巴巴正式对外开源了基于 Apache 2.0 协议的协程开发框架 coobjc,开发者们可以在 Github 上自主下载.coobjc是为iOS平台打造的开源协程开发框架,支持O ...
- 理解Task和和async await
本文将详解C#类当中的Task,以及异步函数async await和Task的关系 一.Task的前世今生 1.Thread 一开始我们需要创建线程的时候一般是通过Thread创建线程,一般常用创建线 ...
- 理解ES7中的async/await
理解ES7中的async/await 优势是:就是解决多层异步回调的嵌套 从字面上理解 async/await, async是 "异步"的含义,await可以认为是 async w ...
随机推荐
- 【TensorFlow】理解tf.nn.conv2d方法 ( 附代码详解注释 )
最近在研究学习TensorFlow,在做识别手写数字的demo时,遇到了tf.nn.conv2d这个方法,查阅了官网的API 发现讲得比较简略,还是没理解.google了一下,参考了网上一些朋友写得博 ...
- 【codeforces 761A】Dasha and Stairs
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
- Python--day32--ftp文件传输报错的原因
解决办法:把buffer改小 server.py #实现一个大文件的上传或下载 #配置文件 ip地址 端口号 import json import socket import struct sk = ...
- P1090 后缀表达式
题目描述 所谓后缀表达式是指这样的一个表达式:式中不再引用括号,运算符号放在两个运算对象之后,所有计算按运算符号出现的顺序,严格地由左而右新进行(不用考虑运算符的优先级). 如:3(5–2)+7对应的 ...
- Codeforces Round #561 (Div. 2)
C. A Tale of Two Lands 题意: 给出 n 个数,问有多少点对(x,y)满足 |x-y| ≤ |x|,|y| ≤ |x+y|: (x,y) 和 (y,x) 表示一种答案: 题解: ...
- POJ 2976 Dropping tests [二分]
1.题意:同poj3111,给出一组N个有价值a,重量b的物品,问去除K个之后,剩下的物品的平均值最大能取到多少? 2.分析:二分平均值,注意是去除K个,也就是选取N-K个 3.代码: # inclu ...
- C++引用计数设计与分析(解决垃圾回收问题)
1.引言 上一篇博文讲到https://www.cnblogs.com/zhaoyixiang/p/12116203.html 我们了解到我们在浅拷贝时对带指针的对象进行拷贝会出现内存泄漏,那C++是 ...
- acwing 102 -利用二分枚举区间平均值
我真的是服了,看了一晚上发现居然,,,,, 上图吧,话说有人评论没... 对于结果来说,不一定要枚举有序数列,感觉这是一种猜结果的方法,只不过特别精确,令人发指 #include<cstdio& ...
- 017 Ceph的集群管理_3
一.验证OSD 1.1 osd状态 运行状态有:up,in,out,down 正常状态的OSD为up且in 当OSD故障时,守护进程offline,在5分钟内,集群仍会将其标记为up和in,这是为了防 ...
- 关于 5G,我们应该了解的
2020年元旦,我看了高通之前发布的一篇关于5G的文章,标题为“Everything You Need to Know About 5G”,主要包括5G是什么.有什么优势以及未来的前景等内容.我斗胆翻 ...