0 Pluspunkte 0 Minuspunkte

Ich möchte eine Website mit Python und BeautifulSoap auslesen. Auf der Website gibt es mehrere Div mit der CSS Klasse "ticker-story-wrapper". Wenn ich die Website im Browser öffne kann ich es mit den Browsertools sehen. Wenn ich es aber mit Python auslesen will findet es kein Div mit der Klasse.

import requests
from bs4 import BeautifulSoup

response = requests.get('https://www.orf.at')

soup = BeautifulSoup(response.text, 'html.parser')

g = soup.find_all('div.ticker-story-wrapper')

for result in g:
    print(result)
    print("------------------")
von  

1 Antwort

0 Pluspunkte 0 Minuspunkte

Mit

soup.find_all('div.ticker-story-wrapper')

suchst du nach einem <div>-Element, das die Klasse ticker-story-wrapper als Teil des Tagsnamens hat. In der Realität ist dies jedoch kein gültiger HTML-Tag. Klassen werden normalerweise als separates Attribut innerhalb des Tags angegeben. Mit

soup.find_all('div', {'class': 'ticker-story-wrapper'})

suchst du nach <div>-Elementen, die die Klasse ticker-story-wrapper haben. Hier verwendest du das class-Attribut, um die gewünschte Klasse anzugeben, und BeautifulSoup sucht nach allen <div>-Elementen, die diese Klasse haben.  

Kurz gesagt, die Syntax soup.find_all('Tagname', {'Attribut': 'Wert'}) ermöglicht es dir, nach Elementen mit bestimmten Attributwerten zu suchen, anstatt den Attributwert in den Tag selbst einzubetten. Dies ist die gängige Praxis bei der Verwendung von BeautifulSoup, um gezielt nach Elementen mit bestimmten Attributen zu suchen.

import requests
from bs4 import BeautifulSoup

response = requests.get('https://www.orf.at')

soup = BeautifulSoup(response.text, 'html.parser')

g = soup.find_all('div', {'class': 'ticker-story-wrapper'})

for result in g:
    
    print(result.find("h3").text)
    print("------------------")
von