Hallo zusammen,
ich möchte von der Internetseite:
https://www.zvg-portal.de/
alle Daten nach dem ich ich über die Termin suche auf das Bundesland "Hessen" gegangen bin und über die Suche dann die Ergebnisse dargestellt bekomme in Excel in einer übersichtlichen Tabelle dargestellt bekommen.
Somit könnte ich dann die Daten besser sortieren, filtern, etc.
1. Problem ich muss die Seite lokal speichern, da ich den Quellcode nicht angezeigt bekomme. Was kein Problem ist, da ich danach mir den Quellcode anzeigen lassen kann.
2. Ist die Datenstruktur auf der Seite nicht optimal und somit weiß ich nicht weiter.
Habe bereits wie folgt angefangen, aber komme damit auch nicht weiter, bin absoluter Anfänger und benötige Hilfe und würde mich über jede Hilfe freuen:
from bs4 import BeautifulSoup
import requests
city_1 = 'Berlin'
city_2 = 'Leipzig'
soup = BeautifulSoup(open("C:\py.project\\zvs.html", ), "html.parser")
table = soup
rows = table.find_all('tr')
aktenzeichen = rows [1].text.split()
info_1 = aktenzeichen[1]
info_2 = aktenzeichen[2]
print(f'Das Aktenzeichen in {info_1} beträgt {info_2}')
Danke!
Daten aus Internetseite auslesen und in einer strukturierten Tabelle in Excel darstellen
Code solltest du immer zwischen Code-Tags posten. Die erscheinen automatisch, wenn du immvollständigen Editor den </> Button drückst.
Deine Fragen sind leider sehr unspezifisch.
Wenn du Daten von einer Seite scrapen willst, nutzt man entweder das externe requests Modul oder(wenn es nicht anders geht) Selenium.
Ansonsten hast du mit bs4vdsd richtige Werkzeug um HTML zu parsen.
Da du aber nicht sagst, was nicht geht, bzw. wie die Informationen aussehen - und auch nicht, was eigentlich nicht geht, wird es schwer dir weiter zu helfen.
Deine Fragen sind leider sehr unspezifisch.
Wenn du Daten von einer Seite scrapen willst, nutzt man entweder das externe requests Modul oder(wenn es nicht anders geht) Selenium.
Ansonsten hast du mit bs4vdsd richtige Werkzeug um HTML zu parsen.
Da du aber nicht sagst, was nicht geht, bzw. wie die Informationen aussehen - und auch nicht, was eigentlich nicht geht, wird es schwer dir weiter zu helfen.
@Armado,
Dennoch mal ein Ansatz. Ich hoffe durch die Kommentare ist es selbsterklärend:
An Stelle der print Funktion musst du jetzt die Daten so auswerten wie du es gerne hättest.
Es gibt viele Fälle die man dabei berücksichtigen muss, da die Daten nicht einheitlich sind.
Das verstehe ich nicht, denn das Formular auf der Seite bietet dir doch genau diese Funktionalität.Somit könnte ich dann die Daten besser sortieren, filtern, etc.
Dennoch mal ein Ansatz. Ich hoffe durch die Kommentare ist es selbsterklärend:
Code: Alles auswählen
from bs4 import BeautifulSoup
import requests
# wenn man auf Suche clickt sieht man in der Addresszeile diese url
URL = "https://www.zvg-portal.de/index.php?button=Suchen"
def get_termin_table(bundesland):
"""Gibt die HTML Tabelle mit den Termindaten zurück"""
# Beim der Abfrage der Daten werden diese Formulardaten an den Server geschickt
# Das Formular ist im HTML Quelltext sichtbar
# Der Server wiederum liefert die entsprechenden Daten zurück
# Man kann natürlich auch andere Werte eintragen um andere Daten zu erhalten
data = {
"ger_name": "-- Alle Amtsgerichte --",
"order_by": "2",
"land_abk": bundesland,
"ger_id": "0",
"az1": "",
"az2": "",
"az3": "",
"az4": "",
"art": "",
"obj": "",
"str": "",
"hnr": "",
"plz": "",
"ort": "",
"ortsteil": "",
"vtermin": "",
"btermin": "",
}
# Ein POST-Request als ob man das Formular auf der Seite ausgefüllt hätte
response = requests.post(URL, data=data)
soup = BeautifulSoup(response.text, features="html.parser")
# In der HTML Response des Servers gibt es 6 Tabellen. Die 2. ist die interessante
return soup.find_all("table")[1]
def main():
termine = get_termin_table("he") # Termintabelle für Hessen
row_iterator = iter(termine.find_all("tr"))
# html Tabelle zeilenweise lesen bis keine Zeilen mehr gefunden werden
while True:
try:
for data_cell in next(row_iterator).find_all("td"):
# durch alle Zellen einer Zeile iterieren und ausgeben
print(data_cell)
# hier muss es eine entsprechende Auswertung geben, die die
# jeweilige Struktur der Datzen versteht
except StopIteration:
# keine Zeile mehr -> Abbruch
break
if __name__ == "__main__":
main()
Es gibt viele Fälle die man dabei berücksichtigen muss, da die Daten nicht einheitlich sind.
- __blackjack__
- User
- Beiträge: 14069
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@rogerb: Warum diese komische `iter()`/``while``/``try``/``except``/`next()`-Konstruktion? Das ist doch einfach nur das hier in kompliziert:
Code: Alles auswählen
def main():
termine = get_termin_table("he") # Termintabelle für Hessen
# html Tabelle zeilenweise lesen bis keine Zeilen mehr gefunden werden
for row_node in termine.find_all("tr"):
for data_cell in row_node.find_all("td"):
# durch alle Zellen einer Zeile iterieren und ausgeben
print(data_cell)
# hier muss es eine entsprechende Auswertung geben, die die
# jeweilige Struktur der Datzen versteht
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
@__blackjack__,
es war nur ein Ansatz.
Mehrere aufeinanderfolgende Reihen gehören zu einem Datensatz.
Wenn die Reihenfolge und Anzahl der Einträge in einem Datensatz konstant wäre, könnte man mit next() zum jeweils nächsten weiter springen und diese dann in eine entsprechende Datenstruktur einsortieren.
Die Daten sind aber lückenhaft und nicht gleichmäßig. Es würde also nicht so einfach funktionieren.
Ohne zu wissen welche Daten überhaupt relevant sind und wie sie am Ende strukturiert sein sollen, wollte ich mich aber noch nicht festlegen.
Es kann auch gut sein, dass einfaches Iterieren über die Tabellen-Zellen am Ende gut funktioniert.
es war nur ein Ansatz.
Mehrere aufeinanderfolgende Reihen gehören zu einem Datensatz.
Wenn die Reihenfolge und Anzahl der Einträge in einem Datensatz konstant wäre, könnte man mit next() zum jeweils nächsten weiter springen und diese dann in eine entsprechende Datenstruktur einsortieren.
Die Daten sind aber lückenhaft und nicht gleichmäßig. Es würde also nicht so einfach funktionieren.
Ohne zu wissen welche Daten überhaupt relevant sind und wie sie am Ende strukturiert sein sollen, wollte ich mich aber noch nicht festlegen.
Es kann auch gut sein, dass einfaches Iterieren über die Tabellen-Zellen am Ende gut funktioniert.