python oss上传图片

1.阿里云OSS

创建用于测试的Bucket
测试的Bucket名称:test–space
读写权限根据自己需求(这里我设置的如下)

 

 

 

 

 

 

2. 获取Access Key

可以在RAM访问控制中创建一个用户赋予只是对OSS管理的权限
RAM访问控制:https://ram.console.aliyun.com/overview
在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.脚本

from bs4 import BeautifulSoup
import pymysql, requests, time
import urllib.request
import oss
from io import BytesIO
from dateutil.parser import parse


# 获取图片地址
def get_img():
    global list_str
    list_str = []
    # 头部信息
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36'}
    # 请求的地址
    url1 = 'https://www.tianqi.com/wxyt/'
    result = requests.get(url1, headers=headers)
    soup = BeautifulSoup(result.text, "html.parser")
    targetCode = soup.select("#weixing_img option")
    # 循环拿选择器的数据
    for i in targetCode:
        # 拿到日期(作为文件名)
        data_str = str(i.attrs.get("value")) + ".jpg"
        data = i.attrs.get("value")
        data_time = parse(data[:-5])
        urls = 'https://pi.weather.com.cn/i/product/pic/m/sevp_nsmc_wxcl_asc_e99_achn_lno_py_' + data_str
        f = urllib.request.urlopen(urls)
        res = f.read()
        bytes_stream = BytesIO(res)
        size = len(res) / 1e3
        if size <= 40:
            print('不合适{%s}:{%s}' % (data_str, size))
        else:
            oss.img(data_str, bytes_stream)
            conn = pymysql.connect(host=host, port=3306, db=db, user=user,passwd=passwd, charset='utf8')
            cursor = conn.cursor()
            # 拼接oss的图片地址
            url = "https://文件名.oss-cn-shanghai.aliyuncs.com/" + data_str
            sql_insert = '''insert into img(str_time,url) value('%s','%s')''' % (str(data_time), url)
            # 提交sql语句,映射到数据库中。
            print("insert ok!")
            # 删除重复的数据
            sql_del = '''delete from img where id not in (
                                select t.max_id from
                                (select max(id) as max_id from img group by str_time,url) as t
                                )'''
            print("delete ok!")
            # 执行sql语句
            cursor.execute(sql_insert)
            cursor.execute(sql_del)
            conn.commit()
            # 关闭数据库连接
            conn.close()


if __name__ == '__main__':
        get_img()
img

oss 配置

import oss2
def img(data_str, bytes_stream):
    # id与密钥
    auth = oss2.Auth('账号', '密钥')
    # 域名(根据自己选的地区修改域名)
    endpoint = 'http://oss-cn-域名.aliyuncs.com'
    endpoint = 'http://oss-cn-shanghai.aliyuncs.com'
    # 文件名
    bucket = oss2.Bucket(auth, endpoint, '文件名')
    bucket.put_object(data_str, bytes_stream)
oss

 

posted @ 2020-12-16 13:37  zhw_sylvia  阅读(740)  评论(1编辑  收藏  举报