Werte aus PopUp Blase auslesen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Assassin4711
User
Beiträge: 77
Registriert: Mittwoch 8. September 2021, 14:22

Hi Zusammen,

ich brauche mal wieder eure Hilfe.

https://www.oddsportal.com/tennis/usa/a ... -AcCphyfM/

Ich möchte gerne die PopUp Blasen auslesen die erscheinen wenn man über einer dieser Quoten mit der Mouse fährt.

Ich würde da gerne alle Quotenbewegungen entnehmen. Kann mir da jemand helfen und mir ggfs. einen Code dafür zur Verfügung stellen. Die Daten bekomme ich in jedem Fall nicht aus dem html Code extrahiert.

Wenn einer eine Idee hat bitte gerne helfen.

DANKE euch allen
Dirk
Assassin4711
User
Beiträge: 77
Registriert: Mittwoch 8. September 2021, 14:22

Hi ich habe nachfolgenden Code dazu im Netz gefunden:

Code: Alles auswählen

table = bookie_data.find('table', {'class': "table-main detail-odds sortable"})  # Find the Odds Table
            # This part is scraping a Beautiful Soup Table. Returns the odds and the bookie name for the match
            table_body = table.find('tbody')
            rows = table_body.find_all('tr') # rows are different bookmakers
            for row in rows: # for each bookmaker
                cols = row.find_all('td') 
                for event_tag in cols:
                # if it has onmouseover attribute
                if event_tag.find("div", onmouseover=True) is not None:
                    # do stuff here
                    event_tag.find("div", onmouseover=True).get("onmouseover")
Kann mir einer sagen wie ich den initialisiere? Also was muss ich oben alles importieren usw.

Also wenn ich nur das schreibe, passiert nichts:

Code: Alles auswählen

from bs4 import BeautifulSoup
Ich bekomme dann diesen Fehler:

Code: Alles auswählen

  File "C:\Users\damat\AppData\Local\Temp/ipykernel_15948/3637032489.py", line 3
    table_body = table.find('tbody')
    ^
IndentationError: unexpected indent
Benutzeravatar
pillmuncher
User
Beiträge: 1484
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

@Assassin4711: Nach über 60 Posts hier im Forum ist dir noch nicht klar, dass Einrückung in Python wichtig ist und falsche Einrückungen Fehler erzeugen?
In specifications, Murphy's Law supersedes Ohm's.
Assassin4711
User
Beiträge: 77
Registriert: Mittwoch 8. September 2021, 14:22

pillmuncher hat geschrieben: Dienstag 28. September 2021, 17:09 @Assassin4711: Nach über 60 Posts hier im Forum ist dir noch nicht klar, dass Einrückung in Python wichtig ist und falsche Einrückungen Fehler erzeugen?
Nach über 50 Posts hier im Forum ist mir noch mehr nicht klar als nur wie man richtig einrückt. Das sollte dir und euch doch bereits aufgefallen sein ... Ich kopiere Codestrecken aus dem Netz und versuche Sie dann zu verstehen. Die Codestrecke stand eben so im Netz ...

Und ich bin weit davon entfernt, Leute die irgendwo Hilfe geleistet haben zu korrigieren. Ich nehme das alles erstmal so als richtig hin ...
Assassin4711
User
Beiträge: 77
Registriert: Mittwoch 8. September 2021, 14:22

aber nach hoffentlich richitgem einrücken bin ich schon etwas weiter gekommen:

Code: Alles auswählen

from bs4 import BeautifulSoup
import requests

bookie_data = requests.get("https://www.oddsportal.com/tennis/usa/atp-san-diego/nishikori-kei-murray-andy-AcCphyfM/?r=1/")


table = bookie_data.find('table', {'class': "table-main detail-odds sortable"})  # Find the Odds Table
# This part is scraping a Beautiful Soup Table. Returns the odds and the bookie name for the match
table_body = table.find('tbody')
rows = table_body.find_all('tr') # rows are different bookmakers
for row in rows: # for each bookmaker
    cols = row.find_all('td') 
    for event_tag in cols:
        # if it has onmouseover attribute
        if event_tag.find("div", onmouseover=True) is not None:
            # do stuff here
            event_tag.find("div", onmouseover=True).get("onmouseover")
Nun kommt dieser Fehler:

Code: Alles auswählen

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
~\AppData\Local\Temp/ipykernel_15948/459899985.py in <module>
      7 
      8 
----> 9 table = bookie_data.find('table', {'class': "table-main detail-odds sortable"})  # Find the Odds Table
     10 # This part is scraping a Beautiful Soup Table. Returns the odds and the bookie name for the match
     11 table_body = table.find('tbody')

AttributeError: 'Response' object has no attribute 'find'
Mir wäre das ganz mit Selenium auch lieber, weil ich damit jetzt wenigstens schon erfolge erzielen konnte.
Benutzeravatar
pillmuncher
User
Beiträge: 1484
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

@Assassin4711: Statt Zeug aus dem Internet zu kopieren und dann durch Raten und stundenlanges Rumprobieren ohne wirklichen Lerneffekt irgendwas zusammen zu basteln das dann immer noch nicht funktioniert und bei dem du dir dann wieder und wieder hier Hilfe holen musst, könntest auch einfach mal das offizielle Tutorial durcharbeiten. Man kombiniert auch nicht einfach irgendwie Zahlen und Operatoren nach Gefühl um Mathematik zu lernen oder englische Worte um Englisch zu lernen.
In specifications, Murphy's Law supersedes Ohm's.
Assassin4711
User
Beiträge: 77
Registriert: Mittwoch 8. September 2021, 14:22

pillmuncher hat geschrieben: Dienstag 28. September 2021, 18:51 @Assassin4711: Statt Zeug aus dem Internet zu kopieren und dann durch Raten und stundenlanges Rumprobieren ohne wirklichen Lerneffekt irgendwas zusammen zu basteln das dann immer noch nicht funktioniert und bei dem du dir dann wieder und wieder hier Hilfe holen musst, könntest auch einfach mal das offizielle Tutorial durcharbeiten. Man kombiniert auch nicht einfach irgendwie Zahlen und Operatoren nach Gefühl um Mathematik zu lernen oder englische Worte um Englisch zu lernen.
Was ist das offizielle tutorial?
Benutzeravatar
pillmuncher
User
Beiträge: 1484
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

@Assassin4711: Das findest du auf der Webseite mit der offiziellen Dokumentation für Python: https://docs.python.org/3/
In specifications, Murphy's Law supersedes Ohm's.
Assassin4711
User
Beiträge: 77
Registriert: Mittwoch 8. September 2021, 14:22

pillmuncher hat geschrieben: Dienstag 28. September 2021, 19:28 @Assassin4711: Das findest du auf der Webseite mit der offiziellen Dokumentation für Python: https://docs.python.org/3/
Zugegeben: Du hast mich jetzt ziemlich demotiviert.

Das Problem besteht ja nicht allein dass Python im Gegensatz zu VBA für mich wesentlich komplizierter ist, sondern das eben das meiste was man an Tutorials findet in englisch ist. Leider reicht da einfach mein dürftiges vor fast 30 Jahren in der Schule gelerntes Englisch nicht ...

Die Frage ist war es jetzt so störend für dich wenn ich hier Fragen gestellt habe? Ich finde ich habe auch schon in den letzten Wochen ein wenig gelernt. Aber es ist doch klar das es nicht nur Profis geben kann, ansonsten würden Foren doch keinen Sinn machen.
Benutzeravatar
pillmuncher
User
Beiträge: 1484
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

@Assassin4711: Naja, du könntest auch einfach mal nach "python" "tutorial" "deutsch" googlen. Gleich das erste Ergebnis (nach den Videos) ist eine deutsche Übersetzung des englischen Tutorials.

Im Übrigen: Das Forum ist dazu da, Fragen zu stellen, zu beantworten und Hilfestellung zu geben. Es hat aber keinen Sinn, dir hier schriftlich vorzulesen, was sowieso schon im Tutorial steht. Ich antworte dir auch nicht, um dich zu demotivieren, sondern um dich in dir richtige Richtung zu schubsen.
In specifications, Murphy's Law supersedes Ohm's.
rogerb
User
Beiträge: 878
Registriert: Dienstag 26. November 2019, 23:24

@Assassin4711,

Dieser Funktions Aufruf ist ein get-Request an einen Server:

Code: Alles auswählen

bookie_data = requests.get("https://www.oddsportal.com/tennis/usa/atp-san-diego/nishikori-kei-murray-andy-AcCphyfM/?r=1/")
Dazu findest du hier Informationen:
https://docs.python-requests.org/en/lat ... ession.get

Der Rückgabewert ist ein Response-Objekt, welches ein text Attribut hat:
https://docs.python-requests.org/en/lat ... ponse.text

Das wiederum enthält den HTML-Code.
Aus diesem HTML-Code kann man mit bs4 ein soup -Objekt erstellen, welches sich einfach mit Hilfe der bs4 Funktion find() durchsuchen lässt.

soup = BeautifulSoup(html_doc, 'html.parser')
https://www.crummy.com/software/Beautif ... uick-start
https://www.crummy.com/software/Beautif ... /doc/#find

Die Frage, die du dir vielleicht stellen solltest ist, die ob du programmieren lernen möchtest, oder ob du eine schnelle "egal wie" Lösung für dein Programm suchst.
Wenn du programmieren lernen möchtest, dann gehört dazu viel lernen, lesen und üben.
Man merkt dir aber an, dass du dich nicht wirklich mit dem Lernen beschäftigen möchtest. Das wiederum ist dann für die Hilfesteller hier auf Dauer demotivierend. Ich hoffe du verstehst das.
Wenn man merkt, dass du dich selber auch anstrengst, wird man dir immer gerne weiterhelfen.

Edit: Ja, ich gebe dir Recht, fast alle Dokumentationen sind auf Englisch geschrieben, wenn man das nicht gewohnt ist, kann es extra zäh werden weil man gleich zwei Themen lernen muss. Aber mit dem Link zum deutsch-sprachigen Pythontutorial kommst du schon sehr, sehr weit.
Assassin4711
User
Beiträge: 77
Registriert: Mittwoch 8. September 2021, 14:22

Na so ist es nicht ganz. Klar will man immer schnelle Lösungen für Probleme haben, aber ich will das programmieren mit python auch erlernen und ich werde es auch lernen.
Aber ich habe einfach immer nur abend zwei drei stunden dafür zeit. Andonsten steht job und familie eben im Vordergrund.

Ich habe mir auch so wie jetzt python vba über viele Jahre hinweg beigebracht und ich bin da jetzt auch nicht der Profi aber ich bekomme jedes Problem, auch ohne Fragen in einem forum gelöst. Insoweit solltet ihr nicht meine lernbereitschaft anzweifeln. Ich mach es nur nicht so schnell wie ihr es euch wünscht. Ich werde jetzt aber erstmal das tutorial durch arbeiten und euch bis dahin nicht mehr beanspruchen.

Naja wobei ich zum Tutorial schon zur ersten Seite zehn Fragen hätte 😂😂
Benutzeravatar
pillmuncher
User
Beiträge: 1484
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

@Assassin4711: Deine Lenbereitschaft zweifle ich doch gar nicht an, aber deine Lernstrategie. Wenn du Fragen zum Tutiorial hatm kannst du sie hire ebenfalls gerne stellen.
In specifications, Murphy's Law supersedes Ohm's.
Assassin4711
User
Beiträge: 77
Registriert: Mittwoch 8. September 2021, 14:22

Ich verstehe nicht was die unter Windows mit Interpreter meinen. Wenn man kein jupyter oder ähnliches benutzt macht man das doch über die Eingabeaufforderung. Wäre das dann der Interpreter? Vorausgesetzt python ist installiert.
Benutzeravatar
__blackjack__
User
Beiträge: 13068
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Assassin4711: python.exe ist der Interpreter.

https://de.wikipedia.org/wiki/Interpreter sagt: „Als Interpreter wird ein Computerprogramm bezeichnet, das eine Abfolge von Anweisungen anscheinend direkt ausführt, […]“
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Assassin4711
User
Beiträge: 77
Registriert: Mittwoch 8. September 2021, 14:22

Ah ja ... ich habe python bevor ich jupyter benutzt habe immer innerhalb der Eingabeaufforderung mit Eingabe von "python" gestartet. Das Ergebnis ist quasi das gleiche... Also offensichtlich ...
Assassin4711
User
Beiträge: 77
Registriert: Mittwoch 8. September 2021, 14:22

jetzt sicherlich eine dumme Frage:

Code: Alles auswählen

a = []
b = []
a = 'Hund'
b = 'Katze'

c = a , b

c

Code: Alles auswählen

('Hund', 'Katze')
Ich hätte jetzt erwartet das ich als Ergebnis Hund , Katze bekomme. Wieso stehen im Ergebnis die ' mit dabei? Ich übergebe doch einen gewöhnlichen String


Was ist der Unterschied zu dem:

Code: Alles auswählen

a = []
b = []
a = "Hund"
b = "Katze"

c = (a + "," + b)

print (c)

Code: Alles auswählen

Hund,Katze
Wieso lässt er dann hier die ' weg?
Benutzeravatar
sparrow
User
Beiträge: 4183
Registriert: Freitag 17. April 2009, 10:28

Was denkst du denn, was das "," zwischen zwei Variablen tut? Und wie kommst du zu der Annahme?
Schaut dir doch mal an, von welchem Typ c jeweils ist.
Benutzeravatar
__blackjack__
User
Beiträge: 13068
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Die ersten beiden Zuweisungen an `a` und `b` mit den leeren Listen machen keinen Sinn, weil die Werte ja nirgends verwendet werden.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Assassin4711
User
Beiträge: 77
Registriert: Mittwoch 8. September 2021, 14:22

sparrow hat geschrieben: Mittwoch 29. September 2021, 20:19 Was denkst du denn, was das "," zwischen zwei Variablen tut? Und wie kommst du zu der Annahme?
Schaut dir doch mal an, von welchem Typ c jeweils ist.
Wie meinst von welchem Typ c ist? Da ich da zwei Strings aneinanderkette hätte ich gedacht es wäre auch ein String.
Antworten