Python 3.x 文件以单一名称重复保存,无循环,无范围
我的代码运行良好,但有一个缺陷。他们没有相应地储蓄。例如,假设我捕获了3个jpeg文件,当我运行代码时,它在插槽1上保存了3次,在插槽2上保存了3次,在插槽3上保存了3次。所以我得到了3个相同的文件 我认为我的循环逻辑有问题? 如果我将范围内n(len(soup_imgs))的Python 3.x 文件以单一名称重复保存,无循环,无范围,python-3.x,beautifulsoup,python-requests,python-os,Python 3.x,Beautifulsoup,Python Requests,Python Os,我的代码运行良好,但有一个缺陷。他们没有相应地储蓄。例如,假设我捕获了3个jpeg文件,当我运行代码时,它在插槽1上保存了3次,在插槽2上保存了3次,在插槽3上保存了3次。所以我得到了3个相同的文件 我认为我的循环逻辑有问题? 如果我将范围内n(len(soup_imgs))的:更改为范围内n(len(src))的:,该操作将无限保存最后的jpeg文件 soup_imgs = soup.find(name='div', attrs={'class':'t_msgfont'}).find_all(
:
更改为范围内n(len(src))的:
,该操作将无限保存最后的jpeg文件
soup_imgs = soup.find(name='div', attrs={'class':'t_msgfont'}).find_all('img', alt="", src=re.compile(".jpg"))
for i in soup_imgs:
src = i['src']
print(src)
dirPath = "C:\\__SPublication__\\"
img_folder = dirPath + '/' + soup_title + '/'
if (os.path.exists(img_folder)):
pass
else:
os.mkdir(img_folder)
for n in range(len(src)):
n += 1
img_name = dirPath + '/' + soup_title + '/' + str({}).format(n) + '.jpg'
img_files = open(img_name, 'wb')
img_files.write(requests.get(src).content)
print("Outputs:" + img_name)
我是一名业余编码爱好者,不久前刚刚开始作为我的业余爱好。请给我一些指导,酋长们。在编写图像文件时尝试以下方法:
from os import path
for i, img in enumerate(soup_imgs):
src = img['src']
img_name = path.join(dirPath, soup_title, "{}.jpg".format(i))
with open(img_name, 'wb') as f:
f.write(requests.get(src).content)
print("Outputs:{}".format(img_name))
您需要在所有图像源上循环,而不是对块使用上一个的最后一个src
值
我还添加了一种更安全的方法,用于连接独立于操作系统的目录和文件路径。最后,在打开文件时,始终使用带有open()的作为f:
构造-这样Python会自动为您关闭文件句柄。变量soup\u title
来自哪里?我添加了一个答案,但鉴于您提供的代码,此变量未定义。很抱歉,这不是完整的编码,我只是将问题粘贴到了哪里。非常感谢您,“枚举”函数将所有分块的img链接完美地分隔开。我还有很多东西要学。谢谢你的提示。我发现了一些有趣的事情,为什么保存顺序是自下而上的?最后一个是python逻辑?不,根本不应该是这样。soup\u imgs
中的第一个文件将是第一个保存的文件。