异步爬虫爬取实战-asyncio
第一步,导入模块
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()
编写异步主控制方法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相关推荐
- 使用异步爬虫爬取网络小说
这个重点在于aiohttp的使用,它保存文件的格式有很多种,如果要保存非文本信息需要用 async with aiohttp.ClientSession() as session:async with ...
- python爬虫爬取新闻实战01:小白如何迅速学会爬虫爬取上千条新闻
爬虫爬取新闻实战01:小白如何迅速学会爬虫爬取千条新闻 文章目录 爬虫爬取新闻实战01:小白如何迅速学会爬虫爬取千条新闻 1.前言 2 .爬虫原理介绍 2.1.图片爬虫 2.2 文字爬虫 3.用八爪鱼 ...
- 异步爬虫模块aiohttp实战之infoq
点击上方蓝字关注 异步爬虫模块aiohttp实战之infoq 之前写过很多的关于异步的文章,介绍了asyncio的使用,大多的只是通过简单的例子说明了asyncio的使用,但是没有拿出具体的使用例子, ...
- 如何利用Python网络爬虫爬取微信朋友圈动态--附代码(下)
前天给大家分享了如何利用Python网络爬虫爬取微信朋友圈数据的上篇(理论篇),今天给大家分享一下代码实现(实战篇),接着上篇往下继续深入. 一.代码实现 1.修改Scrapy项目中的items.py ...
- mysql scrapy 重复数据_大数据python(scrapy)爬虫爬取招聘网站数据并存入mysql后分析...
基于Scrapy的爬虫爬取腾讯招聘网站岗位数据视频(见本头条号视频) 根据TIOBE语言排行榜更新的最新程序语言使用排行榜显示,python位居第三,同比增加2.39%,为什么会越来越火,越来越受欢迎 ...
- 实战 | webmagic爬取实战之爬取保险经纪人信息
介绍 小小根据上次爬取经验,发现爬取的时候,信息不太完善,这次针对手机页面进行爬取. 查看手机页面 相对于pc端口的页面,手机端的页面更容易爬取.通过网络信息,可以查看到是这个请求发起的网络信息.查看 ...
- python朋友圈动态_如何利用Python网络爬虫爬取微信朋友圈动态--附代码(下)
前天给大家分享了如何利用Python网络爬虫爬取微信朋友圈数据的上篇(理论篇),今天给大家分享一下代码实现(实战篇),接着上篇往下继续深入. 一.代码实现 1.修改Scrapy项目中的items.py ...
- 使用Python爬虫爬取网络美女图片
代码地址如下: http://www.demodashi.com/demo/13500.html 准备工作 安装python3.6 略 安装requests库(用于请求静态页面) pip instal ...
- python抓取朋友圈动态_如何利用Python网络爬虫爬取微信朋友圈动态--附代码(下)...
原标题:如何利用Python网络爬虫爬取微信朋友圈动态--附代码(下) 前天给大家分享了如何利用Python网络爬虫爬取微信朋友圈数据的上篇(理论篇),今天给大家分享一下代码实现(实战篇),接着上篇往 ...
最新文章
- PHP 算法题:有多少苹果用来分赃1.1
- 使用C#调用外部Ping命令获取网络连接情况
- linux 提权方法总结
- c语言socket调用图灵API,socket通信(四):socket实现机器人在线聊天
- 浅谈JQuery中$('.classname').get(0); $('.classname').eq(0); $('.classname')[0]三者的区别
- Matplotlib画图教程:在QT界面中嵌入三维图片
- python wget安装_Macbook系统环境安装wget的2个方法 - 传统包及Homebrew安装
- java如何实现计算数据的录入_Java如何实现键盘数据的录入?
- 动态瑜伽 静态瑜伽 初学者_瑜伽与编程有什么关系?
- gho镜像安装器linux,Ghost镜像安装器
- java恐怖游戏_分享个经典恐怖游戏系列
- 地球绕太阳一圈有多远
- WordPress Platinum SEO插件跨站脚本漏洞
- [No000023]为何没有更多人从事程序员的工作?程序员常有,优秀程序员不常有!...
- debug使用方法(概念篇)
- 红米开发版刷机教程_红米K20开发版刷机包(官方系统最新完整固件升级包V20.1.9MIUI开发版)...
- CF-C. Dima and Salad
- 7个实用的免费网站托管站点
- Struts2-052 漏洞复现
- 脑电波技术的前途光明吗?
热门文章
- Dart基础——Dart语法
- 了解软件测试职业以及发展定位
- 华为linux系统信息,Linux系统信息相关、其他命令(五)
- 谈出自己在网优谷培训前端亲身经历,以及给想去IT培训的人一些建议
- 安装PS AI过程--最新(photoshop AI)photoshop beta 安装
- [Python]小甲鱼Python视频第019课(函数:我的地盘听我的)课后题及参考解答
- ABSA-《Aspect-Category-Opinion-Sentiment Quadruple Extraction with Implicit Aspects and Opinions》论文阅读
- java: 程序包 javax.smartcardio 不可见 (程序包 javax.smartcardio 已在模块 java.smartcardio 中声明, 但该模块不在模块图中)
- 对话Neo4j首席科学家Jim Webber:图数据库江湖5年后将尘埃落定
- 更改xrdp,默认的3389端口