1:由于之前做了云上的项目,刚入手看oss的文档有点费力,因为有些变量阿里说的并不是很详细。今天刚好又用了一遍就把它扔出来。此处使用的是最简单的下载到本地再上传,并未实时并发。如果量大请另行参考阿里文档
从数据库取出接口下载
#下载
def agoda_img(self,id,pics):
image_list=[]
values=pics.split(",")
header = {
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36",
}
#多图片下载
for i in range(len(values)):
url = values[i]
ir = requests.get(url, headers=header)
if ir.status_code == 200:
# 成功保存图片
abspath = "/root/wcspider/ctrip_up/agoda_image"
path = abspath + "/" + str(id)
# 创建文件
if not os.path.exists(path):
os.makedirs(path)
paths = str(id)+"_"+str(i)+ ".jpg"
#将图片在Linux系统上移到指定位置,已存在跳过本次循环说明已下载
with open(paths, 'wb') as f:
f.write(ir.content)
name = os.path.basename(paths) # 获取文件名
dirname = os.path.dirname(paths) # 获取文件目录
full_path = os.path.join(dirname, name)
try:
shutil.move(full_path, path) ##转移文件到目标文件夹
except Exception as e:
print("图片已下载")
continue
fname = path + "/" + paths
#oss配置,文档上有,key比较关键它是阿里云的目标目录
endpoint = 'http://oss-cn-hangzhou.aliyuncs.com'
access_key_id = 'LTAIdDUS3bCbQILs'
access_key_secret = '16CvB9kL5D7KMgxavAzMCd27D8Afn2'
bucket_name = 'lohas-changzhou'
key = "foreign_hotel/" + paths
####上传图片到阿里云并记录成功的URL,先删除图片防止二次上传报错
deleimg = "foreign_hotel/" + paths.split(".")[0]
try:
bucket = oss2.Bucket(oss2.Auth(access_key_id, access_key_secret), endpoint, bucket_name)
bucket.delete_object(deleimg)
res_back = bucket.put_object_from_file(key, filename=fname)
if res_back:
imageimg = "https://lohas-changzhou.oss-cn-hangzhou.aliyuncs.com/foreign_hotel/" + paths
image_list.append(imageimg)
ress_3 = 1
print('上传成功:%s' % fname)
except Exception as e:
ress_3 = 0
print('图片失败', fname)
# self.run_state(ress_3, id)
#存储下载成功的图片链接到数据库供调用
pic=None
pics = ",".join(image_list)
for m in image_list:
if (str(id) + "_0") in m:
pic = m
break
else:
pic = image_list[0]
#如已上传就不用写入了
if pic and pics:
self.insert_sql(id, pic, pics)
字符串拼接稍后在写