Tabelle aus Website auslesen

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Wirman
User
Beiträge: 3
Registriert: Freitag 16. September 2016, 12:44

Hallo liebes Forum,

Ich hab ein Problem mit einer Website auslesen mit Python. Um Websites auszulesen hab ich schon verschiedenes versucht (Java, LibreOffice), aber irgendwie war das doch alles recht umständlich, deswegen hab ich mich ein bisschen mit Python beschäftigt, welches in Verbindung mit BeautifulSoap ja gut funktionieren soll.

Nun hab ich aber das Problem, dass wenn ich die Website einlese, der Teil den ich benötige nicht in der Form eingelesen wird, wie es z.B. im Firefox Inspector angezeigt wird. Der Quelltext wird aber anderst angezeigt.

Ich will von dieser Seite die Ergebnisse der letzen Jahre der NFL Partien auslesen. http://www.flashscore.de/football/usa/n ... rgebnisse/

Ich hab schon mehrere Ansätze versucht. Kurze Frage vorweg: Python 2 oder 3? Wenn ich BeautifulSoap per pip install installier, hat er es nur für Python 2 installiert, wie bekomme ich das verfügbar für Python 3?

Code: Alles auswählen

import urllib2
opener = urllib2.build_opener()
opener.addheaders = [('User-agent', 'Mozilla/5.0')]
url = "http://www.flashscore.de/football/usa/nfl-2015-2016/ergebnisse/"
response = opener.open(url)
page = response.read()
from BeautifulSoup import BeautifulSoup
soup = BeautifulSoup(page)
Das war zum Beispiel ein Versuch. Wenn ich dann aber jedoch

Code: Alles auswählen

print(soup.prettify())
ausführe, zeigt er mir für die relevanten Daten in der Tabelle (nur ein Auszug)
... CC÷0¬~AA÷6c1AcEX4¬AD÷1451871000¬AB÷3¬CR÷3¬AC÷3¬CX÷Green Bay Packers¬ER÷17. Spieltag¬AX÷0¬AV÷1451885987|¬BX÷-1¬WM÷GBP¬AE÷Green Bay Packers¬WU÷green-bay-packers¬ ...
Genau das selbe bekomme ich auch, wenn ich mir von der Seite den Quelltext anzeigen lasse. Wenn ich jedoch das Element im Inspector untersuche, bekomme ich ein Format, was auch auslesbar ist. Liegt das an der Seite, dass das nicht geht, oder kann man das Problem irgendwie mit Python lösen? Dass ich die einzelnen Partien mit den Ergebnissen auslesen kann und weiterverwerten kann?

schonmal lieben Dank für die Antworten
viele Grüße
Wirman
BlackJack

@Wirman: Diese Daten stecken in einem <div id="tournament-page-data-results"> das wiederrum in einem <div style="display: none"> steckt. Es wird also im Browser nicht angezeigt und hat eine `id`, also wird das wohl per JavaScript ausgelesen und aus den Daten werden dann die Tabellen erstellt.

Du könntest schauen ob Du das JavaScript findest und verstehst um heraus zu finden wie die Daten dort kodiert sind, und das in Python nachbauen.
Wirman
User
Beiträge: 3
Registriert: Freitag 16. September 2016, 12:44

Hallo BlackJack, danke für die schnelle Antwort ;-)

Okay, das scheint dann wohl nicht so trivial zu sein. Ich hab mal in Firefox beim Javascript Debugger geschaut, ob ich was finde.
Ich würde jetzt mal fast vermuten, dass http://www.flashscore.de/x/js/core_4_1180000000.js das richtige Skript ist, aber das versteh ich halt mal so gar nicht :-D

Dann werde ich wohl eine andere Seite finden müssen, wo ich die Ergebnisse besser auslesen kann :(
BlackJack

@Wirman: Die Daten sind auch noch nicht vollständig, da ist unten auf der Seite ein Link mit dem man mehrfach Daten nachladen muss, bis man das Jahr zusammen hat.

Falls es Dir speziell um die NFL-Daten geht, könnte nfldb interessant für Dich sein. Da kannst Du Dir einen kompletten SQL-Dump herunterladen und mit dem Modul dann anfragen an die Datenbank stellen. Das baut auf `nflgame` auf, mit dem man die Datenbank dann auch laufend aktualisieseren kann, und zwar direkt mit Daten von nfl.com, die das als JSON-Feed zur Verfügung stellen, was netter ist als sich das aus irgendwelchem HTML heraus zu kratzen, von Leuten die ihre Daten ziemlich wahrscheinlich auch von dieser API bezogen haben.

Wenn man nach Datenquellen sucht, ist das Schlagwort „OpenData“ übrigens oft eine nützliche Ergänzung für die Eingabe bei Suchmaschinen. Einen StackExchange gibt es zu dem Thema auch.
Wirman
User
Beiträge: 3
Registriert: Freitag 16. September 2016, 12:44

nfldb kann genau das, was ich brauch :) hätt ich nur mal gleich spezifisch nach NFL-Daten gesucht, und nicht nach Websites auslesen :-D
Vielen Dank ;-)
Antworten