Проблема увеличения имени файла изображения скребка для ботов

#python

Вопрос:

Моя цель-создать небольшую программу на Python, которая будет получать изображение каждые пять минут на веб-сайте по URL-адресу изображения. Пока все работает, но ограничение состоит в том, чтобы добавлять 1 к каждому новому изображению, сохраненному в каталоге, иначе полученное новое изображение заменит старое в каталоге. Так что вам нужно приращение. Моя программа работает, но каждые пять минут новое изображение заменяет старое, так как у них одно и то же имя. Мое увеличение имени файла не работает.

Вот моя программа на Python:

 #-*- coding: utf-8 -*-

import urllib.request
import time
import os 
import os.path

i = 0

while True:
    urllib.request.urlretrieve("https://url/image.jpg", "image.jpg")
    
    while os.path.exists("image%i.jpg"):
     i = i   1
  
    time.sleep(300)
 

Заранее благодарю вас за вашу помощь !

Ответ №1:

Вы можете использовать f-строку, это простой способ форматирования строк в python:

Они работают так: Документация по F-строкам Python

 name = "Tom"

print(f"Hello {name}")

> Hello Tom
 
 #-*- coding: utf-8 -*-

import urllib.request
import time
import os 
import os.path

image_count = 0

while True:
    urllib.request.urlretrieve("https://url/image.jpg", "image.jpg")
    
    while os.path.exists(f"image-{image_count}.jpg"):
    image_count  = 1
  
    time.sleep(300)
 

Комментарии:

1. Прежде всего, спасибо, что ответили на мою проблему. К сожалению, программа останавливается на «image_count» с ошибкой : Ошибка отступа: ожидался блок с отступом

2. Привет @BTB, не копируйте и не вставляйте мой ответ, а наберите его: я использовал пробел для намерения, а не клавишу TAB, которую распознает только python! Тогда это должно работать нормально:)

Ответ №2:

Попробуйте переместить проверку файла перед сохранением файла, а затем обязательно добавьте значение I в папку сохранения.

 i = 0
while True:
    while os.path.exists(f"image{str(i)}.jpg"):
        i  =1
    urllib.request.urlretrieve("https://url/image.jpg", f"image{str(i)}.jpg")
    time.sleep(300)
 

Комментарии:

1. Спасибо, что ответили на мою проблему. Однако программа сохраняет имя переменной «%i» непосредственно в имени файла. Поэтому программа всегда заменяет одно и то же имя файла на «image%i.jpg». В конечном счете программа делает то же самое, что и раньше.

2. @BTB Это моя ошибка, я отредактировал сообщение, чтобы использовать f-строку, и это должно помочь!

3. Программа работает ! Еще раз спасибо вам за вашу помощь !