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()
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)