python oss上传图片
1.阿里云OSS
创建用于测试的Bucket
测试的Bucket名称:test–space
读写权限根据自己需求(这里我设置的如下)
2. 获取Access Key
可以在RAM访问控制中创建一个用户赋予只是对OSS管理的权限
RAM访问控制:https://ram.console.aliyun.com/overview
3.脚本
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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()
oss 配置
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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)