当前位置: 首页 > news >正文

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())

相关文章:

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].spl…...

力扣 42. 接雨水

题目来源&#xff1a;https://leetcode.cn/problems/trapping-rain-water/description/ C题解1&#xff1a;双指针 按列算&#xff0c;一列一列的求雨水面积。使用双指针是记录当前列左右侧的最大元素。 class Solution { public:int trap(vector<int>& height) {in…...

Elastic Platform 8.14:ES|QL 正式发布、静态加密和向量搜索优化

作者&#xff1a;来自 Elastic Gilad Gal, Tyler Perkins, Alex Chalkias, Trevor Blackford, Ninoslav Miskovic, Fabio Busatto, Aris Papadopoulos Elastic Platform 8.14 提供了 Elasticsearch 查询语言 (ES|QL) 的正式发行版 (GA) — Elastic 中数据探索和操作的未来。它还…...

UE4获取动画序列资产的动画时长

谢谢”朝闻道“大佬的指点~...

win10怎么截图?电脑截图的3个方法分享

win10怎么截图&#xff1f;在Windows 10操作系统中&#xff0c;截图功能不仅强大而且极其便捷。无论用户需要快速捕捉整个屏幕的内容&#xff0c;还是精确截取屏幕上的特定区域&#xff0c;它都能迅速响应并满足需求。通过内置的截图工具和快捷键&#xff0c;我们可以轻松完成各…...

无线领夹麦克风哪个品牌性价比高?推荐领夹麦克风性价比最高品牌

当今的直播、短视频已经深深的融入到了我们的生活当中&#xff0c;很多小伙伴会通过拍摄短视频、Vlog来分享自己生活精彩的瞬间。不过录制视频时&#xff0c;如果单纯靠手机拾音&#xff0c;距离手机越远&#xff0c;声音越小越不清晰如果有噪音干扰&#xff0c;那更是“惨不忍…...

C语言----深入理解指针(5)

1.sizeof和strlen的对比 sizeof计算变量所占内存空间的大小的&#xff0c;单位是字节 sizeof只关注内存空间的大小&#xff0c;不在乎内存中方的什么数据 sizeof是操作符不是函数 sizeof会将\0算进去的 // sizeof计算变量所占内存空间的大小的&#xff0c;单位是字节int m…...

Ansible——cron模块

目录 参数总结 示例1&#xff1a;创建一个定时任务 示例2&#xff1a;删除一个定时任务 示例3&#xff1a;每周一早上 3 点清理临时文件 示例4&#xff1a;每小时运行一次日志轮转 示例5&#xff1a;为指定用户添加一个定时任务 Playbook (YAML 格式) 中管理定时任务。 …...

保存图片奇怪的bug

今天发现一个奇怪的bug 这个的dpi是100de ,但是我取完切片之后&#xff0c;发现这个结果就变了...

【Go语言精进之路】构建高效Go程序:了解map实现原理并高效使用

&#x1f525; 个人主页&#xff1a;空白诗 &#x1f525; 热门专栏&#xff1a;【Go语言精进之路】 文章目录 引言一、什么是map1.1 map的基本概念与特性1.2 map的初始化与零值问题1.3 map作为引用类型的行为 二、map的基本操作2.1 插入数据2.2 获取数据个数2.3 查找和数据读取…...

【机器人和人工智能——自主巡航赛项】进阶篇

文章目录 案例要求创建地图rviz仿真 保存地图坐标点定位识别训练主逻辑理解语音播报模块匹配二维码识别多点导航讲解视频其余篇章 案例要求 创建地图 ./1-gmapping.sh 把多个launch文件融合在sh文件里面 rviz仿真 rviz是rose集成的可视化界面&#xff0c;查看机器人的各项数…...

[大师C语言(第二十五篇)]C语言字符串探秘

引言 字符串是编程中不可或缺的基本数据类型之一&#xff0c;它用于表示和操作文本数据。在C语言中&#xff0c;字符串以一种独特的方式实现&#xff0c;与许多其他编程语言的处理方式不同。本文将深入探讨C语言字符串背后的技术&#xff0c;帮助你更好地理解和应用字符串。 …...

xLua(一) 环境安装笔记

为了方便查阅记录一下xLua的安装地址及方法 1.登录地址下载: https://github.com/Tencent/xLua 2.解压文件 将文件中的这些内容拷贝到项目中的Asset文件夹中 注意 : 工程项目路径不得含有中文 3.将Tools复制到Asset同级目录下 4.导入后会发现有Bug,需要导入工程 5.还有另…...

Python基础教程(十一):数据结构汇总梳理

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; &#x1f49d;&#x1f49…...

制造型企业图纸泄露问题,如何从根源解决核心文件资料泄露问题?

制造型企业最核心重要的文件当然是图纸&#xff0c;图纸在制造型企业中起到关键主导地位&#xff0c;如果图纸泄露与研发性企业源代码被泄露一样的严重&#xff0c;制造型企业如何保护核心图纸不被外泄是企业在日常经营过程中的重要组成部分&#xff0c;现在有很多防止泄露的产…...

英伟达最新GPU和互联路线图分析

Nvidia在计算、网络和图形领域独树一帜&#xff0c;其显著优势在于雄厚的资金实力及在生成式人工智能市场的领先地位。凭借卓越的架构、工程和供应链&#xff0c;Nvidia能够自由实施创新路线图&#xff0c;引领行业未来。 到 21 世纪&#xff0c;Nvidia 已经是一个非常成功的创…...

Github 2024-06-10 开源项目日报 Top10

根据Github Trendings的统计,今日(2024-06-10统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量C项目2Go项目2PHP项目1Blade项目1TypeScript项目1Lua项目1Dart项目1Swift项目1Cuda项目1Python项目1MDX项目1Ventoy: 100%开源的可启动USB解决方…...

前后端分离项目中Spring Boot返回的时间与前端相差8个小时

概述 今天在做一个前后端分离项目时,发现从后端获取的时间与从数据库获取的时间相差八个小时&#xff0c;最终排查后发现由于Springboot使用本地时区导致&#xff0c;修改SpringBoot时区后解决 环境 MySQL8SpringBoot 原因排查 发现从后端获取的数据总是比前端快八个小时 …...

stm32MP135裸机编程:使用USB/UART烧录程序到SD卡并从SD卡启动点亮一颗LED灯

0 参考资料 轻松使用STM32MP13x - 如MCU般在cortex A核上裸跑应用程序.pdf STM32CubeProgrammer v2.16.0 烧录需要的二进制文件1 烧录到SD卡需要哪些文件 参考《轻松使用STM32MP13x - 如MCU般在cortex A核上裸跑应用程序》&#xff0c;烧录需要的SD卡文件如下&#xff1a; &a…...

【NoSQL数据库】Redis Cluster集群(含redis集群扩容脚本)

Redis Cluster集群 Redis ClusterRedis 分布式扩展之 Redis Cluster 方案功能数据如何进行存储 redis 集群架构集群伸缩向集群中添加一个新的master节点&#xff0c;并向其中存储 num10 .脚本对redis集群扩容缩容&#xff0c;脚本参数为redis集群&#xff0c;固定从6001移动200…...

重邮计算机网络803-(2)物理层

一.物理层 1.介绍 物理层的主要任务描述为确定与传输媒体的接口的一些特性&#xff0c;即&#xff1a; ①机械特性 指明接口所用接线器的形状和尺寸、引线数目和排列、固定和锁定装置等等。 ②电气特性 指明在接口电缆的各条线上出现的电压的范围。 ③功能特性 指明某条线上…...

uniapp使用webview内嵌H5的注意事项

一、描述 uniapp项目中构建app&#xff0c;需要内嵌H5页面&#xff0c;在使用webview时&#xff0c;遇到了以下几个问题&#xff1a; 内嵌H5&#xff0c;默认全屏显示&#xff1b;内嵌页面遮挡住了app的自定义tabbar组件&#xff1b;样式修改无效&#xff1b; 二、解决方案&a…...

现代 C++的高效并发编程模式

现代C提供了许多高效的并发编程模式&#xff0c;以满足日益增长的多核和分布式系统的需求。以下是一些常用的高效并发编程模式&#xff1a; 异步编程&#xff1a;使用std::async来创建异步任务&#xff0c;可以在后台执行任务&#xff0c;将结果返回给调用者。 并行编程&#…...

汇编语言作业(五)

目录 一、实验目的 二、实验内容 三、实验步骤以及结果 四、实验结果与分析 五、 实验总结 一、实验目的 1.熟悉掌握汇编语言的程序结构&#xff0c;能正确书写数据段、代码段等 2&#xff0c;利用debug功能&#xff0c;查看寄存器&#xff08;CS,IP,AX,DS..)及数据段的…...

收音机的原理笔记

1. 收音机原理 有线广播&#xff1a;我们听到的声音是通过空气振动进行传播&#xff0c;因此可以通过麦克风&#xff08;话筒&#xff09;将这种机械振动转换为电信号&#xff0c;传到远处&#xff0c;再重新通过扬声器&#xff08;喇叭&#xff09;转换为机械振动&#xff0c…...

排序算法案例

排序算法概述 排序算法是计算机科学中的一个重要主题&#xff0c;用于将一组数据按特定顺序排列。排序算法有很多种&#xff0c;每种算法在不同情况下有不同的性能表现。不同的排序算法适用于不同的场景和数据特征。在选择排序算法时&#xff0c;需要考虑数据规模、数据分布以…...

时间序列评价指标

评价指标 均方误差&#xff08; M S E MSE MSE&#xff09; 定义&#xff1a;预测值与实际值之间差异的平方和的平均值。公式&#xff1a; ( M S E 1 n ∑ i 1 n ( y i − y ^ i ) 2 ) (MSE \frac{1}{n}\sum_{i1}^{n}(y_i - \hat{y}_i)^2) (MSEn1​∑i1n​(yi​−y^​i​)…...

Docker:安装 Orion-Visor 服务器运维的技术指南

请关注微信公众号&#xff1a;拾荒的小海螺 博客地址&#xff1a;http://lsk-ww.cn/ 1、简述 Orion-Visor 是一种用于管理和监控容器的工具。它提供了一个直观的界面&#xff0c;用于查看容器的状态、资源使用情况以及日志等信息。在这篇技术博客中&#xff0c;我们将介绍如何…...

HarmonyOS Next 系列之底部标签栏TabBar实现(三)

系列文章目录 HarmonyOS Next 系列之省市区弹窗选择器实现&#xff08;一&#xff09; HarmonyOS Next 系列之验证码输入组件实现&#xff08;二&#xff09; HarmonyOS Next 系列之底部标签栏TabBar实现&#xff08;三&#xff09; 文章目录 系列文章目录前言一、实现原理二、…...

mac怎么录制屏幕?这2个方法你值得拥有

在数字化时代&#xff0c;屏幕录制已经成为一种常见且重要的工具&#xff0c;无论是教学演示、游戏直播还是会议记录&#xff0c;屏幕录制都发挥着不可或缺的作用。对于Mac用户而言&#xff0c;如何高效、便捷地进行屏幕录制&#xff0c;是一个值得探讨的话题&#xff0c;可是很…...

宁波规划建设局网站/西安网站关键词排名

微信回复图片 注意是mediaId&#xff0c;不是messageId&#xff1b; 这个注意了&#xff0c;其他与文本消息一致&#xff1b; package com.tuling.model;import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml…...

中国建设银行重庆网站首页/上海百度提升优化

简介 这里我想说的是&#xff0c;程序本身不需要关心表的结构&#xff0c;只需要按照视图定义来取数据或更新数据。 什么是视图 说起视图呢&#xff0c;就是说它相当于一个虚拟的表&#xff0c;你看不到它&#xff0c;但是你可以根据它来更新和操作表&#xff0c;视图中的wi…...

恩施市住房和城乡建设局网站/seo工具软件

闭包的优点&#xff0c;延长或扩大了变量的使用范围&#xff0c;延长了变量的使用时间&#xff0c;2.避免了变量命名的冲突 缺点&#xff1a;如果乱用闭包&#xff0c;会造成空间的浪费 创建person新实列&#xff1a;1创建一个新对象 2.将构造函数的作用域赋给新对象&#xff0…...

安宁网站建设 熊掌号/百度高级搜索技巧

10.1文件概念10.1.1文件属性10.1.2文件操作&#xff1a;10.1.3文件类型10.1.4文件结构 10.2访问方法10.3目录结构10.3.1存储结构10.3.2目录概述10.3.3单层结构目录10.3.4双层结构目录10.3.5树结构目录10.3.6无环图目录10.3.7通用图目录 10.4文件系统安装10.5文件共享10.5.1多用…...

教育培训的网站建设/软文是什么

作为一个从事.NET Web技术的开发人员&#xff0c;似乎没有什么理由可以不懂微软自己的AJAX框架&#xff0c;虽然它可能不太好用&#xff0c;或者用起来没有像jQuery这样的框架那么爽。我没有怎么用过UpdatePanel来做过复杂的东西&#xff0c;所以对于这个的优缺点就不予置评了。…...

phpcms做网站建栏目/网络策划方案

Gym-101502K Malek and Summer Semester 题目链接 题意&#xff1a; M这学期修了n门课&#xff0c;给出这些课的分数&#xff0c;判断这学期M是否通过。 M要通过这学期&#xff0c;必须至少通过ceil(n*m)门课。 m输入会给出&#xff0c;一门课的成绩>50才算做通过。ceil(x)…...