第一步,导入模块

import requests
import asyncio
import aiohttp
import time

第二步创建类绑定内容,写入口函数

class WZ(object):def __init__(self):self.url = 'https://pvp.qq.com/web201605/js/herolist.json'self.headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36'}self.pic_url = 'https://game.gtimg.cn/images/yxzj/img201606/heroimg/533/533-smallskin-2.jpg'if __name__ == '__main__':if not os.path.exists('王者'):os.mkdir('王者')wzyy = WZ()

第三步写异步函数

1,入口函数中写事件循环

    if not os.path.exists('王者'):os.mkdir('王者')wzyy = WZ()#获取事件循环loop = asyncio.get_event_loop()#开启协程loop.run_until_complete()
  1. 编写异步主控制方法run()

首先获取到url的数据:

    async def run(self):# 生明一个异步的上下文管理器,能帮助我们自己的分配和释放资源# aiohttp.ClientSession()   类似requests的sessi()async with aiohttp.ClientSession() as session:respose = await session.get(self.url,headers=self.headers)wazhe_data = await respose.json(content_type=None) #括号里一定要写这个#获取一个容器task = []#从josn提取我们需要的数据for i in wazhe_data:cname = i['cname']ename = i['ename']res = self.down_immg(session,cname,ename)#获取协程对象

然后创建一个任务方法,下载图片的任务:

    async def down_immg(self,session,cname,ename):for k in range(1,10):respose = await session.get(self.pic_url.format(ename,ename,i),headers=self.headers)if respose.status == 200:contect = await respose.contentwith open('图片/' + cname + '-'+ str(k) + '.jpg','wb') as f:f.write(contect)print('下载{}第{}张图片成功'.format(cname, str(k)))else:break

最后回到run方法:

将协程对象转换成task对象 才能做到异步

 async def run(self):# 生明一个异步的上下文管理器,能帮助我们自己的分配和释放资源# aiohttp.ClientSession()   类似requests的sessi()async with aiohttp.ClientSession() as session:respose = await session.get(self.url,headers=self.headers)wazhe_data = await respose.json(content_type=None)#获取一个容器tasks = []#从josn提取我们需要的数据for i in wazhe_data:cname = i['cname']ename = i['ename']#获取协程对象res = self.down_immg(session,cname,ename)# 将协程对象转换成task对象 才能做到异步task = asyncio.create_task(res)#添加到列表中tasks.append(task)# 等待执行的异步 将task对象交由event_loop来控制药await asyncio.wait(tasks)

总代码

import requests
import asyncio  # asyncio是Python3.4引入的一个标准库,直接内置了对异步IO的支持。asyncio模块提供了使用协程构建并发应用的工具
import aiohttp  # 异步请求库aiohttp 加快图片 url 的网页请求
import time
import osclass WZ(object):def __init__(self):self.url = 'https://pvp.qq.com/web201605/js/herolist.json'self.headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36'}self.pic_url = 'https://game.gtimg.cn/images/yxzj/img201606/heroimg/{}/{}-smallskin-{}.jpg'async def down_immg(self,session,cname,ename):for k in range(1,10):respose = await session.get(self.pic_url.format(ename,ename,k),headers=self.headers)if respose.status == 200:contect = await respose.read()with open("王者/" + cname + "-" + str(k) + '.jpg', 'wb') as f:f.write(contect)print('下载{}第{}张图片成功'.format(cname, str(k)))else:breakasync def run(self):# 生明一个异步的上下文管理器,能帮助我们自己的分配和释放资源# aiohttp.ClientSession()   类似requests的sessi()async with aiohttp.ClientSession() as session:respose = await session.get(self.url,headers=self.headers)wazhe_data = await respose.json(content_type=None)#获取一个容器tasks = []#从josn提取我们需要的数据for i in wazhe_data:cname = i['cname']ename = i['ename']#获取协程对象res = self.down_immg(session,cname,ename)# 将协程对象转换成task对象 才能做到异步task = asyncio.create_task(res)#添加到列表中tasks.append(task)# 等待执行的异步 将task对象交由event_loop来控制await asyncio.wait(tasks)if __name__ == '__main__':if not os.path.exists('王者'):os.mkdir('王者')wzyy = WZ()#获取事件循环loop = asyncio.get_event_loop()#开启协程loop.run_until_complete(wzyy.run())

异步爬虫爬取实战-asyncio相关推荐

  1. 使用异步爬虫爬取网络小说

    这个重点在于aiohttp的使用,它保存文件的格式有很多种,如果要保存非文本信息需要用 async with aiohttp.ClientSession() as session:async with ...

  2. python爬虫爬取新闻实战01:小白如何迅速学会爬虫爬取上千条新闻

    爬虫爬取新闻实战01:小白如何迅速学会爬虫爬取千条新闻 文章目录 爬虫爬取新闻实战01:小白如何迅速学会爬虫爬取千条新闻 1.前言 2 .爬虫原理介绍 2.1.图片爬虫 2.2 文字爬虫 3.用八爪鱼 ...

  3. 异步爬虫模块aiohttp实战之infoq

    点击上方蓝字关注 异步爬虫模块aiohttp实战之infoq 之前写过很多的关于异步的文章,介绍了asyncio的使用,大多的只是通过简单的例子说明了asyncio的使用,但是没有拿出具体的使用例子, ...

  4. 如何利用Python网络爬虫爬取微信朋友圈动态--附代码(下)

    前天给大家分享了如何利用Python网络爬虫爬取微信朋友圈数据的上篇(理论篇),今天给大家分享一下代码实现(实战篇),接着上篇往下继续深入. 一.代码实现 1.修改Scrapy项目中的items.py ...

  5. mysql scrapy 重复数据_大数据python(scrapy)爬虫爬取招聘网站数据并存入mysql后分析...

    基于Scrapy的爬虫爬取腾讯招聘网站岗位数据视频(见本头条号视频) 根据TIOBE语言排行榜更新的最新程序语言使用排行榜显示,python位居第三,同比增加2.39%,为什么会越来越火,越来越受欢迎 ...

  6. 实战 | webmagic爬取实战之爬取保险经纪人信息

    介绍 小小根据上次爬取经验,发现爬取的时候,信息不太完善,这次针对手机页面进行爬取. 查看手机页面 相对于pc端口的页面,手机端的页面更容易爬取.通过网络信息,可以查看到是这个请求发起的网络信息.查看 ...

  7. python朋友圈动态_如何利用Python网络爬虫爬取微信朋友圈动态--附代码(下)

    前天给大家分享了如何利用Python网络爬虫爬取微信朋友圈数据的上篇(理论篇),今天给大家分享一下代码实现(实战篇),接着上篇往下继续深入. 一.代码实现 1.修改Scrapy项目中的items.py ...

  8. 使用Python爬虫爬取网络美女图片

    代码地址如下: http://www.demodashi.com/demo/13500.html 准备工作 安装python3.6 略 安装requests库(用于请求静态页面) pip instal ...

  9. python抓取朋友圈动态_如何利用Python网络爬虫爬取微信朋友圈动态--附代码(下)...

    原标题:如何利用Python网络爬虫爬取微信朋友圈动态--附代码(下) 前天给大家分享了如何利用Python网络爬虫爬取微信朋友圈数据的上篇(理论篇),今天给大家分享一下代码实现(实战篇),接着上篇往 ...

最新文章

  1. PHP 算法题:有多少苹果用来分赃1.1
  2. 使用C#调用外部Ping命令获取网络连接情况
  3. linux 提权方法总结
  4. c语言socket调用图灵API,socket通信(四):socket实现机器人在线聊天
  5. 浅谈JQuery中$('.classname').get(0); $('.classname').eq(0); $('.classname')[0]三者的区别
  6. Matplotlib画图教程:在QT界面中嵌入三维图片
  7. python wget安装_Macbook系统环境安装wget的2个方法 - 传统包及Homebrew安装
  8. java如何实现计算数据的录入_Java如何实现键盘数据的录入?
  9. 动态瑜伽 静态瑜伽 初学者_瑜伽与编程有什么关系?
  10. gho镜像安装器linux,Ghost镜像安装器
  11. java恐怖游戏_分享个经典恐怖游戏系列
  12. 地球绕太阳一圈有多远
  13. WordPress Platinum SEO插件跨站脚本漏洞
  14. [No000023]为何没有更多人从事程序员的工作?程序员常有,优秀程序员不常有!...
  15. debug使用方法(概念篇)
  16. 红米开发版刷机教程_红米K20开发版刷机包(官方系统最新完整固件升级包V20.1.9MIUI开发版)...
  17. CF-C. Dima and Salad
  18. 7个实用的免费网站托管站点
  19. Struts2-052 漏洞复现
  20. 脑电波技术的前途光明吗?

热门文章

  1. Dart基础——Dart语法
  2. 了解软件测试职业以及发展定位
  3. 华为linux系统信息,Linux系统信息相关、其他命令(五)
  4. 谈出自己在网优谷培训前端亲身经历,以及给想去IT培训的人一些建议
  5. 安装PS AI过程--最新(photoshop AI)photoshop beta 安装
  6. [Python]小甲鱼Python视频第019课(函数:我的地盘听我的)课后题及参考解答
  7. ABSA-《Aspect-Category-Opinion-Sentiment Quadruple Extraction with Implicit Aspects and Opinions》论文阅读
  8. java: 程序包 javax.smartcardio 不可见 (程序包 javax.smartcardio 已在模块 java.smartcardio 中声明, 但该模块不在模块图中)
  9. 对话Neo4j首席科学家Jim Webber:图数据库江湖5年后将尘埃落定
  10. 更改xrdp,默认的3389端口