python pandas下载并重命名

时间:2017-10-29 09:42:14

标签: python csv selenium

我有一个名为(data.csv)的csv文件。此csv文件包含2列,第一列称为(标题),另一列称为(链接)。

此代码用于打开链接列中的每个URL并下载链接到它的文件。然后使用title列中的字符串重命名它,该列位于同一行中。

出于任何原因,如果文件没有下载,代码应该传递整行。 然后在下一行再次开始,直到列表完成。

这是数据: https://drive.google.com/open?id=0B5bJvxM9TZkhVGI5dkdLVzAyNTA

以下是代码:

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
import pandas as pd
import os

df = pd.read_csv('data.csv')
os.chdir("C:\\Users\\Sayed\\Downloads")

titles = df['title']
links = df['link']

for event in links:
    driver = webdriver.Chrome()
    driver.get(event)

    # download
    driver.find_element_by_xpath('//*[@id="fxec_historytable"]/a').click()
    WebDriverWait(driver, 100).until(EC.visibility_of_element_located((By.XPATH, '//*[@id="fxec_historytable"]/a')))

for file, name in zip(os.listdir(), titles):
    fileName = os.path.splitext(file)
    os.rename(file, name)

下载部分没问题,但根本没有重命名。

2 个答案:

答案 0 :(得分:0)

我修改了您的脚本,因此您可以指定下载文件夹,而不必使用您的用户下载文件夹。

此外,您可以在下载文件时重命名文件,然后确保重命名文件。

另一个改进是在for循环的每次迭代中只创建一个Webdriver实例,与新实例相反。

最后,在重命名文件时你没有添加扩展名,我认为这是重命名错误的原因。

以下是修改后的版本,请确保输出文件夹在运行之前为空:

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options

import pandas as pd
import os

default_dir = r"C:\temp\Test"

df = pd.read_csv(r'c:\temp\data.csv')
os.chdir(default_dir)

titles = df['title']
links = df['link']

options = webdriver.ChromeOptions() 
options.add_experimental_option("prefs", {
  "download.default_directory": default_dir,
  "download.prompt_for_download": False,
  "download.directory_upgrade": True,
  "safebrowsing.enabled": True
})

driver = webdriver.Chrome("c:/temp/chromedriver.exe", chrome_options=options)

for idx, event in enumerate(links):
    driver.get(event)
    # download
    driver.find_element_by_xpath('//*[@id="fxec_historytable"]/a').click()
    WebDriverWait(driver, 100).until(EC.visibility_of_element_located((By.XPATH, '//*[@id="fxec_historytable"]/a')))

    while not os.path.exists(os.path.join(default_dir, "history.csv")):
        pass

    # assumming the file is called "history.csv"
    file = os.path.join(default_dir, "history.csv")
    os.rename(file, titles[idx] + ".csv")

Here is the output

答案 1 :(得分:0)

忽略以前的编辑。 错误的代码,错误的位置,错误的问题。