Scraper#
Können Sie mir mal die Webseite kratzen? - Scraping mit BeautifulSoup#
Stelle eine GET-Request an deine liebste Wikipedia-Seite.
# Code
Show code cell source
import requests
result = requests.get('https://de.wikipedia.org/wiki/Milovan_%C4%90ilas')
result.text
Installiere, falls nicht bereits geschehen Beautiful Soup.
# Dein Code
Show code cell source
!pip install beautifulsoup4
Erstelle eine BeautifulSoup aus dem Text der Anfrage.
# Code
Show code cell source
'''
Um diesen sehr langen und unübersichtlichen Text besser zu verarbeiten, überführen wir den erhaltenen String in ein BeautifulSoup Datenobjekt.
Jetzt ist die Webseite mit den Funktionalitäten von BeautifulSoup durchsuchbar.
Wichtig ist hier, dass ein Parser benötigt wird, der das HTML "verstehen" kann. Je nach dem Format der erhaltenen Antwort, kann auch ein anderer Parser z.B. für xml, benötigt werden.
'''
from bs4 import BeautifulSoup
soup = BeautifulSoup(result.text, 'html.parser')
Lass dir nur den Text des Artikels ausgeben.
# Code
Show code cell source
'''
Eine der wichtigsten Funktionen von BeautifulSoup ist wohl find_all.
Damit lässt sich nach bestimmten HTML-Tags suchen.
Die wichtigsten HTML-Tags sind:
<p> Paragraph </p>
<a> Hyperlink (Anchor) </a>
<ol> geordnete Liste </ol>
<ul> ungeordnete Liste </ul>
<li> Listeneintrag </li>
In diesem Fall wissen wir, dass der gesamte Text in dieser Webseite innerhalb von einem Parargraph-Tag steht.
'''
text = ''
for p in soup.find_all('p'):
text += p.text
#text
soup.get_text()
Filtere alle Hyperlinks heraus.
# Code
Show code cell source
Mithilfe der get Funktion können wir auf Attribute der jeweiligen Tags zugreifen.
So können wir z.B. die verlinkten Webseiten in einer Seite finden in dem wir uns das href-Attribut eines Anchor-Tags geben lassen.
'''
for link in soup.find_all('a'):
print(link.get('href'))
Finde alle <p>
Tags und Speichere sie in einer Liste
# Code
Show code cell source
absaetze = soup.find_all('p')
absaetze
Filtere jetzt nur die Hyperlinks von der Seite, die im Text vorkommen.
# Code
Show code cell source
for p in absaetze:
print(p.text)
for link in p.find_all('a'):
print(link.get('href'))