我需要将所有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.
答案 0 :(得分:0)
该脚本每次都会重写同一文件,因为您使用的是相同的文件名,它永远不会更改。
问题在这里:
with open('/Users/reezalaq/PycharmProjects/wholesale/img/pic1.jpg', 'wb')
open()
方法的第一个参数是文件路径。第二个参数是模式,您已将其设置为wb
或写入/二进制。因此,在循环中,您每次都在重写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:
....
这将从您要下载图像的网站上获取图像的文件名(例如,第一个URL为1HTB1tT70vhuTBuNkHFNRq6A9qpXa3.jpg
)作为系统上的文件名。 (注意:这也假设名称是唯一的。)
修改:
您可以在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:
....