Web-Scraping mit regulären Ausdrücken kann ein leistungsstarkes Werkzeug zum Extrahieren von Daten aus Websites sein, hat jedoch auch seine Grenzen. Eines der Hauptprobleme bei der Verwendung von Regex für Web-Scraping ist, dass es fehlschlagen kann, wenn sich die Struktur des HTML-Codes ändert.
Betrachten Sie zum Beispiel das folgende Codebeispiel, in dem wir versuchen, den Text aus dem h2-Tag mithilfe von Regex zu extrahieren:
<html>
<head>
<title>Example Title</title>
</head>
<body>
<h1>Page Title</h1>
<p>This is a paragraph under the title</p>
<h2>First Subtitle</h2>
<p>First paragraph under the subtitle</p>
<h2>Second Subtitle</p>
</body>
</html>
Vergleichen Sie das erste <h2>-Tag mit dem zweiten. Sie werden feststellen, dass das zweite <h2> nicht ordnungsgemäß geschlossen ist und der Code </p> anstelle von </h2> enthält. Aktualisieren wir den Codeausschnitt wie folgt:
import re
html = "<html><head><title>Example Title</title></head><body><h1>Page Title</h1><p>This is a paragraph under the title</p><h2>First Subtitle</h2><p>First paragraph under the subtitle</p><h2>Second Subtitle</p></body></html>"
headingTags = re.findall("<h2>(.*?)</h2>", html)
print(*headingTags, sep = "\n")
Führen wir den Code aus und überprüfen wir die Ausgabe:
First Subtitle
Der Text aus dem zweiten Überschriften-Tag fehlt. Dies geschieht, weil die Regex-Regel nicht mit dem nicht geschlossenen Überschriften-Tag übereinstimmt.
Eine Lösung für dieses Problem ist die Verwendung einer Bibliothek wie BeautifulSoup, mit der Sie die HTML-Baumstruktur durchsuchen können, anstatt sich auf reguläre Ausdrücke zu verlassen. Mit BeautifulSoup können Sie den Titel einer Webseite wie folgt extrahieren:
from bs4 import BeautifulSoup
html = "<html><head><title>Example Title</title></head><body><h1>Page Title</h1><p>This is a paragraph under the title</p><h2>First Subtitle</h2><p>First paragraph under the subtitle</p><h2>Second Subtitle</p></body></html>"
soup = BeautifulSoup(html, 'html.parser')
for headingTag in soup.findAll('h2'):
print(headingTag.text)
BeautifulSoup kann fehlerhafte Tags extrahieren, und die Ausgabe sieht wie folgt aus:
First Subtitle
Second Subtitle
Dieser Ansatz ist robuster gegenüber Änderungen in der HTML-Struktur, da er nicht auf bestimmte Muster im HTML-Code angewiesen ist. Wenn Sie mehr über BeautifulSoup erfahren möchten, ist dieser Artikel genau das Richtige für Sie.
Eine weitere Lösung ist die Verwendung einer Web-Scraping-API wie WebScrapingAPI, die die Komplexität des Web-Scrapings abstrahiert und es Ihnen ermöglicht, die benötigten Daten einfach zu extrahieren, ohne sich um die zugrunde liegende HTML-Struktur kümmern zu müssen.
Mit WebScrapingAPI können Sie Daten von jeder Website mit einem einfachen API-Aufruf extrahieren, und Änderungen in der HTML-Struktur werden automatisch verarbeitet.