python-requests - PYTHON:使用请求将多个图像保存到文件夹中
问题描述
我需要将所有 6 张图像保存到本地文件夹中。
我发现的脚本多次重写单个文件,最终只生成一张图片
import requests
img_list = ["https://ae01.alicdn.com/kf/HTB1tT70vhuTBuNkHFNRq6A9qpXa3.jpg", "https://ae01.alicdn.com/kf/HTB12HGkvwKTBuNkSne1q6yJoXXaR.jpg", "https://ae01.alicdn.com/kf/HTB1_yDic56guuRjy0Fmq6y0DXXaY.jpg", "https://ae01.alicdn.com/kf/HTB1RopgXffsK1RjSszgq6yXzpXa5.jpg", "https://ae01.alicdn.com/kf/HTB1R6sJXgHqK1RjSZFkq6x.WFXaF.jpg", "https://ae01.alicdn.com/kf/HTB1_XlhXojrK1RkHFNRq6ySvpXaR.jpg"]
for x in blob:
with open('/Users/reezalaq/PycharmProjects/wholesale/img/pic1.jpg', 'wb') as handle:
response = requests.get(x, stream=True)
if not response.ok:
print(response)
for block in response.iter_content(1024):
if not block:
break
handle.write(block)```
It needs to save all 6 images separately. No error message so far.
解决方案
该脚本每次都重写同一个文件,因为您使用的是相同的文件名,它永远不会改变。
问题在这里:
with open('/Users/reezalaq/PycharmProjects/wholesale/img/pic1.jpg', 'wb')
该open()
方法的第一个参数是文件路径。第二个参数是模式,您已设置为wb
或 write/binary。所以在你循环中,你正在重写pic1.jpg
每次的文件内容。(参见:https ://docs.python.org/3.5/library/functions.html#open )。
您可以在列表中预先定义文件名列表并将其用作文件名或执行更动态的操作,例如:
for img in img_list:
file_name = img.split('/')[-1]
with open(file_name, 'wb') as handle:
....
这将从您正在下载它的网站(例如,1HTB1tT70vhuTBuNkHFNRq6A9qpXa3.jpg
对于第一个 URL)获取图像的文件名,用作您系统上的文件名。(注意:这也假设名称是唯一的)。
编辑:
您可以在 for 循环之前定义文件夹路径。然后,您可以更改open()
方法以包含该路径。所以:
import os # do this at the top of your file
folder_path = '/Users/reezalaq/PycharmProjects/wholesale/img/'
for img in img_list:
with open(os.path.join(folder_path, file_name), 'wb') as handle:
....
推荐阅读
- shell - 在 Jenkins 中使用 nohup 时服务器无法上网
- optimization - 为什么 IBM 优化器工作室 OPL 给出的结果与 docplex 不同?
- makefile - 在 for 循环中使用 seq 时我的 Makefile 出错
- c# - 在 ASP.NET CORE 的 Startup.cs 中设置动态变量
- laravel - 为什么 HandleExceptions 在本地禁用错误显示?
- spring-boot - SpringBoot - 响应时间超过 30 秒时出现超时错误
- vba - 复制一个单元格中的所有内容并将其粘贴到 vba 中的一个范围内(类似于 ctrl + a 然后 ctrl + c,同时单击公式栏)
- vba - Excel VBA:我应该使用类模块吗?
- javascript - 在反应中,是否可以在调用 render() 之前在另一个组件的类函数中渲染一个组件
- azure - V2 Azure 函数 ServiceBusTrigger 不工作