Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 文件以单一名称重复保存,无循环,无范围_Python 3.x_Beautifulsoup_Python Requests_Python Os - Fatal编程技术网

Python 3.x 文件以单一名称重复保存,无循环,无范围

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(

我的代码运行良好,但有一个缺陷。他们没有相应地储蓄。例如,假设我捕获了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('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
中的第一个文件将是第一个保存的文件。