13-爬取图片、打包发送

13-爬取图片、打包发送

例子:从image.so通过接口获取图片并下载

本次的例子用这个接口拿图片:https://image.so.com/zjl?sn=30&ch=beauty

import os
import requests

def download_pic(path, url):
    """
    下载图片
    :param path: 保存路径
    :param url: 图片的url
    :return: 无返回值
    """
    filename = url[url.rfind("/") + 1:]
    resp = requests.get(url)
    print(resp.status_code)
    with open(f"{path}{filename}", "wb") as file:
        file.write(resp.content)

def main():
    # 判断文件夹是否存在,如果不存在,创建
    if not os.path.exists("resources/images"):
        os.mkdir("resources/images")
    # 从接口请求拿到json数据
    resp = requests.get("https://image.so.com/zjl?sn=30&ch=beauty")
    beauty_list = resp.json()["list"]
    # 下载图片
    for beauty_dict in beauty_list:
        picture_url = beauty_dict["qhimg_url"]
        download_pic("resources/images/", picture_url)

if __name__ == '__main__':
    main()

文件打包

用到shutil这个库,这个库可以用来做一些复杂的文件操作

import shutil

# 获取命令路径
print(shutil.which("python"))
# 移动文件
shutil.move("resources/sports_scores.csv", "sports.csv")

给上面的图片打包:

shutil.make_archive("resources/mm", "zip", "resources/images")
# 压缩的路径和文件名, 压缩文件格式, 压缩对象路径

封装一个send_email()的方法,放在mytools.py里

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from urllib.parse import quote
import os

HOST = "smtp.qq.com"
PORT = 465
PASS = "xxx"
USER = "hanayo@kayotin.cn"

def send_email(sender, receivers, to_cc, subject="邮件主题", content="", filenames=[]):
    """
    发送邮件
    :param sender: 发件人
    :param receivers: 收件人列表
    :param to_cc: 抄送列表
    :param subject: 主题
    :param content: 正文
    :param filenames: 包含路径的文件列表
    :return: 无返回值
    """
    email = MIMEMultipart()
    email["From"] = sender
    email["To"] = ";".join(receivers)
    email["Cc"] = ";".join(to_cc)
    email["Subject"] = subject

    message = MIMEText(content, "html", "utf-8")
    email.attach(message)

    for filename in filenames:
        with open(filename, "rb") as file:
            attachment = MIMEText(file.read(), "base64", "utf-8")
            attachment["content-type"] = "application/octet-stream"
            file_name = os.path.split(filename)[1]
            file_name = quote(file_name)
            attachment["content-disposition"] = f"attachment;filename={file_name}"
            email.attach(attachment)

    smtp = smtplib.SMTP_SSL(HOST, PORT)
    smtp.login(USER, PASS)
    smtp.sendmail(sender, receivers, email.as_string())

获取文件路径

由于附件给的列表是一个带路径的列表,所以要处理一下。用os.path.split方法可以很方便的处理。

url = "resources/temp_res.csv"
path, filename = os.path.split(url)
print(path)      # 文件路径
print(filename)  # 文件名,带扩展名

最后的代码如下:

import os
import shutil
import requests
from my_tools import send_email
import time
import datetime


def download_pic(path, url):
    """
    下载图片
    :param path: 保存路径
    :param url: 图片的url
    :return: 无返回值
    """
    filename = url[url.rfind("/") + 1:]
    resp = requests.get(url)
    # print(resp.status_code)
    with open(f"{path}{filename}", "wb") as file:
        file.write(resp.content)


def main():
    # 判断文件夹是否存在,如果不存在,创建
    if not os.path.exists("resources/images"):
        os.mkdir("resources/images")
    # 从接口请求拿到json数据
    resp = requests.get("https://image.so.com/zjl?sn=30&ch=beauty")
    beauty_list = resp.json()["list"]
    # 下载图片
    for beauty_dict in beauty_list:
        picture_url = beauty_dict["qhimg_url"]
        download_pic("resources/images/", picture_url)
    shutil.make_archive("resources/mm", "zip", "resources/images")

    send_email("hanayo@kayotin.cn", ["ahjiang@capvision.com"],
               ["18237763193@163.com"], "发送图片", body, ["resources/mm.zip"])


body = f"""
测试发送图片【正文】
<H1>今天是 {datetime.datetime.today().strftime("%Y年%m月%d日")}</H1>
<H2>现在的时间是 {time.strftime('%H:%M:%S', time.localtime())}</H2>
<p style="color: green;">发送图片完毕~~~~</p>
"""

if __name__ == '__main__':
    main()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值