logo

Implementierung von Web Scraping in Python mit BeautifulSoup

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

  • Verwenden Sie die API der Website (sofern vorhanden). Facebook verfügt beispielsweise über die Facebook Graph API, die den Abruf von auf Facebook geposteten Daten ermöglicht.
  • Greifen Sie auf den HTML-Code der Webseite zu und extrahieren Sie nützliche Informationen/Daten daraus. Diese Technik wird Web Scraping oder Web Harvesting oder Web Data Extraction genannt.

In diesem Artikel werden die Schritte beim Web Scraping mithilfe der Implementierung eines Web Scraping-Frameworks von Python namens Beautiful Soup erläutert. 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-Anfragen.
  2. Sobald wir auf den HTML-Inhalt zugegriffen haben, bleibt uns nur noch die Aufgabe, die Daten zu analysieren. Da die meisten HTML-Daten verschachtelt sind, können wir Daten nicht einfach durch Zeichenfolgenverarbeitung extrahieren. Man benötigt einen Parser, der eine verschachtelte Baumstruktur der HTML-Daten erstellen kann. Es stehen viele HTML-Parser-Bibliotheken zur Verfügung, aber die fortschrittlichste ist html5lib.
  3. Jetzt müssen wir nur noch in dem von uns erstellten Analysebaum navigieren und ihn durchsuchen, d. h. den Baum durchqueren. Für diese Aufgabe verwenden wir eine andere Python-Bibliothek eines Drittanbieters. Wunderschöne Suppe . Es handelt sich um eine Python-Bibliothek zum Extrahieren von Daten aus HTML- und XML-Dateien.

Schritt 1: Installieren der erforderlichen Bibliotheken von Drittanbietern

  • Der einfachste Weg, externe Bibliotheken in Python zu installieren, ist die Verwendung von pip. Pip ist ein Paketverwaltungssystem zum Installieren und Verwalten von in Python geschriebenen Softwarepaketen. Alles was Sie tun müssen ist:
pip install requests pip install html5lib pip install bs4>

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

Python








import> requests> URL>=> 'https:>/>/>www.techcodeview.com>/>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 scrapen möchten.
  • Senden Sie eine HTTP-Anfrage an die angegebene URL und speichern Sie die Antwort vom Server in einem Antwortobjekt namens r.
  • Drucken Sie nun r.content aus, um das zu erhalten roher HTML-Inhalt der Webseite. Es ist vom Typ „String“.

Hinweis: Manchmal wird möglicherweise die Fehlermeldung „Nicht akzeptiert“ angezeigt. Versuchen Sie daher, einen Browser-Benutzeragenten wie unten beschrieben hinzuzufügen. Finden Sie hier Ihren Benutzeragenten basierend auf Gerät und Browser https://deviceatlas.com/blog/list-of-user-agent-strings

Python3




npm Cache leeren
headers>=> {>'User-Agent'>:>'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.246'>}> # Here the user agent is for Edge browser on windows 10. You can find your browser user agent from the above given link.> r>=> requests.get(url>=>URL, headers>=>headers)> print>(r.content)>

>

>

Schritt 3: Parsen des HTML-Inhalts

Python




#This will not run on online IDE> import> requests> from> bs4>import> BeautifulSoup> > URL>=> 'http:>/>/>www.values.com>/>inspirational>->quotes'> r>=> requests.get(URL)> > soup>=> BeautifulSoup(r.content,>'html5lib'>)># If this line causes an error, run 'pip install html5lib' or install 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 Parser-Bibliothek gleichzeitig erstellt werden. Im Beispiel oben:

soup = BeautifulSoup(r.content, 'html5lib')>

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

    r.content: Es handelt sich um den rohen HTML-Inhalt. html5lib: Angabe des HTML-Parsers, den wir verwenden möchten.

Jetzt Suppe.prettify() gedruckt wird, Es bietet eine visuelle Darstellung des Analysebaums, der aus dem rohen HTML-Inhalt erstellt wurde. Schritt 4: Durchsuchen und Navigieren im Analysebaum Jetzt 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önnten. In unserem Beispiel durchsuchen wir eine Webseite, die aus einigen Anführungszeichen besteht. Deshalb möchten wir ein Programm erstellen, um diese Angebote (und alle relevanten Informationen darüber) zu speichern.

ASCII-Tabelle in C

Python




#Python program to scrape website> #and save quotes from website> 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>=>[]># a list to store 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 Methode „soup.prettify()“ gedruckt haben, durchzugehen und zu versuchen, ein Muster oder eine Möglichkeit zu finden, zu den Anführungszeichen zu navigieren.

  • Es ist zu beachten, dass sich alle Anführungszeichen in einem Div-Container befinden, dessen ID „all_quotes“ lautet. Wir finden also, dass das div-Element (im obigen Code als Tabelle bezeichnet) verwendet wird finden() Methode :
table = soup.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 Wörterbuchtypelement, um die zusätzlichen Attribute anzugeben, die diesem Tag zugeordnet sind. finden() Die Methode gibt das erste passende Element zurück. Sie können versuchen zu drucken table.prettify() um ein Gefühl dafür zu bekommen, was dieser Code tut.
  • Nun kann man im Tabellenelement erkennen, dass sich jedes Anführungszeichen in einem div-Container befindet, dessen Klasse quote ist. Wir durchlaufen also jeden Div-Container, dessen Klasse ein Anführungszeichen ist. Hier verwenden wir die Methode findAll(), die in Bezug auf die Argumente der Methode find ähnelt, aber eine Liste aller übereinstimmenden Elemente zurückgibt. Jedes Zitat wird nun mithilfe einer Variablen namens iteriert Reihe. Hier ist ein Beispiel für den HTML-Inhalt einer Zeile zum besseren Verständnis: Betrachten Sie nun diesen Code:
for row in table.find_all_next('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)>
  • Wir erstellen ein Wörterbuch, um alle Informationen zu einem Angebot zu speichern. Auf die verschachtelte Struktur kann mithilfe der 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. Dies geschieht, indem das Tag als Wörterbuch behandelt wird:
quote['url'] = row.a['href']>
  • Abschließend werden alle Anführungszeichen an die aufgerufene Liste angehängt Zitate.
  • Abschließend möchten wir alle unsere Daten in einer CSV-Datei speichern.
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)>
  • Hier erstellen wir eine CSV-Datei mit dem Namen „inspirational_quotes.csv“ und speichern alle darin enthaltenen Zitate zur weiteren Verwendung.

Dies war also ein einfaches Beispiel dafür, wie man einen Web-Scraper in Python erstellt. Von hier aus können Sie versuchen, jede andere Website Ihrer Wahl zu löschen. Wenn Sie Fragen haben, posten Sie diese unten im Kommentarbereich.

Notiz : Web Scraping gilt in vielen Fällen als illegal. Es kann auch dazu führen, dass Ihre IP-Adresse dauerhaft von einer Website blockiert wird. Dieser Blog wird von beigetragen Nikhil Kumar .