#python-3.x #beautifulsoup #python-requests #python-os
#python-3.x #beautifulsoup #python-запросы #python-os
Вопрос:
Мои коды работают хорошо, но имеют один недостаток. Они не сохраняются соответствующим образом. Например, допустим, я обнаружил 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. Откуда берется
soup_title
переменная? Я добавил ответ, но эта переменная выделяется как неопределенная с учетом предоставленного вами кода.2. извините за это, это не полное кодирование, я просто вставил, где проблемы.
Ответ №1:
Попробуйте это при записи файлов изображений:
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 автоматически закроет дескриптор файла для вас.
Комментарии:
1. Большое вам спасибо, функция «enumerate» отлично разделила все фрагментированные ссылки img. Мне еще так многому нужно научиться. Спасибо за советы.
2. я нашел кое-что интересное, почему порядок сохранения снизу вверх? последний первый — это логика python?
3. Нет, этого вообще не должно быть. Первый файл в
soup_imgs
будет сохранен первым.