Web Scraping Guide mit Python mit Beautiful Soup
Veröffentlicht: 2020-06-23Einführung in das Web Scraping mit Python:
Beim Web Scraping werden einige Programmiersprachen anderen vorgezogen. Eines der beliebtesten unter diesen ist Python. Abgesehen davon, dass es aufgrund seiner sanfteren Lernkurve eine der am einfachsten zu erlernenden Sprachen ist, hat es auch den Vorteil, eine Sprache mit massiver Entwicklerunterstützung zu sein – was zu zahlreichen Paketen von Drittanbietern geführt hat. Diese Pakete können für mehrere Funktionalitäten verwendet werden, die mit Core-Python möglicherweise schwierig auszuführen sind. Einige gängige Beispiele sind: Für Bildverarbeitung oder Computer Vision verwenden wir OpenCV, für maschinelles Lernen verwenden wir TensorFlow und zum Zeichnen von Diagrammen verwenden wir MatplotLib. Wenn es um Web Scraping geht, ist BeautifulSoup eine der am häufigsten verwendeten Bibliotheken. Diese Bibliothek kratzt nicht speziell Daten aus dem Internet, aber falls Sie die HTML-Datei einer Webseite erhalten können, kann sie helfen, bestimmte Datenpunkte daraus zu extrahieren. Im Allgemeinen wird die Bibliothek verwendet, um Datenpunkte aus XML- und HTML-Dokumenten zu extrahieren.
Wie funktioniert BeautifulSoup?
Bevor Sie Code in Python schreiben, müssen Sie verstehen, wie BeautifulSoup funktioniert. Sobald Sie den HTML-Inhalt einer Webseite extrahiert und in einer Variablen gespeichert haben, z. B. html_obj, können Sie ihn mit nur einer Codezeile in ein BeautifulSoup-Objekt konvertieren.
| soup_obj = BeautifulSuppe(html_obj, 'html.parser') |
Wobei „html_obj“ die HTML-Daten sind, „suppen_obj“ das erhaltene bs-Objekt und „html.parser“ der Parser ist, der für die Konvertierung verwendet wurde. Sobald Sie das bs-Objekt namens soup_obj haben, ist es sehr einfach, es zu durchqueren, und da das Durchlaufen einfach genug ist, wird auch die Datenextraktion einfach. Nehmen wir ein Beispiel. Angenommen, Sie müssen einen Datenpunkt namens Produkttitel abrufen, der auf jeder Seite einer E-Commerce-Website vorhanden ist. Jetzt haben Sie eine einzelne HTML-Produktseite von dieser Website heruntergeladen und festgestellt, dass jede Seite den Produktnamen in einem Element vom Typ span mit id als productTitle erwähnt hat. Wie werden Sie also diese Daten von sagen wir 1000 Produktseiten abrufen? Nun, Sie erhalten die HTML-Daten für jede Seite und rufen den Datenpunkt auf diese Weise ab:
| für Spannen in soup.findAll('span', attrs={'id': 'productTitle'}): name_of_product = spans.text.strip() |
Während dies eine Möglichkeit ist, Textdaten zwischen einem bestimmten Tag-Element zu erhalten, können Sie auch Daten aus Attributen eines Tags abrufen.

Wie kratzt man mit BeautifulSoup Daten von Webseiten?
Nachdem wir nun ein grundlegendes Verständnis dafür haben, wie ein bs-Objekt durchlaufen wird, lassen Sie uns etwas Code schreiben und sehen, wie es funktioniert. Mit dem folgenden Code-Snippet können Sie ganz einfach Daten von Zillow, einem führenden Immobilienmarktplatz mit Sitz in den USA, abrufen. Sie können diesen Code ausführen und die URL einer Auflistung eingeben, um die Ausgabedaten in einem JSON-Format zu erhalten. Lassen Sie uns den Code Zeile für Zeile verstehen. Stellen Sie zunächst sicher, dass Python 3.7 oder höher auf Ihrem Computer installiert ist. Verwenden Sie Pip, um BeautifulSoup zu installieren. Alle anderen Pakete sind mit Python vorinstalliert, sodass Sie keines davon installieren müssen. Wenn Sie fertig sind, installieren Sie einen Code-Editor wie Atom oder VS Code, und Sie können loslegen. Es ist wichtig, den Code zu verstehen, und daher beginnen wir mit der allerersten Zeile. Sie benötigen die vier import-Anweisungen für bestimmte Funktionen. Als nächstes haben Sie drei Zeilen, die mit „ctx“ beginnen. Diese dienen speziell zum Ignorieren von SSL-Zertifikatsfehlern, denen Sie möglicherweise begegnen, wenn Sie über Ihren Code auf Websites zugreifen. Als nächstes nehmen wir die Website-URL als Eingabe des Benutzers. Hier können Sie die URL auch fest codieren oder sogar ein Array aus mehreren URLs haben.
Web-Scraping-Prozess:
Als nächstes greifen wir mit der Request-Funktion von urllib auf die Webseite zu. Stellen Sie sicher, dass Sie den User-Agent in der Kopfzeile hinzufügen, damit die Website glaubt, dass Sie einen Browser verwenden. Der Grund dafür ist, dass Websites dazu bestimmt sind, von Browsern und nicht von Code aufgerufen zu werden, und daher können sie Ihre IP blockieren, wenn sie Sie erwischen. Sobald dies erledigt ist, haben wir alle grundlegenden Schritte abgeschlossen und werden als Nächstes das HTML-Objekt in ein bs-Objekt konvertieren und es dann in das utf-8-Format verschönern, um Sonderzeichen und Symbole auf der Webseite zu verarbeiten. Sobald dies erledigt ist, extrahieren wir den Titel, die kurzen Details und andere Eigenschaften, indem wir das bs-Objekt parsen. Wie Sie sehen können, gibt es im script-Tag mit dem Attribut type = application/ld+json mehrere Datenpunkte, die alle in einem JSON-Format gespeichert sind. Sie können auch sehen, dass wir einen i==0- und einen i==1-Check verwenden. Dies liegt daran, dass es auf einer Seite zwei solche Skript-Tags (mit demselben Attribut) gibt. Das erste Tag gibt uns einige Datenpunkte, während das zweite den Rest gibt. Sobald wir alle Datenpunkte extrahiert haben, können Sie sie in einer JSON-Datei speichern und so speichern, wie wir es getan haben. Sie können die Daten auch speichern, auf eine Website hochladen oder sogar auf eine API mit den Daten zugreifen, wenn Sie möchten.

| json importieren SSL importieren from urllib.request import Anfrage, urlopen aus bs4 importieren BeautifulSoup # SSL-Zertifikatsfehler ignorieren # Nehmen Sie die Zillow-Auflistungs-URL als Eingabe # Lassen Sie die Website glauben, dass Sie einen Browser verwenden # HTML-Seite -> BeautifulSoup Objektsuppe = BeautifulSoup(webpage, 'html.parser') # Verschiedene Datenpunkte der Immobilienliste extrahieren für meta in soup.findAll('meta', attrs={'name': 'description'}): for div in soup.findAll('div', attrs={'class': 'character-count-truncated'}): for (i, script) in enumerate(soup.findAll('script', mit open('house_listing_data.json', 'w') als outfile: mit open('house_listing_data.html', 'wb') als Datei: print('———-Datenextraktion abgeschlossen. JSON-Datei prüfen.———-') |
Die Ausgabe von JSON sollte in etwa so aussehen:
| { „details_lang“: { „Anzahl_der_Zimmer“: 3, „floor_size_in_sqrft“: „1.392“ }, "die Anschrift": { „Straße“: „22516 Joan Dr“, „Ort“: „Kalifornien“, „Region“: „MD“, „Postleitzahl“: „20619“ }, „Titel“: „22516 Joan Dr, California, MD 20619 | MLS #MDSM167670“, „details_short“: „22516 Joan Dr , Kalifornien, MD 20619-3175 ist ein Einfamilienhaus, das für 150.000 $ zum Verkauf angeboten wird. Das 1.392 Quadratfuß große Haus ist ein Anwesen mit 3 Schlafzimmern und 2,0 Bädern. Finden Sie 40 Fotos des Hauses 22516 Joan Dr. auf Zillow. Sehen Sie sich weitere Immobiliendetails, Verkaufshistorie und Zestimate-Daten auf Zillow an. MLS-Nummer MDSM167670“, „Preis_in_Dollar“: 150000, „inage“: „https://photos.zillowstatic.com/p_h/ISn2oi3glpvdv10000000000.jpg“ } |
Fazit:
Die Verwendung von BeautifulSoup für Ihre Web-Scraping-Anforderungen kann einfach sein, solange Sie die HTML-Seiten zunächst manuell analysieren und sich für die Tags entscheiden können, auf die abgezielt werden muss. Es kann auf Seiten funktionieren, die keinen dynamischen Inhalt haben und sich nicht hinter einer Anmeldeseite befinden. Für komplexere Webseiten benötigen Sie komplexere Tools. Unser Team bei PromptCloud hilft Unternehmen, die Daten nutzen und datengestützte Entscheidungen treffen möchten. Wir helfen nicht nur bei der Einrichtung vollautomatischer Web-Scraping-Engines, die in regelmäßigen Abständen in der Cloud ausgeführt werden, sondern helfen Unternehmen auch bei der Analyse der Daten, um Trends und andere nützliche Informationen zu extrahieren.
