Automatischer Download
einer CSV-Datei

Du möchtest automatisch eine CSV-Datei herunterladen, die auf einem Server oder einer Webseite liegt und damit auch automatisch deine Excel-Datei aktualisieren? Vielleicht liegt die Datei sogar hinter einem Login?

In diesem Beitrag erfährst du wie du in 4 einfachen Schritten automatisch (jeden Tag, jede Stunde, jeden Monat) eine CSV-Datei von einer Webseite per Klick auf einen Download-Button oder per Aufruf einer URL downloaden und auf deinem System weiterverarbeiten/ verschieben kannst. 

Alles geht ganz einfach mit Python. Damit kannst du dich zum Beispiel auch vorher automatisiert einloggen, falls die Datei besonders geschützt ist. 

Inhaltsverzeichnis

Autor | René van Loock

Digital-Marketing-Experte mit dem Fokus auf Analytics, GDPR (DSGVO) Compliance und Marketing Automation.

Automatisch (per Bot) eine CSV Datei aus dem Internet downloaden - Herangehensweise

Wer kennt es nicht. Du musst täglich/ wöchentlich einen Bericht downloaden und weiterverarbeiten bzw. deine Daten aktualisieren. Aus welchen Gründen auch immer geschieht dies auch in heutzutage noch nicht per Schnittstelle, sondern das ganze ist ein Excel/ CSV-Export welchen du dir über einen Klick auf einer Webseite downloaden kannst. Davor musst du dich auch einloggen und erstmal zu einem Bericht durchklicken. Vielleicht musst du sogar das Datum für diesen Bericht einstellen.

Das ist nicht schwer, geht schnell, aber das viele Klicken erscheint dir zu langwierig und unnötig.

Mit Python lässt sich so eine Aufgabe sehr schnell automatisieren.

Was möchten wir?

  1. Eine Seite über Python aufrufen.
  2. Login Felder automatisch ausfüllen und Login-Button klicken.
  3. Eine Export URL aufrufen oder einen Button anklicken (Die Datei downloaden)
  4. Die Datei von deinem Download Ordner in einen anderen Ordner kopieren & umbenennen.
 

Was benötigen wir dafür?

Ich arbeite für einfache Automatisierungen und zum Testen immer mit Jupyter Notebooks und Anaconda auf Windows 10. Anaconda ist innerhalb von ein paar Minuten installiert und du kannst nach Aufruf der Jupyter Notebooks mit Klick auf „New“ -> Python 3 (Notebook) sofort mit dem Code loslegen. 

Des weiteren müssen wir folgende Module importieren:

from bs4 import BeautifulSoup
from selenium import webdriver
import time
import win32com.client
import shutil
import os
import glob 

Eine Seite mithilfe von Python aufrufen

Dafür benötigen wir den Chromedriver. Den downloaden entpacken und den Pfad zur Chromedriver.exe unten in den Code schreiben. Dabei darauf achten, dass in Windows aus / ein \ werden muss.

from bs4 import BeautifulSoup
from selenium import webdriver
import time
import win32com.client
import shutil
import os
import glob

driver = webdriver.Chrome(r"C:\Users\your_name\Downloads\chromedriver.exe") #Dateipfad zur Chromedriver.exe
driver.get ("https://testseite.de/login") #Seite die du aufrufen möchtest
 

Login Felder automatisch ausfüllen und Login Button Klicken | Python

Das ist viel einfacher als man denkt. Grundsätzlich lässt sich jedes Element per Copy XPath holen. Der XPath kann einfach über die Chrome-Dev-Tools geholt werden. Dazu in Chrome Rechtsklick auf das Login Feld -> Untersuchen (das Login-Feld sollte hervorgehoben sein) -> Rechtsklick -> Copy -> Copy Full XPath . Den XPath dann einfach im Code innerhalb der Formel einsetzen.

Mit Chrome Rechtsklick Untersuchen
CSS-Selektor-Mit-Chrome-Dev-Tools-Full-Xpath
from bs4 import BeautifulSoup
from selenium import webdriver
import time
import win32com.client
import shutil
import os
import glob

# 1. Eine Seite mit Python aufrufen
driver = webdriver.Chrome(r"C:\Users\your_name\Downloads\chromedriver.exe") #Dateipfad zur Chromedriver.exe
driver.get ("https://testseite.de/login") #Seite die du aufrufen möchtest

# 2. Login Felder automatisch ausfüllen und Login-Button klicken
driver = webdriver.Chrome(r"C:\Users\your_name\Downloads\chromedriver.exe") #location of your chromedriver
driver.get ("https://testseite.de/login") # url you want to open with chromedriver
driver.find_element_by_xpath("copy-xpath-here").send_keys("testmail@mail.de") #Findet das Feld für den Benutzernamen und füllt dieses aus.
time.sleep(3)
driver.find_element_by_xpath("copy-xpath-here").send_keys("password1234") #Findet das Feld für das Passwort und füllt dieses aus.
time.sleep(3)
    
driver.find_element_by_xpath("login-button").click() #Klickt Login
time.sleep(5)
driver.get ("https://testseite.de/account") #Ruft eine Seite im Login-Bereich auf.
time.sleep(3)

 

Mit .click() können wir das Element oder einen Button anklicken. Mit .send_keys() können wir Text in ein Feld schreiben. time.sleep lässt den Code ruhen. Das ist grundsätzlich nicht nötig. Bei dynamischen Seiten kann das jedoch hilfreich sein, da manchmal Teile der Seite noch nachgeladen werden. Außerdem lässt sich dadurch der Code besser debuggen.

Eine Export URL aufrufen oder einen Button anklicken (Die Datei downloaden) | Python

Mit .click() oder get() können wir jetzt je nach Notwendigkeit unsere Datei downloaden. Einen Download-Button könnten wir uns zum Beispiel über driver.find_element_by_xpath(#download-button).click anklicken. Vorher könnten Einstellungsoptionen auch mit der gleichen Logik ausgewählt werden.

Die Datei wird dann unter Windows in dem Download Ordner gespeichert.

from bs4 import BeautifulSoup
from selenium import webdriver
import time
import win32com.client
import shutil
import os
import glob

# 1. Eine Seite mit Python aufrufen
driver = webdriver.Chrome(r"C:\Users\your_name\Downloads\chromedriver.exe") #Dateipfad zur Chromedriver.exe
driver.get ("https://testseite.de/login") #Seite die du aufrufen möchtest

# 2. Login Felder automatisch ausfüllen und Login-Button klicken
driver = webdriver.Chrome(r"C:\Users\your_name\Downloads\chromedriver.exe") #location of your chromedriver
driver.get ("https://testseite.de/login") # url you want to open with chromedriver
driver.find_element_by_xpath("copy-xpath-here").send_keys("testmail@mail.de") #Findet das Feld für den Benutzernamen und füllt dieses aus.
time.sleep(3)
driver.find_element_by_xpath("copy-xpath-here").send_keys("password1234") #Findet das Feld für das Passwort und füllt dieses aus.
time.sleep(3)
    
driver.find_element_by_xpath("login-button").click() #Klickt Login
time.sleep(5)
driver.get ("https://testseite.de/account") #Ruft eine Seite im Login-Bereich auf.
time.sleep(3)

# 3. Eine Export URL aufrufen oder einen Download-Button anklicken.

driver.get ("https://testseite.de/account/datei.csv") #Downloaded die Datei über Aufruf der URL
#oder
driver.find_element_by_xpath("download-button").click() #Klickt Download-Button
 

Die Datei aus dem Download Ordner in einen anderen Ordner kopieren & umbenennen | Automatisiert mit Python

In unserem Beispiel möchten wir eine Excel Datei aktualisieren. Das heißt wir möchten die Datei aus dem Download-Ordner verschieben, umbenennen und abspeichern/ überschreiben.

Dazu können wir folgenden Code nutzen:

from bs4 import BeautifulSoup
from selenium import webdriver
import time
import win32com.client
import shutil
import os
import glob

# 1. Eine Seite mit Python aufrufen
driver = webdriver.Chrome(r"C:\Users\your_name\Downloads\chromedriver.exe") #Dateipfad zur Chromedriver.exe
driver.get ("https://testseite.de/login") #Seite die du aufrufen möchtest

# 2. Login Felder automatisch ausfüllen und Login-Button klicken
driver = webdriver.Chrome(r"C:\Users\your_name\Downloads\chromedriver.exe") #location of your chromedriver
driver.get ("https://testseite.de/login") # url you want to open with chromedriver
driver.find_element_by_xpath("copy-xpath-here").send_keys("testmail@mail.de") #Findet das Feld für den Benutzernamen und füllt dieses aus.
time.sleep(3)
driver.find_element_by_xpath("copy-xpath-here").send_keys("password1234") #Findet das Feld für das Passwort und füllt dieses aus.
time.sleep(3)
    
driver.find_element_by_xpath("login-button").click() #Klickt Login
time.sleep(5)
driver.get ("https://testseite.de/account") #Ruft eine Seite im Login-Bereich auf.
time.sleep(3)

# 3. Eine Export URL aufrufen oder einen Download-Button anklicken.

driver.get ("https://testseite.de/account/datei.csv") #Downloaded die Datei über Aufruf der URL
#oder
driver.find_element_by_xpath("download-button").click() #Klickt Download-Button

# 4. Die Datei aus dem Download-Ordner in einen anderen Ordner kopieren, verschieben & umbenennen.

list_of_files = glob.glob('C:/Users/beispielnutzer/Downloads/*') # * für alle Dateien, *.csv nur für .csv Dateien
latest_file = max(list_of_files, key=os.path.getctime) #Gibt mir die letzte Datei
shutil.move(latest_file, 'C:/Users/beispielnutzer/auswertung/laufende-auswertung.csv') #Verschiebt und nennt die Datei um. Überschreibt (wenn vorhanden) die alte Datei.

 

Diese Datei haben wir jetzt als Basis. Das heißt wir können uns in anderen Excel-Dateien die Daten aus der automatisiert aktualisierten Datei holen (z.B. per PowerQuery) und damit wie gewohnt in Excel weiterarbeiten. Das spart übers Jahr gesehen eine Menge Zeit.

Erhalte exklusive Analytics Tipps, die ich nur mit E-Mail Abonnenten teile.