(硒)下载并重命名文件问题

时间:2019-03-12 03:21:41

标签: python selenium web-scraping beautifulsoup python-requests

我正在使用selenium登录页面并下载一些tiff文件, 现在我有一个变量downloadurl,它包含我从网站上抓取的一组URL链接。现在我正在使用以下代码下载文件:

 driver = webdriver.Chrome();
 driver.get(downloadurl)

我确实下载了所有文件,但没有名称,例如。 img(1),img(2)...

现在,我的问题是:我想driver.get(downloadurl)根据downloadurl数组序列一个接一个地下载文件,并根据title变量将文件下载后立即重命名。数组,然后下载下一个文件,然后重命名...

建议。我避免使用请求,因为登录过程非常复杂,并且需要授权Cookie。

非常感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

要详细说明我的意见,

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()在一起。您还可以根据某些条件在每个循环中生成自己的标题...

答案 1 :(得分:0)

首先,我们将创建一个函数(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

然后我们将此功能应用于网址链接数组:

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链接进行过测试,因为我真的不知道该在哪里进行测试。希望这对您有效。请让我知道:-)