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

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

一、从网络上下载图片:

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

1、安装

pip install requests

2、编写下载图片函数

import requests


def 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 MIMEMultipart

from urllib.parse import quote

sender_email = 'your_email@example.com' 
sender_password = 'your_email_password_or_app_password'

smtp_server = 'smtp.163.com'
smtp_port = 465


def send_mail(receiver_email, receiver_name, receiver_theme, content='', filenames=[]):
    """发送邮件"""
    email = MIMEMultipart()
    email['From'] = sender_email
    email['To'] = ';'.join(receiver_name)
    email['Subject'] = receiver_theme

    message = 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 filename
            display_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'])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不在同一频道上的呆子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值