Webpage-Crawler mit BS

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.
Antworten
Xenobiologist
User
Beiträge: 6
Registriert: Donnerstag 3. Mai 2018, 20:58

Hallo zusammen,

ich noch realtiv neu, was das Thema Python angeht. Kenn mich aber mit Programmierung/Skripten einigermaßen aus.
Ich würde gern für einen Kumpel versuchen mit Python den Spielplan einer Mannschaft von www.fussball.de auszulesen.
Allerdings weiß ich nicht genau, wie ich die Ajax-Calls absetzen muss, damit die relevanten Daten überhaupt auf die Seite kommen.

Auf der Seite http://www.fussball.de/mannschaft/sv-au ... 01VTR8C1K7#!/
scheint es nötig zu sein, erst Mannschaftsspielplan und dann Start und Endezeitraum auszuwählen, bevor man die Daten dann aus dem Quelltext ziehen kann.

Wäre nett, wenn jemand eine Idee hätte wie ich das machen muss.
Ziel ist es, den gesamten Saisionplan rauszuziehen.

Hier mein kläglicher erster Versuch :D

Code: Alles auswählen

from requests import get
from bs4 import BeautifulSoup
import re
import json

team_id = '011MIBM9IK000000VTVG0001VTR8C1K7'
#url = "http://www.fussball.de/mannschaft/sv-aue-liebenau-sv-aue-liebenau-niedersachsen/-/saison/01VSEGVU4K000000VS548984VU8N0U3U/team-id/{}#!/".format(team_id)
url = "http://www.fussball.de/mannschaft/sv-aue-liebenau-sv-aue-liebenau-niedersachsen/-/saison/01VSEGVU4K000000VS548984VU8N0U3U/team-id/011MIAMBA4000000VTVG0001VTR8C1K7#!/"

print('URL: ' + url)
response = get(url)  # Download team games page
print("Status: " + str(response.status_code))
#print("Status: " + str(response.text))

html = BeautifulSoup(response.content, "lxml")  # Parse
#print(html)
stats = html.find_all(class_='table-container fixtures-matches-table club-matchplan-table')
print(stats)
print("-------------------------------------")
dates = stats[0].find_all(class_="hidden-small inline")
print(dates)
So long,
Mega
Benutzeravatar
sls
User
Beiträge: 480
Registriert: Mittwoch 13. Mai 2015, 23:52
Wohnort: Country country = new Zealand();

Für dynamische Webinhalte würde ich dir Selenium empfehlen. Bei JS/AJAX basierten Webinhalten, kannst du diese via Selenium und Webdriver deiner Wahl (z.B. Firefox im headless-mode) parsen. Ich habe vor einiger Zeit immer phantomjs verwendet, allerdings ist die Unterstützung eingeschränkt da obsolet.

Mit Selenium kannst du die Seite dann auch Steuern, also bestimmte Events ausführen (z.B. einen Button klicken, Informationen eingeben usw.), den jeweiligen HTML-Response kannst du anschließend dann mit BS4 verarbeiten.
When we say computer, we mean the electronic computer.
Sirius3
User
Beiträge: 18216
Registriert: Sonntag 21. Oktober 2012, 17:20

@sls: man könnte auch einfach mal im Browser schauen, was da so an Anfragen gesendet werden.

Code: Alles auswählen

url = "http://www.fussball.de/ajax.team.matchplan/-/mime-type/JSON/mode/PAGE/prev-season-allowed/false/show-filter/false/team-id/011MIAMBA4000000VTVG0001VTR8C1K7/max/1000/datum-von/2017-10-22/datum-bis/2018-10-28/offset/0"
tituzzz
User
Beiträge: 1
Registriert: Samstag 9. November 2019, 12:01

@Sirius3

Ich bin totaler Anfänger und versuche etwas ähnliches mit Kotlin hinzubekommen. Dafür benötige ich am besten json Daten und bin auf deinen Beitrag gestoßen.

Kannst du mir vielleicht erklären, wie man über den Browser an deine URL kommt?

VG
Antworten