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