Python: Beschleunigen Sie Beautiful Soup - Optimieren Sie Ihre Web-Scraping-Effizienz!
Published on
Web-Scraping ist ein leistungsstarkes Werkzeug im Werkzeugkasten eines Datenwissenschaftlers. Es ermöglicht uns, Daten aus dem Web zu extrahieren und zu manipulieren, was eine Vielzahl von Anwendungen ermöglicht. Eine der beliebtesten Bibliotheken für Web-Scraping in Python ist Beautiful Soup. Wie bei jedem Tool können jedoch auch bei Beautiful Soup Leistungsprobleme auftreten. In diesem Artikel werden wir erkunden, wie Sie Beautiful Soup schneller machen und so Ihre Web-Scraping-Effizienz verbessern können.
Beautiful Soup ist eine Python-Bibliothek, die zum Zweck des Web-Scrapings verwendet wird, um Daten aus HTML- und XML-Dateien zu extrahieren. Sie erstellt einen Analysebaum aus dem Quellcode der Seite, der verwendet werden kann, um Daten hierarchisch und lesbarer zu extrahieren. Manchmal kann Beautiful Soup jedoch langsam sein. Dies kann ein Problem sein, wenn Sie es mit großen Datenmengen oder komplexen Web-Scraping-Operationen zu tun haben.
Möchten Sie Datenvisualisierungen aus Python Pandas Dataframes ohne Code erstellen?
PyGWalker ist eine Python-Bibliothek für explorative Datenanalyse mit Visualisierung. PyGWalker (opens in a new tab) kann Ihren Workflow zur Datenanalyse und Datenvisualisierung in Jupyter Notebook vereinfachen, indem es Ihren Pandas-DataFrame (und Polars-DataFrame) in eine Tableau-ähnliche Benutzeroberfläche für visuelle Exploration verwandelt.
Beschleunigen Sie Beautiful Soup durch Verwendung verschiedener Parser
Eine Möglichkeit, Beautiful Soup zu beschleunigen, besteht darin, einen anderen Parser zu verwenden. Beautiful Soup unterstützt mehrere Parser, aber die gängigsten sind der integrierte HTML-Parser von Python und lxml. Laut der ersten Quelle kann die Verwendung von lxml das Parsing von Beautiful Soup um das Zehnfache beschleunigen. Das liegt daran, dass lxml in C geschrieben ist und daher mehr Operationen pro Sekunde als Python ausführen kann. Um lxml mit Beautiful Soup zu verwenden, müssen Sie es lediglich installieren (mit pip install lxml) und dann beim Erstellen des Beautiful Soup-Objekts angeben:
from bs4 import BeautifulSoup
soup = BeautifulSoup(html_content, 'lxml')
Beschleunigen Sie Beautiful Soup mit Caching-Bibliotheken
Caching ist eine Technik, bei der Daten in einem temporären Speicherbereich, auch als Cache bezeichnet, gespeichert werden, um in Zukunft schneller darauf zugreifen zu können. Beim Web-Scraping kann Caching die Leistung von BeautifulSoup erheblich verbessern.
Eine der beliebtesten Caching-Bibliotheken in Python ist requests-cache
. Sie bietet eine transparente Caching-Schicht für Anfragen. Hier ist ein Beispiel, wie Sie es mit BeautifulSoup verwenden können:
import requests
import requests_cache
from bs4 import BeautifulSoup
# Erstellen Sie einen Cache, der 24 Stunden lang gültig ist
requests_cache.install_cache('my_cache', expire_after=86400)
# Verwenden Sie requests wie gewohnt
url = "http://example.com"
response = requests.get(url)
soup = BeautifulSoup(response.text, 'lxml')
In diesem Beispiel speichert requests-cache das Ergebnis beim ersten Ausführen des Skripts im Cache 'my_cache'. Wenn Sie das Skript innerhalb von 24 Stunden erneut ausführen, verwendet requests-cache das zwischengespeicherte Ergebnis, was das Skript schneller macht.
Beschleunigen Sie Beautiful Soup mit CDNs und Proxy-Servern
Ein Content Delivery Network (CDN) ist ein geografisch verteiltes Netzwerk von Proxy-Servern und ihren Rechenzentren. Das Ziel besteht darin, eine hohe Verfügbarkeit und Leistung zu bieten, indem der Dienst räumlich relativ zu den Endbenutzern verteilt wird. Wenn es um BeautifulSoup geht, kann ein CDN die Leistung verbessern, indem es die Latenz der Anfragen reduziert.
Ein Proxy-Server ist ein Server, der als Vermittler für Anfragen von Clients fungiert, die Ressourcen von anderen Servern anfordern. Wenn es mit BeautifulSoup verwendet wird, kann ein Proxy-Server die Leistung verbessern, indem er die Last der Anfragen ausgleicht.
Hier ist ein Beispiel, wie Sie einen Proxy-Server mit BeautifulSoup verwenden können:
import requests
from bs4 import BeautifulSoup
proxies = {
'http': 'http://10.10.1.10:3128',
'https': 'http://10.10.1.10:1080',
}
url = "http://example.com"
response = requests.get(url, proxies=proxies)
soup = BeautifulSoup(response.text, 'lxml')
In diesem Beispiel werden die Anfragen über den im proxies-Dictionary angegebenen Proxy-Server gesendet. Dies kann dazu beitragen, die Last der Anfragen auszugleichen und die Leistung von BeautifulSoup zu verbessern.
Optimieren Sie BeautifulSoup mit Multithreading
Multithreading ist eine Technik, die es ermöglicht, einen einzigen Satz von Code von mehreren Prozessoren in unterschiedlichen Ausführungsphasen verwenden zu lassen. Dies kann die Leistung Ihrer BeautifulSoup-Operationen erheblich verbessern, insbesondere beim Umgang mit großen Datenmengen oder bei der Ausführung komplexer Web-Scraping-Operationen.
In Python können Sie das Modul concurrent.futures
verwenden, um einen Thread-Pool zu erstellen, in dem jede Instanz Ihrer BeautifulSoup-Operation in einem separaten Thread ausgeführt werden kann. Hier ist ein Beispiel:
import requests
from bs4 import BeautifulSoup
from concurrent.futures import ThreadPoolExecutor
def fetch_url(url):
response = requests.get(url)
return response.text
def parse_html(html):
soup = BeautifulSoup(html, 'lxml')
# Führen Sie hier Ihre BeautifulSoup-Operationen durch
urls = ["http://example.com/page1", "http://example.com/page2", "http://example.com/page3"]
with ThreadPoolExecutor(max_workers=5) as executor:
htmls = executor.map(fetch_url, urls)
for html in htmls:
parse_html(html)
In diesem Beispiel erstellt ThreadPoolExecutor
einen Pool von 5 Threads. Die map
-Funktion wendet dann die fetch_url
-Funktion auf jede URL in der urls
-Liste an und verteilt die Arbeit auf die Threads im Pool. Dadurch können mehrere URLs gleichzeitig abgerufen und analysiert werden, was die Gesamtgeschwindigkeit erhöht.
Häufig gestellte Fragen (FAQ)
1. Welche Parser werden von Beautiful Soup unterstützt?
Beautiful Soup unterstützt verschiedene Parser, die gängigsten sind 'html.parser', 'lxml', 'xml' und 'html5lib'. Der 'lxml'-Parser ist für seine Geschwindigkeit und Effizienz bekannt, während 'html5lib' HTML so analysiert, wie es ein Webbrowser tut.
2. Wie kann ich Beautiful Soup schneller machen?
Es gibt mehrere Möglichkeiten, Beautiful Soup schneller zu machen. Eine Möglichkeit besteht darin, einen schnelleren Parser wie 'lxml' zu verwenden. Eine andere Möglichkeit besteht darin, eine Caching-Bibliothek wie 'requests-cache' zu verwenden, um die Ergebnisse der Anfragen im Cache zu speichern. Sie können auch ein CDN oder einen Proxy-Server verwenden, um die Latenz der Anfragen zu reduzieren.
3. Verbessert die Verwendung einer Caching-Bibliothek tatsächlich die Leistung?
Ja, die Verwendung einer Caching-Bibliothek kann die Leistung von BeautifulSoup erheblich verbessern. Eine Caching-Bibliothek wie 'requests-cache' speichert die Ergebnisse der Anfragen im Cache, so dass sie in Zukunft schneller abgerufen werden können.