Parsel: Wie man in Python Text aus HTML extrahiert
Mihai Maxim am 31. Januar 2023

Einführung
Web Scraping ist der automatisierte Prozess des Sammelns von Daten aus Websites mit Hilfe eines Skripts oder Programms. Es wird verwendet, um Informationen wie Text, Bilder und andere Arten von Daten zu extrahieren, die für verschiedene Zwecke wie Forschung, Datenanalyse oder Marktanalyse nützlich sein können.
Heutzutage gibt es eine ganze Reihe von Lösungen, wenn es um Web-Scraping mit Python geht. Selenium und Scrapy sind einige der am häufigsten verwendeten und beliebtesten Bibliotheken. Diese Tools eignen sich zwar hervorragend für komplizierte Scraping-Aufgaben, können aber für den gelegentlichen Gebrauch ein wenig überwältigend sein.
Hier kommt Parsel, die kleine Scraping-Bibliothek. Diese leichtgewichtige und einfach zu erlernende Bibliothek ist perfekt für kleine Projekte und eignet sich hervorragend für diejenigen, die neu im Web Scraping sind. Sie ist in der Lage, HTML zu analysieren und Daten mithilfe von CSS- und XPath-Selektoren zu extrahieren, was sie zu einem großartigen Werkzeug für jeden Datenliebhaber macht, der nach einer schnellen und einfachen Möglichkeit sucht, Informationen aus dem Web zu sammeln.
Schnallen Sie sich an und machen Sie sich bereit, den Umgang mit dieser Bibliothek zu erlernen, während Sie sich mit mir auf das Abenteuer der automatischen Datenerfassung einlassen. Auf geht's zum Scrapen!
Erste Schritte mit Parsel
Sie können die Parsel-Bibliothek mit installieren:
pip install parsel
Lassen Sie uns nun direkt in ein Beispielprojekt eintauchen und alle Länderdaten von dieser einfachen Website https://www.scrapethissite.com/pages/simple/ abrufen .
Um den HTML-Code von der Website abzurufen, müssen Sie eine HTTP-GET-Anfrage stellen.
Wir werden HTTP-Anfragen mit der Python-Bibliothek "requests" durchführen, also stellen Sie sicher, dass Sie sie mit installieren:
Pip-Installationsanfragen
Jetzt können Sie den HTML-Code abrufen und in eine Datei schreiben:
import parsel
import requests
response = requests.get("https://www.scrapethissite.com/pages/simple/")
with open("out.html", "w", encoding="utf-8") as f:
f.write(response.text)
Und prüfen Sie die Struktur:

Unsere Daten werden in ähnlichen Strukturen gespeichert:
<div class="col-md-4 country">
<h3 class="country-name">
<i class="flag-icon flag-icon-af"></i>
Afghanistan
</h3>
<div class="country-info">
<strong>Capital:</strong> <span class="country-capital">Kabul</span><br>
<strong>Population:</strong> <span class="country-population">29121286</span><br>
<strong>Area (km<sup>2</sup>):</strong> <span class="country-area">647500.0</span><br>
</div>
</div><!--.col-->
Um Selektoren zu schreiben, müssen Sie das rohe HTML an Parsel übergeben:
import parsel
import requests
response = requests.get("https://www.scrapethissite.com/pages/simple/")
raw_html = response.text
parsel_dom = parsel.Selector(text = raw_html)
Jetzt sind wir bereit, einige Selektoren zu schreiben.
Extrahieren von Text mit CSS-Selektoren
Sie können die erste Landeshauptstadt mit ausdrucken:
parsel_dom = parsel.Selector(text=raw_html)
first_capital = parsel_dom.css(".country-capital::text").get()
print(first_capital)
// Ausgabe
Andorra la Vella
parsel_dom.css(".country-capital::text").get() wählt den inneren Text des ersten Elements aus, das die Klasse country-capital hat.
Sie können alle Ländernamen mit ausdrucken:
countries_names = filter(lambda line: line.strip() != "", parsel_dom.css(".country-name::text").getall())
for country_name in countries_names:
print(country_name.strip())
// Ausgabe
Andorra
Vereinigte Arabische Emirate
Afghanistan
Antigua und Barbuda
Anguilla
. . .
parsel_dom.css(".country-name::text").getall() wählt die inneren Texte aller Elemente aus, die die Klasse "country-name" haben.
Notice that we had to clean-up the output a bit. We did that because all the elements that have the “.country-name” class also have an <i> tag nested inside of them. Also, the country name is surrounded by many trailing spaces.
<h3 class="country-name">
<i class="flag-icon flag-icon-ae"></i> //this is picked up as an empty string
United Arab Emirates // this is picked up as “ United Arab Emirates “
</h3>
Schreiben wir nun ein Skript, das alle Daten mit CSS-Selektoren extrahiert:
import parsel
import requests
response = requests.get("https://www.scrapethissite.com/pages/simple/")
raw_html = response.text
parsel_dom = parsel.Selector(text=raw_html)
countries = parsel_dom.css(".country")
countries_data = []
for country in countries:
country_name = country.css(".country-name::text").getall()[1].strip()
country_capital = country.css(".country-capital::text").get()
country_population = country.css(".country-population::text").get()
country_area = country.css(".country-area::text").get()
countries_data.append({
"name": country_name,
"capital": country_capital,
"population": country_population,
"area": country_area
})
for country_data in countries_data:
print(country_data)
// Outputs
{'name': 'Andorra', 'capital': 'Andorra la Vella', 'population': '84000', 'area': '468.0'}
{'name': 'United Arab Emirates', 'capital': 'Abu Dhabi', 'population': '4975593', 'area': '82880.0'}
{'name': 'Afghanistan', 'capital': 'Kabul', 'population': '29121286', 'area': '647500.0'}
...
Extrahieren von Text mit XPath-Selektoren
XPath ist eine Abfragesprache zur Auswahl von Knoten in einem XML-Dokument. Sie steht für XML Path Language und verwendet eine Pfadnotation, die der von URLs ähnelt, um durch die Elemente und Attribute eines XML-Dokuments zu navigieren. XPath-Ausdrücke können verwendet werden, um ein einzelnes Element, eine Gruppe von Elementen oder ein bestimmtes Attribut eines Elements auszuwählen. XPath wird hauptsächlich in XSLT verwendet, kann aber auch zur Navigation durch das Document Object Model (DOM) eines beliebigen XML-ähnlichen Dokuments wie HTML oder SVG genutzt werden.
XPath kann auf den ersten Blick einschüchternd wirken, aber es ist eigentlich recht einfach, damit anzufangen, sobald man die grundlegenden Konzepte und die Syntax versteht. Eine nützliche Ressource ist unser XPath-Selektoren-Leitfaden unter https://www.webscrapingapi.com/the-ultimate-xpath-cheat-sheet.
Nun wollen wir einige Selektoren ausprobieren:
So können Sie das erste Kapital drucken:
parsel_dom = parsel.Selector(text=raw_html)
first_capital = parsel_dom.xpath('//*[@class="country-capital"]/text()').get()
print(first_capital)
// Ausgabe
Andorra la Vella
Und alle Ländernamen:
countries_names = filter(lambda line: line.strip() != "",
parsel_dom.xpath('//*[@class="country-name"]//text()').getall())
for country_name in countries_names:
print(country_name.strip())
// Ausgabe
Andorra la Vella
Abu Dhabi
Kabul
St. John's
The Valley
Tirana
...
Lassen Sie uns das Skript mit XPath-Selektoren neu implementieren:
import parsel
import requests
response = requests.get("https://www.scrapethissite.com/pages/simple/")
raw_html = response.text
parsel_dom = parsel.Selector(text=raw_html)
countries = parsel_dom.xpath('//div[contains(@class,"country")][not(contains(@class,"country-"))]')
countries_data = []
for country in countries:
country_name = country.xpath(".//h3/text()").getall()[1].strip()
country_capital = country.xpath(".//span/text()").getall()[0]
country_population = country.xpath(".//span/text()").getall()[1]
country_area = country.xpath(".//span/text()").getall()[2]
countries_data.append({
"name": country_name,
"capital": country_capital,
"population": country_population,
"area": country_area
})
for country_data in countries_data:
print(country_data)
// Output
{'name': 'Andorra', 'capital': 'Andorra la Vella', 'population': '84000', 'area': '468.0'}
{'name': 'United Arab Emirates', 'capital': 'Abu Dhabi', 'population': '4975593', 'area': '82880.0'}
{'name': 'Afghanistan', 'capital': 'Kabul', 'population': '29121286', 'area': '647500.0'}
...
Entfernen von Elementen
Das Entfernen von Elementen ist einfach. Wenden Sie einfach die Drop-Funktion auf einen Selektor an:
selector.css(".my_class").drop()
Zur Veranschaulichung dieser Funktionalität schreiben wir ein Skript, das das Feld "Bevölkerung" aus jedem Land entfernt:
import parsel
import requests
response = requests.get("https://www.scrapethissite.com/pages/simple/")
raw_html = response.text
parsel_dom = parsel.Selector(text=raw_html)
countries = parsel_dom.css(".country")
for country in countries:
country.css(".country-population").drop()
country.xpath(".//strong")[1].drop()
country.xpath(".//br")[1].drop()
countries_without_population_html = parsel_dom.get()
with open("out.html", "w", encoding="utf-8") as f:
f.write(countries_without_population_html)

Exportieren der Daten
Wenn Sie mit dem Scrapen der Daten fertig sind, müssen Sie sich überlegen, wie Sie die Daten speichern wollen. Zwei gängige Formate zum Speichern dieser Art von Daten sind .json und .csv. Sie sollten jedoch das Format wählen, das für Ihre Projektanforderungen am besten geeignet ist.
Exportieren der Daten in .json
JSON (JavaScript Object Notation) ist ein leichtgewichtiges Datenaustauschformat, das für Menschen leicht zu lesen und zu schreiben und für Maschinen leicht zu analysieren und zu erzeugen ist. Es wird häufig für den Austausch von Daten zwischen einer Webanwendung und einem Server oder zwischen verschiedenen Teilen einer Webanwendung verwendet. JSON ähnelt einem Python-Wörterbuch, da es zum Speichern von Daten in Schlüssel-Wert-Paaren verwendet wird und zum Speichern und Zugreifen auf dieselbe Art von Daten und dieselbe Struktur verwendet werden kann.
Der Export eines Arrays von Python-Wörterbüchern nach .json kann mit der json-Bibliothek durchgeführt werden:
import json
countries_dictionaries = [
{'name': 'Andorra', 'capital': 'Andorra la Vella', 'population': '84000', 'area': '468.0'},
{'name': 'United Arab Emirates', 'capital': 'Abu Dhabi', 'population': '4975593', 'area': '82880.0'}
]
json_data = json.dumps(countries_dictionaries, indent=4)
with open("data.json", "w") as outfile:
outfile.write(json_data)
// data.json
[
{
"name": "Andorra",
"capital": "Andorra la Vella",
"population": "84000",
"area": "468.0"
},
{
"name": "United Arab Emirates",
"capital": "Abu Dhabi",
"population": "4975593",
"area": "82880.0"
}
]
Exportieren der Daten in .csv
Eine CSV-Datei ist eine einfache Möglichkeit, Daten in einer Textdatei zu speichern, wobei jede Zeile eine Zeile darstellt und jeder Wert durch ein Komma getrennt ist. Sie wird oft in Tabellenkalkulations- oder Datenbankprogrammen verwendet. Python bietet mit seinem csv-Modul eine hervorragende integrierte Unterstützung für die Arbeit mit CSV-Dateien. Eine der leistungsfähigsten Funktionen des CSV-Moduls ist die DictWriter-Klasse, mit der Sie auf einfache Weise ein Python-Wörterbuch in eine CSV-Datei schreiben können. Die Schlüssel des Wörterbuchs werden als Spaltenüberschriften in der CSV-Datei verwendet, und die Werte werden als die entsprechenden Daten in die Zeilen geschrieben.
Hier sehen Sie, wie Sie die csv-Bibliothek verwenden können, um ein Array von Python-Wörterbüchern in .csv zu exportieren.
countries_dictionaries = [
{"name": "John Smith", "age": 35, "city": "New York"},
{"name": "Jane Doe", "age": 28, "city": "San Francisco"}
]
with open("data.csv", "w") as outfile:
writer = csv.DictWriter(outfile, fieldnames=countries_dictionaries[0].keys())
writer.writeheader()
for row in countries_dictionaries:
writer.writerow(row)
// data.csv
name,age,city
John Smith,35,New York
Jane Doe,28,San Francisco
Einpacken
In diesem Artikel haben wir uns mit der Verwendung der Parsel-Bibliothek in Python beschäftigt. Wir haben gesehen, wie einfach es ist, die CSS- und XPath-Selektoren zu verwenden, die Parsel bereitstellt, um Daten aus Webseiten zu extrahieren. Insgesamt bietet Parsel eine effiziente und vielseitige Lösung für Web Scraping. Wenn Sie an der Automatisierung der Datenerfassung interessiert sind, sollten Sie es auf jeden Fall ausprobieren.
Möchten Sie mehr über Web Scraping erfahren? Schauen Sie sich unser Produkt WebScrapingAPI an, und entdecken Sie, wie Sie Ihre Fähigkeiten zur Datenextraktion auf die nächste Stufe bringen können. Unsere leistungsstarke API wurde speziell entwickelt, um Sie bei der Bewältigung der häufigsten Herausforderungen des Web Scraping zu unterstützen, z. B. bei der Umgehung von IP-Sperren oder beim Rendern von Javascript. Und das Beste daran? Sie können es kostenlos ausprobieren!
Nachrichten und Aktualisierungen
Bleiben Sie auf dem Laufenden mit den neuesten Web Scraping-Anleitungen und Nachrichten, indem Sie unseren Newsletter abonnieren.
We care about the protection of your data. Read our <l>Privacy Policy</l>.Privacy Policy.

Ähnliche Artikel

Entdecken Sie die Komplexität des Scrapens von Amazon-Produktdaten mit unserem ausführlichen Leitfaden. Von Best Practices und Tools wie der Amazon Scraper API bis hin zu rechtlichen Aspekten erfahren Sie, wie Sie Herausforderungen meistern, CAPTCHAs umgehen und effizient wertvolle Erkenntnisse gewinnen.


Erfahren Sie, wie Sie mit Hilfe von Datenparsing, HTML-Parsing-Bibliotheken und schema.org-Metadaten effizient Daten für Web-Scraping und Datenanalysen extrahieren und organisieren können.


Sind XPath-Selektoren besser als CSS-Selektoren für Web Scraping? Erfahren Sie mehr über die Stärken und Grenzen der einzelnen Methoden und treffen Sie die richtige Wahl für Ihr Projekt!
