Wenn Sie sich den Quellcode der vorherigen Seite ansehen, werden Sie feststellen, dass Sie die Namen der Filme und deren Bewertungen finden können. Zu unserem Glück lädt RottenTomatoes die Filmliste nicht dynamisch, sodass wir die benötigten Informationen direkt scrapen können.
Zunächst untersuchen wir die Seite und sehen uns an, wie der HTML-Code strukturiert ist. Dazu klicken Sie mit der rechten Maustaste auf einen Filmtitel und wählen die Option „Element untersuchen“. Das folgende Fenster sollte erscheinen:
Ich habe die nützlichen Informationen in diesem Bild mit einer roten Linie hervorgehoben. Sie sehen, dass die Seite die beliebtesten Filme in einer Tabelle anzeigt und dass jede Tabellenzeile vier Zellen enthält (Element <tr>).
Die erste Zelle enthält die Position des Films, die zweite Informationen zu den Bewertungen (Element mit der Klasse „tMeterScore“), die dritte den Titel des Films und die letzte Zelle die Anzahl der Rezensionen.
Da wir diese Struktur kennen, können wir nun damit beginnen, die benötigten Informationen zu extrahieren.
import requests
from bs4 import BeautifulSoup
links_base = 'https://www.rottentomatoes.com'
scraped_url = 'https://www.rottentomatoes.com/top/bestofrt/'
page = requests.get(scraped_url)
soup = BeautifulSoup(page.content, 'html.parser')
table = soup.find("table", class_="table") # We extract just the table code from the entire page
rows = table.findAll("tr") # This will extract each table row, in an array
movies = []
for index, row in enumerate(rows):
if index > 0: # We skip the first row since this row only contains the column names
link = row.find("a") # We get the link from the table row
rating = row.find(class_="tMeterScore") # We get the element with the class tMeterScore from the table row
movies.append({
"link": links_base + link.get('href'), # The href attribute of the link
"title": link.string.strip(), # The strip function removes blank spaces at the beginning and the end of a string
"rating": rating.string.strip().replace(" ", ""), # We remove from the string and the blank spaces
})
print(movies)
Wenn Sie diesen Code ausführen, sollten Sie ein Ergebnis wie dieses erhalten:
In diesem Beispiel extrahieren wir den Tabelleninhalt und durchlaufen die Tabellenzeilen in einer Schleife. Da die erste Zeile nur die Spaltennamen enthält, überspringen wir sie.
Bei den restlichen Zeilen setzen wir den Vorgang fort, indem wir das Anker-Element (<a>) und das Span-Element mit der Klasse „tMeterScore“ extrahieren. Damit können wir nun die benötigten Informationen abrufen.
Der Titel des Films befindet sich im Anker-Element, der Link ist das Attribut „href“ des Ankers und die Bewertung befindet sich im Span-Element mit der Klasse „tMeterScore“. Wir erstellen einfach für jede Zeile ein neues Wörterbuch und fügen es unserer Liste der Filme hinzu.