IMG файлы не сохраняются так, как я думал - PullRequest
1 голос
/ 02 апреля 2019

Мои коды работают хорошо, но есть один недостаток.Они не экономят соответственно.Например, допустим, я перехватил 3 файла jpeg, когда я запускал коды, он экономит 3 раза в слоте 1, 3 раза в слоте 2 и 3 раза в слоте 3. Таким образом, я получил 3 одинаковых файла.

Я думаю, что-то не так с моей логикой зацикливания?Если я изменил for n in range(len(soup_imgs)): на for n in range(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)

Я - любитель кодирования, только недавно начавший свое хобби.Пожалуйста, дайте мне руководство, шефы.

1 Ответ

2 голосов
/ 02 апреля 2019

Попробуйте, когда пишете файлы изображений:

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 из предыдущего блока for.

Я также добавил более безопасный метод соединения путей к каталогам и файлам, который не должен зависеть от ОС. Наконец, при открытии файла всегда используйте конструкцию with open() as f: - таким образом Python автоматически закроет дескриптор файла для вас.

...