Python异步爬虫批量下载图片-协程

import aiofiles
import aiohttp
import asyncio
import requests
from lxml import etree
from aiohttp import TCPConnectorclass Spider:def __init__(self, value):# 起始urlself.start_url = value# 下载单个图片@staticmethodasync def download_one(url):name = url[0].split("/")[-1][:-4]print("开始下载", url, name)headers = {'Host': 'file.jiutuvip.com','User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, ''like Gecko) Chrome/124.0.0.0 Mobile Safari/537.36','Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8','Accept-Language': 'zh-CN,zh;q=0.9','Accept-Encoding': 'gzip, deflate, br, zstd','Connection': 'keep-alive','Upgrade-Insecure-Requests': '1','Sec-Fetch-Dest': 'document','Sec-Fetch-Mode': 'navigate','Sec-Fetch-Site': 'none','Sec-Fetch-User': '?1','TE': 'trailers'}# 发送网络请求async with aiohttp.ClientSession(connector=TCPConnector(ssl=False)) as session:async with session.get(url=url[0], headers=headers) as resp:  # 相当于 requests.get(url=url[0], headers=head)# await resp.text() => resp.textcontent = await resp.content.read()  # => resp.content# 写入文件async with aiofiles.open('./imgs/' + name + '.webp', "wb") as f:await f.write(content)print("下载完毕")# 获取图片的urlasync def download(self, href_list):for href in href_list:async with aiohttp.ClientSession(connector=TCPConnector(ssl=False)) as session:async with session.get(url=href) as child_res:html = await child_res.text()child_tree = etree.HTML(html)src = child_tree.xpath("//div[@class='article-body cate-6']/a/img/@src")  # 选手图片地址 url 列表await self.download_one(src)# 获取图片详情urlasync def get_img_url(self, html_url):async with aiohttp.ClientSession(connector=TCPConnector(ssl=False)) as session:async with session.get(url=html_url) as resp:html = await resp.text()tree = etree.HTML(html)href_list = tree.xpath("//div[@class='uk-container']/ul/li/a/@href")  # 选手详情页 url 列表print(href_list)await self.download(href_list)# 页面总页数@staticmethoddef get_html_url(url):page = 2response = requests.get(url=url)response.encoding = "utf-8"tree = etree.HTML(response.text)total_page = tree.xpath("//*[@class='pages']/a[12]/text()")  # 页面总页数print(total_page)html_url_list = []while page <= 4:  # int(total_page[0])  # 只取第 2、3、4 页next_url = f"https://www.yeitu.com/meinv/xinggan/{page}.html"html_url_list.append(next_url)page += 1print(html_url_list)return html_url_listasync def main(self):# 拿到每页url列表html_url_list = self.get_html_url(url=self.start_url)  # url列表tasks = []for html_url in html_url_list:t = asyncio.create_task(self.get_img_url(html_url))  # 创建任务tasks.append(t)await asyncio.wait(tasks)if __name__ == '__main__':url = "https://www.yeitu.com/meinv/xinggan/"sp = Spider(url)# loop = asyncio.get_event_loop()# loop = asyncio.new_event_loop()# asyncio.set_event_loop(loop)# loop.run_until_complete(sp.main())asyncio.run(sp.main())

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/25989.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis 5种常用数据类型

目录 Redis简介 1.字符串 string 2.哈希 hash 3.列表 list 4.集合 set 5.有序集合 sorted set / zset Redis简介 Redis&#xff0c;全称Remote Dictionary Server&#xff0c;是一个开源的、内存中的数据结构存储系统。它可以用作数据库、缓存和消息中间件&#xff0c;支…

Hash String 学习笔记

目录 咕咕咕 Trie 树/字典树 P8306 【模板】字典树 咕咕咕&#xff08;感觉比较简单&#xff08;吗&#xff09;&#xff09;&#xff08;我才不会说是我懒呢&#xff09; KMP 一个求最长公共前后缀的东西 P3375 【模板】KMP 写法一 #include<bits/stdc.h> using name…

【JavaScript脚本宇宙】表格大变身:探秘JavaScript库的数据表格魔法

优化数据展示&#xff1a;精选JavaScript表格增强库对比 前言 在现代Web开发中&#xff0c;利用各种库和框架来增强数据表格的功能已经成为常态。通过使用特定的JavaScript库和插件&#xff0c;开发人员可以轻松地实现交互性强、美观且高性能的数据表格&#xff0c;从而提升用…

JavaScript前端技术入门教程

引言 在前端开发的广阔天地中&#xff0c;JavaScript无疑是最耀眼的一颗明星。它赋予了网页动态交互的能力&#xff0c;让网页从静态的文本和图片展示&#xff0c;进化为可以与用户进行实时交互的丰富应用。本文将带您走进JavaScript的世界&#xff0c;为您提供一个入门级的教…

Nginx访问日志

Nginx日志是Nginx Web服务器产生的记录文件&#xff0c;主要用于跟踪和分析服务器的访问情况以及错误信息。Nginx日志主要分为两大类&#xff1a;访问日志 (access_log): 访问日志记录了每一次客户端对Nginx服务器的HTTP请求的详细信息&#xff0c;这对于统计分析、流量监控、用…

SpringBoot3+Mybatis-Plus+h2数据库,入门Mybatis-Plus

SpringBoot3Mybatis-Plush2数据库&#xff0c;入门Mybatis-Plus mybatis-plus官网地址maven依赖数据库脚本配置文件实体类Mapper入门程序启动程序测试单元测试测试结果 Service层接口service层接口单元测试测试结果 项目结构 mybatis-plus官网地址 https://www.baomidou.com/ …

vue manually select

1 vuex 一个包含多个页面的应用程序&#xff0c;每个页面包含多个组件&#xff0c;这些组件拥有各自的表单&#xff0c;并且希望这些表单展示的数据能够在不同组件之间共享&#xff0c;那么可以使用 Vuex 来管理这些数据。在这种情况下&#xff0c;您可以将这些需要共享的数据存…

2002NOIP普及组真题 2. 选数

线上OJ&#xff1a; 【02NOIP普及组】选数 核心思想&#xff1a; 1、使用 模板函数 isPrime() 来判断一个数是否为素数。 2、定义一个函数 dfs 来进行深度优先搜索。在dfs函数中&#xff0c;通过递归的方式遍历所有可能的组合&#xff0c;并计算每个组合的和。 在 dfs 中&…

服务器升级Nacos2.2.3报错、rocksdb报错问题处理

由于系统之前使用的Nacos2.0.4有反序列化漏洞&#xff0c;故需要将Nacos升级到2.2.3版本。 该Nacos在本地运行没有问题&#xff0c;但是在Windows服务器运行就会报错&#xff1a; rocksdb java.lang.UnsatisfiedLinkError: C:\Users\Administrator\AppData\Local\Temp\2\libro…

风能远程管理ARMxy嵌入式系统深度解析

智能技术正以前所未有的速度融入传统能源管理体系&#xff0c;而ARMxy工业计算机作为这一变革中的关键技术载体&#xff0c;正以其独特的性能优势&#xff0c;为能源管理的智能化升级铺设道路。本文将聚焦于智能电表、太阳能电站监控、风力发电站远程管理三大应用场景&#xff…

【2023】LitCTF

LitCTF2023&#xff08;复现&#xff09; Web&#xff1a; 1、我Flag呢&#xff1f; ​ ctrlu 读取源码&#xff0c;在最后发现了flag&#xff1a; <!--flag is here flagNSSCTF{3d5218b9-4e24-4d61-9c15-68f8789e8c48} -->2、PHP是世界上最好的语言&#xff01;&…

网站安全性评估方法

评估一个网站的安全性是一个多方面的过程&#xff0c;涉及到对网站的技术架构、代码质量、数据处理、用户交互等多个维度的考察。以下是一些常用的评估方法&#xff1a; 1.了解常见的安全风险&#xff1a;包括恶意软件、钓鱼攻击、跨站脚本攻击等&#xff0c;这些都是网站可能…

PostgreSQL的视图pg_roles

PostgreSQL的视图pg_roles pg_roles 是 PostgreSQL 中的一个系统视图&#xff0c;提供了关于数据库角色&#xff08;用户和组&#xff09;的信息。PostgreSQL 中的角色用于管理数据库的权限、登录能力以及其他安全相关的特性。通过查询 pg_roles 视图&#xff0c;数据库管理员…

oj数据库名字总结

文章目录 1. oj数据库名字解析1. compileinfo2. contest3. loginlog4. news5. online6. privilege7. problem8. runmtimeinfo9. solution10. source_code 和 source_code_user11. user 2. 删除账户1.信息删除&#xff08;不删除其做题数据&#xff09;2.彻底删除&#xff08;包…

SQL159 每个创作者每月的涨粉率及截止当前的总粉丝量

描述 用户-视频互动表tb_user_video_log iduidvideo_idstart_timeend_timeif_followif_likeif_retweetcomment_id110120012021-09-01 10:00:002021-09-01 10:00:20011NULL210520022021-09-10 11:00:002021-09-10 11:00:30101NULL310120012021-10-01 10:00:002021-10-01 10:00…

RAG检索与生成的融合

1、rag定义 检索增强生成 (RAG) 模型代表了检索系统和生成模型两大不同但互补组件完美结合的杰作。通过无缝整合相关信息检索和生成与背景相关的响应&#xff0c;RAG模型在人工智能领域达到了前所未有的复杂程度。 2、rag工作流程 2.1、rag整体框架 query通过llm处理后&…

ISO 19115-3:2023 基本概念的 XML 架构实现

前言 ISO(国际标准化组织)是由各国标准化机构(ISO 成员机构)组成的全球性联合会。制定国际标准的工作通常由 ISO 技术委员会完成。对某一技术委员会所关注的主题感兴趣的每个成员机构都有权在该委员会中派代表。与 ISO 联络的国际组织、政府和非政府组织也参与工作。ISO 与…

3.haproxy负载均衡

haproxy负载均衡 一、haproxy介绍1、负载均衡类型 二、haproxy配置文件1、backend2、frontend 三、haproxy实现MySQL负载均衡 —— 4层1、后端两台MySQL配置双主复制2、安装配置haproxy2.1 安装软件2.2 编辑配置2.3 启动haproxy2.4 测试通过haproxy正常连接MySQL 四、haproxy实…

张大哥笔记:从古至今,赚钱最快的路子就一个,从未改变

从古至今&#xff0c;赚钱最快的路子就一个&#xff0c;而且从未改变&#xff0c;那就是信息差&#xff01; 不要误解信息差为某种高端复杂的概念&#xff1b;其本质很简单——它就是"你知道而别人不知道的信息"。 曾经我也认为&#xff0c;随着互联网的发展&#x…

Ubuntu20.04配置qwen0.5B记录

环境简介 Ubuntu20.04、 NVIDIA-SMI 545.29.06、 Cuda 11.4、 python3.10、 pytorch1.11.0 开始搭建 python环境设置 创建虚拟环境 conda create --name qewn python3.10预安装modelscope和transformers pip install modelscope pip install transformers安装pytorch co…