Fehler bei Abfrage (Tuples)

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Assassin4711
User
Beiträge: 77
Registriert: Mittwoch 8. September 2021, 14:22

Vorab: Vielen DANK

Puh das ist schon manchmal der Wahnsinn wie gut man sich mit irgendwas auskennen kann. Ich habe bis dato immer nur VBA programmiert und das auch immer nur so, dass ich mein Problem gelöst bekommen habe.

Python ist eben für mich nochmal ein Buch mit "Sieben Siegeln" ... Einfach weil die Art wie man den Code schreibt, bzw. schreiben muss nochmal komplett anders ist. Es macht ab und an anscheinend auch nochmal unterschied ob ich den Befehl einrücke oder nicht. Darauf zu achten Das war in VBA eher nur optisch von Nöten.

Und vieles von dir geschriebene, für das ich sehr dankbar bin, verstehe ich komplett null 8)

Das mit dem elif ist mir jetzt nach deiner Schilderung auch aufgefallen. Macht wahrlich wenig Sinn ...

Ich hätte jetzt u deinem Code viele viele Fragen, dass würde dir aber unnötig Zeit rauben.

Doch die ein oder andere muss ich stellen:

was bedeutet das

Code: Alles auswählen

if __name__ == "__main__":
    main()
Und eine weitere Frage wie bekomme ich Überschriften hin damit ich dann (nächste Frage) die Daten in eine csv Datei überführen kann?
rogerb
User
Beiträge: 878
Registriert: Dienstag 26. November 2019, 23:24

@Assassin4711,

Code: Alles auswählen

if __name__ == "__main__":
    main()
Nennt man "import guard", oder Import Schutz.
Wie du siehst wird die main() Funktion nur aufgerufen, wenn die Bedingung erfüllt ist. Das ist immer dann der Fall, wenn das Script direkt ausgeführt wird. Dann ist __name__ nämlich gleich "__main__". Wenn dieses Modul von anderen Modulen importiert wird, ist die Bedingung nicht erfüllt, denn __name__ würde dann den Namen des Moduls und nicht mehr "__main__" enthalten.
Also einfach gesagt die main() Funktion kann nur laufen wenn man dieses Modul direkt ausführt.

Die andere Frage verstehe ich leider nicht. "wie bekomme ich Überschriften hin"?
Assassin4711
User
Beiträge: 77
Registriert: Mittwoch 8. September 2021, 14:22

Na wenn ich das Ergebnis in eine csv Datei packen will. Im dieser dann anschließend in Excel einzulesen dann benötige ich dich auch Überschriften. Und die würde ich eben schon gerne mit in der csv stehen haben.
Und wie erstelle ich Erbengemeinschaft eine csv?
Assassin4711
User
Beiträge: 77
Registriert: Mittwoch 8. September 2021, 14:22

Also Überschriften für die einzelnen Spalten.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Die erste Zeile enthält die Überschriften.
Assassin4711
User
Beiträge: 77
Registriert: Mittwoch 8. September 2021, 14:22

Aber nicht wenn ich die Daten über den print Befehl anzeigen lasse. Da bedingt jupyter direkt mit dem ersten Datensatz.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ändert nichts an Antwort. So kommen nunmal Überschriften in csv Dateien. Was du mit jupyter und Print machst, ist bis dato dein Geheimnis. Kann man also auch nichts zu sagen.
Assassin4711
User
Beiträge: 77
Registriert: Mittwoch 8. September 2021, 14:22

Hmm jetzt steh ich auf dem Schlauch. Also den Code schreibe ich im jupyter Notebook. Und da bekomme ich ja, wenn ich das Programm laufen lasse unten das Ergebnis angezeigt. Und bei diesem Ergebnis habe ich keine Überschriften.
Assassin4711
User
Beiträge: 77
Registriert: Mittwoch 8. September 2021, 14:22

ich habe die Überschrift jetzt mit folgender Zeile hinbekommen:

Code: Alles auswählen

    überschrift = ['Land' , 'Tunier' , 'Startzeit' , 'Spieler' , 'Heim_Quote' , 'Auswärts_Quote']
    print(";".join(überschrift))
Wenn ich das Ergebnis kopiere und in eine Textdatei ablege kann ich diese auch in Excel öffnen. Kann man die daten auch anstatt mit dem Printbefehl anzuzeigen auch direkt in eine csv auf dem Laufwerk abspeichern?
einfachTobi
User
Beiträge: 491
Registriert: Mittwoch 13. November 2019, 08:38

Ja, kann man mit dem eingebauten csv Modul.
Assassin4711
User
Beiträge: 77
Registriert: Mittwoch 8. September 2021, 14:22

einfachTobi hat geschrieben: Dienstag 14. September 2021, 09:25 Ja, kann man mit dem eingebauten csv Modul.
Dank dir für den Literatur Hinweis.

So ich habe jetzt mal versucht das neu gelernte auf eine weitere Tabelle anzuwenden:

Dazu habe ich den Code im oberen Bereich wie folgt geändert:

Code: Alles auswählen

from selenium import webdriver

CHROME_DRIVER = R"C:\webdrivers\Chromedriver.exe"


def iter_stripped_texts(elements, start_index=None, end_index=None):
    return (element.text.strip() for element in elements[slice(start_index, end_index)])


def main():
    driver = webdriver.Chrome(CHROME_DRIVER)
    driver.get("https://www.oddsportal.com/tennis/usa/cary-2-challenger-men/krueger-mitchell-kubler-jason-8MNxIA25/")
    
    country = tournament = None
    
    überschrift = ['Buchmacher' , 'Heim_Quote' , 'Away_Quote' , 'Payout']
    print(";".join(überschrift))
    
    for row in driver.find_elements_by_css_selector("#odds-data-table > div:nth-child(1) > table > tbody"):
Ziel ist es in der Tabelle die Buchmacher und deren Quoten aufzulisten.

Ich tappe aber bei dieser Zeile komplett im dunkeln was hier gemacht wird:

Code: Alles auswählen

def iter_stripped_texts(elements, start_index=None, end_index=None):
    return (element.text.strip() for element in elements[slice(start_index, end_index)])
Also habe ich einfach in den folgenden Zeilen Werte verändert um festzustellen wie sich das Ergebnis verändert.
Da ich der Tabelle jetzt kein Problem mit Zeilen habe die nicht die gewünschten Daten enthalten brauche ich auch den Zellinhalt nicht zu prüfen. Also war meine Idee die Daten für die Liste direkt in die Variablen einzuspielen.

Code: Alles auswählen

            cells = row.find_elements_by_tag_name("tr")
            bookie = iter_stripped_text(row.find_elements_by_tag_name("a"))
Aber leider funktioniert das so nicht.

Was habe ich falsch gemacht, bzw. wo habe ich falsch gedacht?
Assassin4711
User
Beiträge: 77
Registriert: Mittwoch 8. September 2021, 14:22

ahh ich habs hinbekommen ... ich hatte den falschen Selector ausgewählt...

Danke euch Jungs ...
Antworten