099、Python 从网站上下载图片,并压缩发送到指定邮箱中

要实现从网站上下载图片,并压缩发送到指定邮箱中,可以按下面步骤进行编程。

一、从网络上下载图片:

这里我们使用requests 模块,requests 模块是一个非常流行的 HTTP 库,用于发送各种 HTTP 请求。

1、安装

pip install requests

2、编写下载图片函数

import requestsdef download_picture(path, url):"""下载图片"""filename = url[url.rfind('/') + 1:]resp = requests.get(url)with open(f'{path}{filename}', 'wb') as file:file.write(resp.content)

二、归档压缩文件

要实现归档压缩文件,我们可以使用shutil 模块。

shutil 模块是一个高级的文件、文件夹、压缩包处理模块。它提供了许多易于使用的函数,用于文件的复制、移动、删除以及目录(文件夹)的创建、复制、移动、删除等。此外,它还支持文件的归档和压缩功能。shutil 模块是 Python 标准库里面的模块,所以我们无需安装库就可以直接引用。

这里我编写了一个main函数,实现使用步骤1编写的函数download_picture()在360网站下载图片数据,并调用shutil 模块中的make_archive()函数进行压缩,具体实现如下:

def main():# 如果指定文件夹不存在就创建文件夹if not os.path.exists('Resources/image'):os.makedirs('Resources/image')# 通过image360网站的接口获取Json数据resp = requests.get('https://image.so.com/zjl?sn=0&ch=copyright&t1=30')picture_list = resp.json()['list']for picture_dict in picture_list:picture_url = picture_dict['qhimg_url']download_picture('Resources/image/', picture_url)# 生成归档文件(带压缩)shutil.make_archive('Resources/yasuo', 'zip', 'Resources/image')

到此,我们基本完成了大部分工作,就剩下把文件发送到指定邮箱了。

具体发送邮箱实现可以参考:https://blog.csdn.net/mr_five55/article/details/140747709

三、发送文件到指定邮箱

这里根据上面的参考案例,我优化和封装了下发送邮箱的方法,以便可以方便快捷发送步骤二中的压缩文件,具体实现如下:

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipartfrom urllib.parse import quotesender_email = 'your_email@example.com' 
sender_password = 'your_email_password_or_app_password'smtp_server = 'smtp.163.com'
smtp_port = 465def send_mail(receiver_email, receiver_name, receiver_theme, content='', filenames=[]):"""发送邮件"""email = MIMEMultipart()email['From'] = sender_emailemail['To'] = ';'.join(receiver_name)email['Subject'] = receiver_thememessage = MIMEText(content, 'plain', 'utf-8')email.attach(message)for filename in filenames:with open(filename, 'rb') as file:pos = filename.rfind('/')display_filename = filename[pos + 1:] if pos >= 0 else filenamedisplay_filename = quote(display_filename)attachment = MIMEText(file.read(), 'base64', 'utf-8')attachment['content-type'] = 'application/octet-stream'attachment['content-disposition'] = f'attachment; filename="{display_filename}"'email.attach(attachment)try:server = smtplib.SMTP_SSL(smtp_server, smtp_port)server.login(sender_email, sender_password)server.sendmail(sender_email, [receiver_email], email.as_string())server.quit()print("邮件发送成功")except smtplib.SMTPException as e:print("邮件发送失败:", e)

最后我们再调用以上发送邮件方法,即可发送我们在网络下载并压缩的文件了:

send_mail('receiver_email@example.com', '我', '资源分享', '附件有下载内容,请查收!', ['Resources/yasuo.zip'])

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

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

相关文章

论文阅读-《Distant Supervision for Relation Extraction beyond the Sentence Boundary》

文章提出了首个将远程监督应用于跨句子关系提取的方法,通过整合句内和句间关系,利用图表示和多路径特征提取提高了准确性和鲁棒性。 摘要 文章提出了一种新的方法,用于在远程监督下进行跨句子的关系抽取。这种方法利用图表示来整合依赖和话…

常用传感器讲解十五--触摸传感器(KY-036)

常用传感器讲解十五–触摸传感器(KY-036) 具体讲解 这个比较简单,就是触摸后给个信号 电路连接 在Arduino上将VCC引脚连接到5V。 将GND连接到Arduino的GND。 将OUT连接到Arduino上的D2 代码实现 void setup() {pinMode(2, INPUT);Seri…

spark 3.0.0源码环境搭建

环境 Spark版本:3.0.0 java版本:1.8 scala版本:2.12.19 Maven版本:3.8.1 编译spark 将spark-3.0.0的源码导入到idea中 执行mvn clean package -Phive -Phive-thriftserver -Pyarn -DskipTests 执行sparksql示例类SparkSQLExam…

Kotlin 的优势:现代编程语言的卓越选择

文章目录 简洁与优雅的语法空安全特性函数式编程,支持高阶函数、lambdaKotlin 内联函数与 Java 的互操作性强大的类型推断协程支持lazy 委托object 单例模式区间表达式现代的开发工具支持 本文首发地址 https://h89.cn/archives/301.html 最新更新地址 https://gite…

科学设计程序员面试内容,破解“八股文”之弊

“八股文”在实际工作中是助力、阻力还是空谈? 作为现在各类大中小企业面试程序员时的必问内容,“八股文”似乎是很重要的存在。但“八股文”是否能在实际工作中发挥它“敲门砖”应有的作用呢?有IT人士不禁发出疑问:程序员面试考…

Lombok注解之@SneakyThrows作用

Lombok注解之SneakyThrows作用 读法 [ˈsniːki] [θroʊz] 悄悄的 抛出顾名思义,它能够自动偷摸的为咱们的代码生成一个try…catch块,并把异常向上抛出来。 使用 SneakyThrows的使用范围: 只能作用在方法和构造函数之上。从源码就可以…

C# dataGridView 去掉左边多出来空列

1.问题 在使用winform做界面程序时,dataGridView控件创建好后,左侧会多出一列为空,如何删除呢 2.解决方法 你可以在属性窗口中进行设置 如图: 将RowHeadersVisible 属性设置为False 或者代码设置 this.dataGridView1.RowHea…

我们的前端开发逆天了!1 小时搞定了新网站,还跟我说 “不要钱”

大家好,我是程序员鱼皮。前段时间我们上线了一个新软件 剪切助手 ,并且针对该项目做了一个官网: 很多同学表示官网很好看,还好奇是怎么做的,其实这个网站的背后还有个有趣的小故事。。。 鱼皮:我们要做个官…

playbooks 分布式部署 LNMP

1、环境配置 ansible 服务器 192.168.10.10nginx 服务器 192.168.10.20mysql 服务器 192.168.10.21php 服务器 192.168.10.22 2、安装 ansble #192.168.10.10节点 yum install -y epel-release #先安装 epel 源 yum install -y ansible配置主机清单 …

计算机毕业设计-程序论文-基于web线上项目竞标平台的开发与实现

本系统开发采用技术为JSP、Bootstrap、Ajax、SSM、Java、Tomcat、Maven 此文章为本人亲自指导加编写,禁止任何人抄袭以及各类盈利性传播, 相关的代码部署论文ppt代码讲解答辩指导文件都有可私要 项目源码,请关注❥点赞收藏并私信博主&#x…

001.精读《Big Data: A Survey》

文章目录 1. 引言2. 精读2.1 摘要2.2 背景2.4 相关技术2.5 相关流程2.6 应用场景 3. 总结 1. 引言 大数据精读周刊首次与大家正式见面。我们每周将精读并分析几篇精选文章,试图讨论并得出结论性观点。我们的目标是通过深入探讨,帮助大家更好地理解大数据…

阿里玄铁处理器涉及的相关技术居然有PHP

其实跟PHP没啥关系,也可以说有点关系 指令集说明: RISC-V 指令集是由美国加州大学伯克利分校(University of California, Berkeley)的研究人员开发的。该项目主要由Krste Asanović教授领导,并且得到了计算机体系结构…

springboot+vue+mybatis线上选课系统+PPT+论文+讲解+售后

在如今社会上,关于信息上面的处理,没有任何一个企业或者个人会忽视,如何让信息急速传递,并且归档储存查询,采用之前的纸张记录模式已经不符合当前使用要求了。所以,对学生选课信息管理的提升,也…

FastAPI(七十二)实战开发《在线课程学习系统》接口开发-- 留言列表开发

源码见:"fastapi_study_road-learning_system_online_courses: fastapi框架实战之--在线课程学习系统" 之前我们分享了FastAPI(七十一)实战开发《在线课程学习系统》接口开发-- 查看留言,这次我们分享留言列表开发。 获…

Git 创建分支进行写作开发

第一次链接仓库提交 and 有SSH公匙 第一步&#xff1a; git clone 远程仓库链接clone 远程已有仓库到本地 第二部&#xff1a; cd 文件夹 第三步&#xff1a; git checkout -b <your_branch_name> 创建分支 第四步&#xff1a; git add . 将目前目录下的所有文件…

用frp内网穿透https网站

场景说明 在微信小程序上线测试的时候&#xff0c;自主开发的后端服务在公司局域网&#xff0c;小程序前端在微信公众平台只支持配置https协议的域名来访问服务端。公司一直在使用frp内网穿透工具实现公网访问公司局域网服务&#xff0c;因此&#xff0c;研究如何实现frp代理h…

Java高手之路:每日一练,技能精进秘籍

目录 一、题目知识点java中有两种方式实现线程Servlet生命周期总结 一、题目 选自牛客网 1.后端获取数据&#xff0c;向前端输出过程中&#xff0c;以下描述正确的是 A.对于前端过滤过的参数&#xff0c;属于可信数据&#xff0c;可以直接输出到前端页面 B.对于从数据库获得的…

【YOLOv5/v7改进系列】引入YOLOv9的RepNCSPELAN4

一、导言 YOLOv9的几个主要创新点&#xff1a; Programmable Gradient Information (PGI): PGI是一种机制&#xff0c;用于应对深度网络中实现多目标所需要的多种变化。PGI提供完整的输入信息来计算目标函数&#xff0c;从而获得可靠的梯度信息以更新网络权重。PGI可以自由选择…

TCP/IP协议——使用Socket套接字实现

目录 Socket 使用Socket实现TCP客户端和服务器的过程 使用Socket搭建TCP服务器 线程优化 向客户端发送消息 连接的断开 客户端主动断开 服务端主动断开 服务器完整的程序 使用Socket编写客户端程序连接TCP服务器 Socket Socket是一种网络通信协议&#xff0c;它允许…

x-cmd pkg | yazi - 超快终端文件管理器

目录 简介快速入门功能特点竞品和相关项目进一步阅读 简介 yazi 是由 github.com/sxyazi 用 Rust 开发的终端文件管理器&#xff0c;支持预览文本文件、pdf 文件、图像、视频&#xff0c;内置代码高亮功能。在内部&#xff0c;它使用 Tokio 作为其异步运行时&#xff0c;以非阻…