要实现从网站上下载图片,并压缩发送到指定邮箱中,可以按下面步骤进行编程。
一、从网络上下载图片:
这里我们使用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'])