Scraper#

Können Sie mir mal die Webseite kratzen? - Scraping mit BeautifulSoup#

Stelle eine GET-Request an deine liebste Wikipedia-Seite.

# Code
Hide 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
Hide code cell source
!pip install beautifulsoup4

Erstelle eine BeautifulSoup aus dem Text der Anfrage.

# Code
Hide 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
Hide 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
Hide 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
Hide code cell source
absaetze = soup.find_all('p')
absaetze

Filtere jetzt nur die Hyperlinks von der Seite, die im Text vorkommen.

# Code
Hide code cell source
for p in absaetze:
    print(p.text)
    for link in p.find_all('a'):
        print(link.get('href'))