Es gibt hauptsächlich zwei Möglichkeiten, Daten von einer Website zu extrahieren:

  • Verwenden Sie die API der Website (falls vorhanden). Facebook verfügt beispielsweise über die Facebook Graph API, mit der auf Facebook gepostete Daten abgerufen werden können.
  • Greifen Sie auf den HTML-Code der Webseite zu und extrahieren Sie nützliche Informationen / Daten daraus. Diese Technik wird als Web Scraping oder Web Harvesting oder Web Data Extraction bezeichnet.

Dieser Artikel beschreibt die Schritte beim Web-Scraping mithilfe der Implementierung eines Web-Scraping-Frameworks von Python namens Beautiful Soup.

Schritte beim Web Scraping:

  1. Senden Sie eine HTTP-Anfrage an die URL der Webseite, auf die Sie zugreifen möchten. Der Server antwortet auf die Anfrage, indem er den HTML-Inhalt der Webseite zurückgibt. Für diese Aufgabe verwenden wir eine HTTP-Bibliothek eines Drittanbieters für Python-Anforderungen.
  2. Sobald wir auf den HTML-Inhalt zugegriffen haben, haben wir die Aufgabe, die Daten zu analysieren. Da die meisten HTML-Daten verschachtelt sind, können wir Daten nicht einfach durch Zeichenfolgenverarbeitung extrahieren. Man braucht einen Parser, der eine verschachtelte / Baumstruktur der HTML-Daten erstellen kann. Es gibt viele HTML-Parser-Bibliotheken, aber die fortschrittlichste ist html5lib.
  3. Jetzt müssen wir nur noch den von uns erstellten Analysebaum navigieren und durchsuchen, dh den Baum durchqueren. Für diese Aufgabe verwenden wir eine andere Python-Bibliothek eines Drittanbieters, Beautiful Soup . Es ist eine Python-Bibliothek zum Abrufen von Daten aus HTML- und XML-Dateien.

Schritt 1: Installieren der erforderlichen Bibliotheken von Drittanbietern

  • Die einfachste Möglichkeit, externe Bibliotheken in Python zu installieren, ist die Verwendung von pip. pip ist ein Paketverwaltungssystem, mit dem in Python geschriebene Softwarepakete installiert und verwaltet werden.
    Alles was Sie tun müssen ist:
Pip Installationsanforderungen
pip installiere html5lib
pip install bs4

Schritt 2: Zugriff auf den HTML-Inhalt von der Webseite



import requests 
URL = "https://www.geeksforgeeks.org/data-structures/"
r = requests.get(URL) 
print(r.content) 

Versuchen wir, diesen Code zu verstehen.

  • Importieren Sie zunächst die Anforderungsbibliothek.
  • Geben Sie dann die URL der Webseite an, die Sie durchsuchen möchten.
  • Senden Sie eine HTTP-Anforderung an die angegebene URL und speichern Sie die Antwort vom Server in einem Antwortobjekt mit dem Namen r.
  • Jetzt als Druck r.content, um den rohen HTML-Inhalt der Webseite zu erhalten. Es ist vom Typ 'string'.

Schritt 3: Analysieren des HTML-Inhalts

import requests 
from bs4 import BeautifulSoup 
  
URL = "http://www.values.com/inspirational-quotes"
r = requests.get(URL) 
  
soup = BeautifulSoup(r.content, 'html5lib') 
print(soup.prettify()) 

Eine wirklich schöne Sache an der BeautifulSoup-Bibliothek ist, dass sie auf den HTML-Parsing-Bibliotheken wie html5lib, lxml, html.parser usw. aufbaut. So können das BeautifulSoup-Objekt und die Angabe der Parser-Bibliothek gleichzeitig erstellt werden.

Im obigen Beispiel

suppe = BeautifulSoup (r.content, 'html5lib')

Wir erstellen ein BeautifulSoup-Objekt, indem wir zwei Argumente übergeben:

  • r.content : Dies ist der rohe HTML-Inhalt.
  • html5lib  : Angabe des HTML-Parsers, den wir verwenden möchten.

Jetzt wirdoup.prettify() gedruckt und  gibt die visuelle Darstellung des Analysebaums, der aus dem rohen HTML-Inhalt erstellt wurde.

Schritt 4: Suchen und Navigieren durch den Analysebaum

Nun möchten wir einige nützliche Daten aus dem HTML-Inhalt extrahieren. Das Suppenobjekt enthält alle Daten in der verschachtelten Struktur, die programmgesteuert extrahiert werden können. In unserem Beispiel kratzen wir eine Webseite, die aus einigen Zitaten besteht. Daher möchten wir ein Programm erstellen, um diese Zitate (und alle relevanten Informationen darüber) zu speichern.



import requests 
from bs4 import BeautifulSoup 
import csv 
   
URL = "http://www.values.com/inspirational-quotes"
r = requests.get(URL) 
   
soup = BeautifulSoup(r.content, 'html5lib') 
   
quotes=[]  
   
table = soup.find('div', attrs = {'id':'all_quotes'})  
   
for row in table.findAll('div', 
                         attrs = {'class':'col-6 col-lg-3 text-center margin-30px-bottom sm-margin-30px-top'}): 
    quote = {} 
    quote['theme'] = row.h5.text 
    quote['url'] = row.a['href'] 
    quote['img'] = row.img['src'] 
    quote['lines'] = row.img['alt'].split(" #")[0] 
    quote['author'] = row.img['alt'].split(" #")[1] 
    quotes.append(quote) 
   
filename = 'inspirational_quotes.csv'
with open(filename, 'w', newline='') as f: 
    w = csv.DictWriter(f,['theme','url','img','lines','author']) 
    w.writeheader() 
    for quote in quotes: 
        w.writerow(quote) 

Bevor Sie fortfahren, empfehlen wir Ihnen, den HTML-Inhalt der Webseite, die wir mit der Methodeoup.prettify() gedruckt haben, durchzugehen und zu versuchen, ein Muster oder eine Möglichkeit zu finden, zu den Anführungszeichen zu navigieren.

  • Es wird bemerkt, dass sich alle Anführungszeichen in einem div-Container befinden, dessen ID 'all_quotes' ist. Also finden wir dieses div-Element (im obigen Code als Tabelle bezeichnet) mit der find() -Methode:
    table =oup.find ('div', attrs = {'id': 'all_quotes'}) 

    Das erste Argument ist das HTML-Tag, nach dem Sie suchen möchten, und das zweite Argument ist ein Element vom Typ Wörterbuch, um die zusätzlichen Attribute anzugeben, die diesem Tag zugeordnet sind. Die Methode find() gibt das erste übereinstimmende Element zurück. Sie können versuchen, table.prettify() zu drucken , um einen Eindruck davon zu bekommen, was dieser Code bewirkt.

  • Jetzt kann man im Tabellenelement feststellen, dass sich jedes Anführungszeichen in einem div-Container befindet, dessen Klasse Anführungszeichen ist. Also durchlaufen wir jeden div-Container, dessen Klasse Anführungszeichen ist.
    Hier verwenden wir die Methode findAll(), die in Bezug auf Argumente der Methode find ähnelt, jedoch eine Liste aller übereinstimmenden Elemente zurückgibt. Jedes Anführungszeichen wird jetzt mit einer Variablen namens row
    iteriert . Hier ist ein Beispiel für einen Zeilen-HTML-Inhalt zum besseren Verständnis:
    Implementieren von Web Scraping in Python mit Beautiful Soup
    Betrachten Sie nun diesen Code:
    für Zeile in table.find_all_next ('div', attrs = {'class': 'col-6 col-lg-3 Text-Center-Rand-30px-bottom sm-margin-30px-top'}):
        quote = {}
        quote ['theme'] = row.h5.text
        quote ['url'] = row.a ['href']
        quote ['img'] = row.img ['src']
        quote ['lines'] = row.img ['alt']. split ("#") [0]
        quote ['author'] = row.img ['alt']. split ("#") [1]
        quote.append (Zitat)

    Wir erstellen ein Wörterbuch, um alle Informationen zu einem Angebot zu speichern. Auf die verschachtelte Struktur kann mit Punktnotation zugegriffen werden. Um auf den Text in einem HTML-Element zuzugreifen , verwenden wir .text:

    quote ['theme'] = row.h5.text

    Wir können die Attribute eines Tags hinzufügen, entfernen, ändern und darauf zugreifen. Dazu wird das Tag als Wörterbuch behandelt:

    quote ['url'] = row.a ['href']

    Zuletzt werden alle Anführungszeichen an die als Anführungszeichen bezeichnete Liste angehängt .

  • Schließlich möchten wir alle unsere Daten in einer CSV-Datei speichern.
    Dateiname = 'inspirational_quotes.csv'
    mit open (Dateiname, 'w', newline = '') als f:
        w = csv.DictWriter (f, ['theme', 'url', 'img', 'lines', 'author'])
        w.writeheader()
        für ein Zitat in Anführungszeichen:
            w.writerow (Zitat)

    Hier erstellen wir eine CSV-Datei mit dem Namen inspirational_quotes.csv und speichern alle darin enthaltenen Anführungszeichen für die weitere Verwendung.

Dies war also ein einfaches Beispiel für das Erstellen eines Web-Scraper in Python. Von hier aus können Sie versuchen, jede andere Website Ihrer Wahl zu verschrotten. Wenn Sie Fragen haben, posten Sie diese unten im Kommentarbereich.

Hinweis: Web Scraping wird in vielen Fällen als illegal angesehen. Dies kann auch dazu führen, dass Ihre IP von einer Website dauerhaft blockiert wird.

Dieser Blog wurde von Nikhil Kumar verfasst . Wenn Ihnen GeeksforGeeks gefällt und Sie einen Beitrag leisten möchten, können Sie auch einen Artikel mit Contrib.geeksforgeeks.org schreiben oder Ihren Artikel an Contribute@geeksforgeeks.org senden . Sehen Sie sich Ihren Artikel auf der GeeksforGeeks-Hauptseite an und helfen Sie anderen Geeks.

Bitte schreiben Sie Kommentare, wenn Sie etwas Falsches finden oder weitere Informationen zu dem oben diskutierten Thema teilen möchten.

Geeks-Digest-Img