Mit StringIO Python-Objekte als Datei nutzen
Im Beitrag „CSV-Dateien mit speziellen Spaltentrennern in Python laden“ hatte ich gezeigt, wie man mit BS4 Dateien aus Webseiten extrahieren und abspeichern kann, um sie dann in pandas weiterzuverarbeiten. Es geht auch ohne den Umweg der CSV-Datei, wenn man die StringIO Klasse aus dem io Modul nutzt.
Wir laden das Modul und instanziieren dann ein Objekt der Klasse mit dem von BS4 gefundenen Datensatz. Diese Objekt wird dann anstelle des Pfades der CSV-Datei an die pd.read_csv()
Funktion übergeben.
import pandas as pd import requests from bs4 import BeautifulSoup from io import StringIO headers = { 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Methods': 'GET', 'Access-Control-Allow-Headers': 'Content-Type', 'Access-Control-Max-Age': '3600', 'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0' } url = "http://www.statistics4u.com/fundstat_eng/data_fluriedw.html" req = requests.get(url, headers) soup = BeautifulSoup(req.content, 'html.parser') data=soup.find('pre').contents[0] str_object = StringIO(data) df = pd.read_csv(str_object,engine='python',skiprows=5,delim_whitespace=True) print(df) |