#python #selenium #web-scraping #beautifulsoup #python-requests
#python #selenium #очистка веб-страниц #beautifulsoup #python-запросы
Вопрос:
Я использую selenium
для входа на страницу и загрузки некоторых файлов tiff, теперь у меня есть переменная downloadurl
, она содержит массив URL-ссылок, которые я скопировал с веб-сайта. теперь я использую приведенный ниже код для загрузки файлов:
driver = webdriver.Chrome();
driver.get(downloadurl)
Я получаю все загруженные файлы, но без имен, например. img (1), img (2)…
Теперь моя проблема в следующем: я хочу driver.get(downloadurl)
загружать файлы один за другим в соответствии с downloadurl
последовательностью массивов и переименовывать файл сразу после его загрузки в соответствии с title
переменной, которая является массивом, затем загружать следующий файл и переименовывать…
P.S. Я избегаю использовать запросы, потому что процедура входа в систему очень сложная и требует файлов cookie авторизации.
Большое спасибо за помощь!
Комментарии:
1. Если вы знаете, что он будет сохранен как
img(1)
изначально, просто попросите ваш скрипт загрузить файл, а затемos.rename()
файл из «img (1)» во что угодно. Затем промойте и повторите, потому что все они будут загружаться с одинаковым именем. docs.python.org/3/library/os.html#os.rename
Ответ №1:
Чтобы развить мой комментарий:
import os
import time
for downloadlink, uniqueName in my_list_of_links_and_names:
driver = webdriver.Chrome();
driver.get(downloadurl)
time.sleep(5) # give it time to download (not sure if this is necessary)
# the file is now downloaded
os.rename("img(1).png", uniqueName) # the name is now changed
Это сработает при условии, что «img (1).png» будет переименован, а затем следующая загрузка снова появится как «img (1).png».
Самой сложной частью было бы создание my_list_of_links_and_names
но если у вас есть данные в отдельных списках, просто zip()
соедините их вместе. Вы также можете генерировать свой собственный заголовок для каждого цикла на основе некоторых критериев…
Ответ №2:
Сначала мы создадим функцию (Rename_file), которая переименует загруженное изображение из его папки.
def Rename_file(new_name, Dl_path): #Renames Downloaded Files in the path
filename = max([f for f in os.listdir(Dl_path)])
if 'image.png' in filename: #Finds 'image.png' name in said path
time.sleep(2) #you can change the value in here depending on your requirements
os.rename(os.path.join(Dl_path, filename), os.path.join(Dl_path, new_name '.png')) #can be changed to .jpg etc
Затем мы применяем эту функцию к массиву URL-ссылок:
for link in downloadurl: #Will get each link in download url array
for new_name in title:
driver.get(link) #download the said image in link
Rename_file(new_name,Dl_path)
Пример кода:
downloadurl = ['www.sample2.com','www.sample2.com']
Dl_path = "//location//of//image_downloaded"
title = ['Title 1', 'Title 2']
def Rename_file(new_name, Dl_path):
filename = max([f for f in os.listdir(Dl_path)])
if 'image.png' in filename:
time.sleep(2)
os.rename(os.path.join(Dl_path, filename), os.path.join(Dl_path, new_name '.png'))
for new_name in title:
for link in downloadurl:
driver.get(link)
time.sleep(2)
Rename_file(new_name,Dl_path)
Я совершенно уверен в созданной мной функции переименования, но я действительно не тестировал это с массивом URL-ссылок, поскольку я действительно не могу придумать, где я мог бы это протестировать. Надеюсь, у вас это сработает. Пожалуйста, дайте мне знать 🙂