Kratzen Sie eine Website mit diesem schönen Suppen-Python-Tutorial

Kratzen Sie eine Website mit diesem schönen Suppen-Python-Tutorial

Beautiful Soup ist eine Open-Source-Python-Bibliothek. Es verwendet navigierende Parser, um den Inhalt von XML- und HTML-Dateien abzukratzen. Sie benötigen Daten für verschiedene Analysezwecke. Wenn Sie jedoch noch nicht mit Python und Web-Scraping vertraut sind, lohnt es sich, die Beautiful Soup-Bibliothek von Python für ein Web-Scraping-Projekt auszuprobieren.





Mit Pythons Open-Source-Bibliothek Beautiful Soup können Sie Daten abrufen, indem Sie jeden Teil oder jedes Element einer Webseite mit maximaler Kontrolle über den Prozess abkratzen. In diesem Artikel sehen wir uns an, wie Sie mit Beautiful Soup eine Website kratzen können.





So installieren Sie eine schöne Suppe und legen los

Bevor wir fortfahren, verwenden wir in diesem Tutorial-Artikel von Beautiful Soup Python 3 und schönesuppe4 , die neueste Version von Beautiful Soup. Stellen Sie sicher, dass Sie Erstellen Sie eine virtuelle Python-Umgebung um Ihr Projekt und seine Pakete von denen auf Ihrem lokalen Computer zu isolieren.





Raspberry Pi Skript beim Start ausführen

Um zu beginnen, müssen Sie die Beautiful Soup-Bibliothek in Ihrer virtuellen Umgebung installieren. Beautiful Soup ist als PyPi-Paket für alle Betriebssysteme erhältlich, sodass Sie es mit dem installieren können pip install beautifulsoup4 Befehl über das Terminal.

Wenn Sie jedoch unter Debian oder Linux arbeiten, funktioniert der obige Befehl immer noch, aber Sie können ihn mit dem Paketmanager installieren, indem Sie ihn ausführen apt-get install python3-bs4 .



Beautiful Soup kratzt URLs nicht direkt. Es funktioniert nur mit vorgefertigten HTML- oder XML-Dateien. Das bedeutet, dass Sie eine URL nicht direkt übergeben können. Um dieses Problem zu lösen, müssen Sie die URL der Zielwebsite mit der Anforderungsbibliothek von Python abrufen, bevor Sie sie an Beautiful Soup füttern.

Um diese Bibliothek für Ihren Scraper verfügbar zu machen, führen Sie den Pip-Installationsanfragen Befehl über das Terminal.





Um die XML-Parser-Bibliothek zu verwenden, führen Sie pip install lxml um es zu installieren.

Überprüfen Sie die Webseite, die Sie entfernen möchten

Bevor Sie eine Website, die Sie nicht kennen, kratzen, sollten Sie deren Elemente überprüfen. Sie können dies tun, indem Sie Ihren Browser in den Entwicklermodus schalten. Es ist ziemlich einfach zu Chrome DevTools verwenden wenn Sie Google Chrome verwenden.





Es ist jedoch notwendig, eine Webseite zu überprüfen, um mehr über ihre HTML-Tags, Attribute, Klassen und IDs zu erfahren. Dadurch werden die Kernelemente einer Webseite und ihre Inhaltstypen verfügbar gemacht.

Es hilft Ihnen auch, die besten Strategien zu entwickeln, die Sie verwenden können, um genau die Daten zu erhalten, die Sie von einer Website benötigen, und wie Sie diese abrufen können.

So kratzen Sie die Daten einer Website mit einer schönen Suppe

Nachdem Sie nun alles vorbereitet haben, öffnen Sie einen bevorzugten Code-Editor und erstellen Sie eine neue Python-Datei mit einem ausgewählten Namen. Du kannst aber auch Nutzen Sie webbasierte IDEs wie Jupyter Notebook wenn Sie nicht mit der Ausführung von Python über die Befehlszeile vertraut sind.

Als nächstes importieren Sie die erforderlichen Bibliotheken:

from bs4 import BeautifulSoup
import requests

Sehen wir uns zunächst an, wie die Anforderungsbibliothek funktioniert:

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com')
print(website)

Wenn Sie den obigen Code ausführen, wird ein 200-Status zurückgegeben, der anzeigt, dass Ihre Anforderung erfolgreich war. Andernfalls erhalten Sie einen 400-Status oder einige andere Fehlerstatus, die auf eine fehlgeschlagene GET-Anforderung hinweisen.

Denken Sie daran, die URL der Website in Klammern immer durch Ihre Ziel-URL zu ersetzen.

Sobald Sie die Website mit dem werden anfordern, übergeben Sie es dann an Beautiful Soup, das nun den Inhalt je nach gewähltem Format mit seinem integrierten XML- oder HTML-Parser als HTML- oder XML-Dateien lesen kann.

Sehen Sie sich dieses nächste Code-Snippet an, um zu sehen, wie Sie dies mit dem HTML-Parser tun:

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com')
soup = BeautifulSoup(website.content, 'html.parser')
print(soup)

Der obige Code gibt das gesamte DOM einer Webseite mit seinem Inhalt zurück.

Sie können auch eine besser ausgerichtete Version des DOM erhalten, indem Sie die verschönern Methode. Sie können dies ausprobieren, um die Ausgabe zu sehen:

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
print(soup.prettify())

Sie können auch den reinen Inhalt einer Webseite abrufen, ohne ihr Element mit dem zu laden .Text Methode:

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
print(soup.text)

So schaben Sie den Inhalt einer Webseite nach dem Tag-Namen

Sie können mit Beautiful Soup auch den Inhalt eines bestimmten Tags abkratzen. Dazu müssen Sie den Namen des Ziel-Tags in Ihre Beautiful Soup Scraper-Anfrage aufnehmen.

Sehen wir uns zum Beispiel an, wie Sie den Inhalt in die h2 Tags einer Webseite.

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
print(soup.h2)

Im obigen Code-Snippet Suppe.h2 gibt die erste zurück h2 -Element der Webseite und ignoriert den Rest. Um alle zu laden h2 Elemente können Sie die finde alle eingebaute Funktion und die zum Python-Schleife:

So löschen Sie alte Backups von Time Machine
from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
h2tags = soup.find_all('h2')
for soups in h2tags:
print(soups)

Dieser Codeblock gibt alles zurück h2 Elemente und deren Inhalt. Sie können den Inhalt jedoch abrufen, ohne das Tag zu laden, indem Sie die .string Methode:

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
h2tags = soup.find_all('h2')
for soups in h2tags:
print(soups.string)

Sie können diese Methode für jedes HTML-Tag verwenden. Alles, was Sie tun müssen, ist die h2 markiere mit dem, den du magst.

Sie können jedoch auch weitere Tags abkratzen, indem Sie eine Liste von Tags in das finde alle Methode. Zum Beispiel kratzt der folgende Codeblock den Inhalt von zu , h2 , und Titel Stichworte:

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
tags = soup.find_all(['a', 'h2', 'title'])
for soups in tags:
print(soups.string)

So schaben Sie eine Webseite mithilfe der ID und des Klassennamens

Nachdem Sie eine Website mit den DevTools untersucht haben, erfahren Sie mehr über die ID- und Klassenattribute, die jedes Element in seinem DOM enthalten. Sobald Sie diese Informationen haben, können Sie diese Webseite mit dieser Methode abkratzen. Dies ist nützlich, wenn der Inhalt einer Zielkomponente aus der Datenbank ausläuft.

Du kannst den ... benutzen finden -Methode für die ID- und Klassen-Scraper. nicht so wie finde alle Methode, die ein iterierbares Objekt zurückgibt, die finden Methode funktioniert auf einem einzelnen, nicht iterierbaren Ziel, das ist das Ich würde in diesem Fall. Sie brauchen also nicht die zum Schleife damit.

Sehen wir uns ein Beispiel an, wie Sie den Inhalt einer Seite unten mithilfe der ID kratzen können:

from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
id = soup.find(id = 'enter the target id here')
print(id.text)

Um dies für einen Klassennamen zu tun, ersetzen Sie das Ich würde mit Klasse . Allerdings schreiben Klasse führt direkt zu Syntaxverwirrung, da Python es als Schlüsselwort sieht. Um diesen Fehler zu umgehen, müssen Sie einen Unterstrich wie folgt vor die Klasse schreiben: Klasse_ .

Im Wesentlichen wird die Zeile mit der ID zu:

my_classes = soup.find(class_ = 'enter the target class name here')
print(my_classes.text)

Sie können eine Webseite jedoch auch durch Aufrufen eines bestimmten Tag-Namens mit der entsprechenden ID oder Klasse scannen:

data = soup.find_all('div', class_ = 'enter the target class name here')
print(data)

Wie man einen wiederverwendbaren Schaber mit schöner Suppe herstellt

Sie können eine Klasse erstellen und den gesamten vorherigen Code in einer Funktion in dieser Klasse zusammenfassen, um einen wiederverwendbaren Scraper zu erstellen, der den Inhalt einiger Tags und ihrer IDs abruft. Wir können dies tun, indem wir eine Funktion erstellen, die fünf Argumente akzeptiert: eine URL, zwei Tag-Namen und ihre entsprechenden IDs oder Klassen.

Angenommen, Sie möchten den Preis von Hemden von einer E-Commerce-Website abkratzen. Die folgende Scraper-Beispielklasse extrahiert die Preis- und Shirt-Tags mit ihren entsprechenden IDs oder Klassen und gibt sie dann als Pandas-Datenrahmen mit 'Price' und Shirt_name als Spaltennamen zurück.

Stellen Sie sicher, dass Sie pip install pandas über das Terminal, falls noch nicht geschehen.

import pandas as pd
class scrapeit:
try:
def scrape(website=None, tag1=None, id1=None, tag2=None, id2=None):
if not (website and tag1 and id1 and tag2 and id2)==None:
try:
page = requests.get(website)
soup = BeautifulSoup(page.content, 'html.parser')
infotag1 = soup.find_all(tag1, id1)
infotag2 = soup.find_all(tag2, id2)
priced = [prices.text for prices in infotag1]
shirt = [shirts.text for shirts in infotag2]
data = {
'Price':priced,
'Shirt_name':shirt}
info = pd.DataFrame(data, columns=['Price', 'Shirt_name'])
print(info)
except:
print('Not successful')
else:
print('Oops! Please enter a website, two tags and thier corresponding ids')
except:
print('Not successful!')

Der soeben erstellte Scraper ist ein wiederverwendbares Modul und Sie können es importieren und in einer anderen Python-Datei verwenden. Um die anzurufen kratzen Funktion aus ihrer Klasse, verwenden Sie scrapeit.scrape('Website-URL', 'price_tag', 'price_id', 'shirt_tag', 'shirt_id') . Wenn Sie die URL und andere Parameter nicht angeben, wird die anders -Anweisung fordert Sie dazu auf.

Um diesen Scaper in einer anderen Python-Datei zu verwenden, können Sie ihn wie folgt importieren:

from scraper_module import scrapeit
scrapeit.scrape('URL', 'price_tag', 'price_id', 'shirt_tag', 'shirt_id')

Notiz: scraper_module ist der Name der Python-Datei, die die Scraper-Klasse enthält.

Sie können auch überprüfen, Schöne Suppendokumentation wenn Sie tiefer eintauchen möchten, wie Sie es am besten nutzen können.

Schöne Suppe ist ein wertvolles Web-Scraping-Tool

Beautiful Soup ist ein leistungsstarker Python-Screenscraper, der Ihnen die Kontrolle darüber gibt, wie Ihre Daten während des Scrapings übertragen werden. Es ist ein wertvolles Geschäftstool, da es Ihnen Zugriff auf die Webdaten von Mitbewerbern wie Preise, Markttrends und mehr bietet.

So installieren Sie Windows 10 von einem USB-Stick

Obwohl wir in diesem Artikel einen Tag-Scraper erstellt haben, können Sie immer noch mit dieser leistungsstarken Python-Bibliothek herumspielen, um nützlichere Scraping-Tools zu erstellen.

Teilen Teilen Tweet Email Die besten Web-Scraping-Tools online

Müssen Sie Daten von Websites zu Analysezwecken sammeln? Diese Web-Scraping-Tools machen es Ihnen leicht.

Weiter lesen
Verwandte Themen
  • Programmierung
  • Python
Über den Autor Idisou Omisola(94 veröffentlichte Artikel)

Idowu hat eine Leidenschaft für alles, was smarte Technologien und Produktivität ist. In seiner Freizeit spielt er mit Programmieren und wechselt bei Langeweile aufs Schachbrett, aber er liebt es auch, ab und zu aus der Routine auszubrechen. Seine Leidenschaft, Menschen den Weg in die moderne Technik zu weisen, motiviert ihn, mehr zu schreiben.

Mehr von Idowu Omisola

Abonniere unseren Newsletter

Abonnieren Sie unseren Newsletter für technische Tipps, Rezensionen, kostenlose E-Books und exklusive Angebote!

Klicken Sie hier, um zu abonnieren