[Muxi_k] Python 异步爬虫
1、同步和异步的区别
-
同步: 所有的操作都做完,才返回给用户。这样用户在线等待的时间太长,给用户一种卡死了的感觉
-
异步: 不等所有操作做完 ,就返回给用户。操作已经启动程序会将它加到消息队列当中,慢慢执行,不会给用户卡死的感觉
2、使用Asynico 进行异步编程
-
Asynico - 异步 I/O
-
asyncio 是用来编写 并发 代码的库,使用 async/await 语法。
-
asyncio 被用作多个提供高性能 Python 异步框架的基础,包括网络和网站服务,数据库连接库,分布式任务队列等等。
-
asyncio 往往是构建 IO 密集型和高层级 结构化 网络代码的最佳选择。
-
python 3.5 后才可以使用async/await 语法
异步请求图片示例:
安装异步http 请求库
$ pip install aiohttp
- 导入 asyncio 以及异步请求aiohttp
# !/usr/bin/env python
import asyncio
import aiohttp
- fetch
async def fetch(session, url):
async with session.get(url, headers={
"referer": "https://www.mzitu.com/",
"user-agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36"
}) as response:
return await response.read()
- download_image()
async def download_image(url):
async with aiohttp.ClientSession() as session:
result = await fetch(session, url)
with open(url.split("/")[-1], 'wb') as f:
f.write(result)
f.close()
- main()
if __name__ == '__main__':
# 添加多个任务
tasks = [
asyncio.ensure_future(download_image("https://csdnimg.cn/cdn/content-toolbar/csdn-logo.png?v=20200416.1")),
asyncio.ensure_future(download_image("https://csdnimg.cn/public/common/toolbar/images/[email protected]"))
]
# 打开时间循环
loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.gather(*tasks))
参考
M
评论
还没有评论,来说第一句吧。