Das Parsen von Daten ist einer der wichtigsten und heikelsten Schritte in jedem Web-Scraping-Projekt - auch wenn wir nicht alles sehen, was hinter den Kulissen passiert.
Die Qualität unserer Daten hängt jedoch in hohem Maße von der Qualität unserer Parser ab. Wenn Sie also diesen Prozess verstehen, verbessern Sie Ihre Web Scraping-Fähigkeiten, erhalten bessere Kriterien dafür, warum Sie bestimmte Tools statt anderer verwenden sollten, und können schneller durch die Daten navigieren.
Beginnen wir also mit einem übergeordneten Konzept:
Inhaltsübersicht
Was ist Data Parsing?
Das Parsen von Daten ist der Prozess der Umwandlung einer Sequenz (unstrukturierte Daten) in einen Baum oder Parse-Baum (strukturierte Daten), der leichter zu lesen, zu verstehen und zu verwenden ist. Dieser Prozess kann weiter in zwei Schritte oder Komponenten unterteilt werden: 1) lexikalische Analyse und 2) syntaktische Analyse.
Die lexikalische Analyse nimmt eine Folge von Zeichen (unstrukturierte Daten) und wandelt sie in eine Reihe von Token um. Mit anderen Worten, der Parser verwendet einen Lexer, um "die bedeutungslose Zeichenkette in eine flache Liste von Dingen wie "Zahlenliteral", "Zeichenkettenliteral", "Bezeichner" oder "Operator" zu verwandeln und kann Dinge wie die Erkennung von reservierten Bezeichnern ("Schlüsselwörtern") und das Verwerfen von Leerzeichen tun."
Bei der syntaktischen Analyse schließlich ordnet ein Parser diese Token in einem Parse-Baum an, indem er Elemente (Knoten) und Verzweigungen (die Beziehung zwischen ihnen) erstellt.
Aber gut, es ist immer noch ein sehr abstraktes Konzept, nicht wahr? Um es leichter zu verstehen, lassen Sie uns untersuchen, wie Data Parsing zusammen mit Web Scraping funktioniert, um die Informationen zu extrahieren, die wir benötigen.
Daten-Parsing und Web Scraping
Wenn wir einen Web Scraper schreiben, egal in welcher Sprache, müssen wir uns zunächst Zugang zu den Informationen auf einer Website verschaffen, indem wir eine Anfrage an den Server senden und die rohe HTML-Datei herunterladen. Diese HTML-Daten sind so gut wie unlesbar.
Damit wir und unsere Teams diese Daten nutzen können, müssen wir den HTML-Code analysieren und in einen Parse-Baum umwandeln. Dann können wir durch die Daten navigieren, um die spezifischen Informationen zu finden, die für unser Geschäft oder unsere Ziele relevant sind.
Wie Sie sehen können, steht jeder Knoten für ein relevantes HTML-Element und dessen Inhalt, und die Verzweigungen stellen die Beziehungen zwischen ihnen dar.
Mit anderen Worten: Der Parser bereinigt die Daten und ordnet sie in einem strukturierten Format an, das nur das enthält, was wir brauchen, und das nun in JSON, CSV oder ein anderes von uns definiertes Format exportiert werden kann.
Das Beste daran ist, dass ein großer Teil der schweren Arbeit bereits für uns erledigt ist. Es stehen uns mehrere Parser und Tools zur Verfügung. In den meisten Fällen bringen sie viele wertvolle Funktionen mit, wie z.B. die Navigation im geparsten Dokument mit CSS- oder XPath-Selektoren entsprechend ihrer Position im Baum.
Beste Parsing-Bibliotheken für Web Scraping
Die meisten Daten, mit denen wir beim Web Scraping arbeiten, liegen in HTML vor. Aus diesem Grund gibt es viele Open-Source-HTML-Parsing-Bibliotheken für fast jede Sprache, die Sie sich vorstellen können. Das macht Web Scraping schneller und einfacher.
Hier sind einige der beliebtesten Parsing-Bibliotheken, die Sie in Ihren Projekten verwenden können:
Cheerio und Puppenspieler
Für diejenigen, die JavaScript beherrschen, ist Cheerio eine blitzschnelle Node-js-Bibliothek, mit der fast jede HTML- und XML-Datei geparst werden kann und die "eine API für das Traversieren/Manipulieren der resultierenden Datenstruktur bietet."
Hier ist ein Beispiel aus unserem Node.js Web Scraper Tutorial:
</p>
<pre data-no-auto-translation="">const axios = require('axios');
const cheerio = require('cheerio')
const url="https://www.turmerry.com/collections/organic-cotton-sheet-sets/products/percale-natural-color-organic-sheet-sets";
axios(url)
.then(response => {
const html = response.data;
const $ = cheerio.load(html)
const salePrice = $('.sale-price').text()
console.log(salePrice);
})
.catch(console.error);</pre>
<p>
Wenn Sie jedoch Screenshots machen oder JavaScript ausführen müssen, sollten Sie Puppeteer, ein Browser-Automatisierungstool, verwenden, da Cheerio keine CSS anwendet, keine externen Ressourcen lädt und kein JS ausführt.
Schöne Suppe
Python ist wahrscheinlich eine der am häufigsten verwendeten Sprachen in der Datenwissenschaft, und es gibt so viele großartige Bibliotheken und Frameworks für diese Sprache. Beautiful Soup ist ein hervorragender Parser für Web Scraping, der so ziemlich jede HTHML-Datei in einen Parse-Baum verwandeln kann.
Das Beste daran ist, dass es die Kodierung für Sie übernimmt, d.h. es "konvertiert eingehende Dokumente in Unicode und ausgehende Dokumente in UTF-8." Das macht den Export von Daten in neue Formate noch einfacher.
Hier ist ein Beispiel dafür, wie Sie Beautiful Soup initiieren können:
</p>
<pre data-no-auto-translation="">import csv
import requests
from bs4 import BeautifulSoup
url="https://www.indeed.com/jobs?q=web+developer&l=New+York"
page = requests.get(url)
soup = BeautifulSoup(page.content, 'html.parser')
results = soup.find(id='resultsCol')</pre>
<p>
Ausschnitt aus unserer Anleitung zum Erstellen von Indeed Web Scraper mit Beautiful Soup
Bei komplexeren Projekten erleichtert Scrapy, ein in Python geschriebenes Open-Source-Framework, das speziell für Web Scraping entwickelt wurde, die Implementierung eines Crawlers oder die Navigation der Paginierung.
Mit Scrapy sind Sie in der Lage, komplexe Spider zu schreiben, die strukturierte Daten von fast jeder Website crawlen und extrahieren.
Das Beste an diesem Framework ist, dass es mit einer Shell (Scrapy Shell genannt) geliefert wird, mit der Sie XPath- und CSS-Ausdrücke sicher testen können, ohne jedes Mal Ihre Spider zu starten.
Hier ist ein Beispiel für die Handhabung von Paginierung mit Scrapy, das Sie sich ansehen können.
Rvest
Inspiriert von Bibliotheken wie Beautiful Soup ist Rvest ein Paket zur Vereinfachung von Web-Scraping-Aufgaben für R. Es verwendet Magrittr, um leicht lesbare Ausdrücke (>) zu schreiben, was die Entwicklungs- und Debugging-Zeit beschleunigt.
Um Ihr Skript noch funktionaler zu gestalten, können Sie Dplyr so implementieren, dass es eine einheitliche Reihe von Verben für die Datenmanipulation wie select(), filter() und summarise() verwendet.
Hier finden Sie ein kurzes Codebeispiel aus unserem Rvest-Tutorial zum Scannen von Daten:
</p>
<pre data-no-auto-translation="">link = "https://www.imdb.com/search/title/?title_type=feature&num_votes=25000&genres=adventure"
page = read_html(link)
titles = page > html_nodes(".lister-item-header a") > html_text()</pre>
<p>
In nur drei Codezeilen haben wir bereits alle Titel einer IMDB-Seite ausgelesen. Sie können sich also vorstellen, welches Potenzial dieses Paket für Ihre Web-Scraping-Anforderungen hat.
Nokogiri
Mit über 300 Millionen Downloads ist Nokogiri einer der am häufigsten verwendeten Edelsteine für Ruby Web Scraping, insbesondere beim Parsen von HTML- und XML-Dateien. Dank der Popularität von Ruby und der aktiven Community gibt es für Nokogiri eine Menge Unterstützung und Tutorials, so dass es auch für Neulinge leicht zugänglich ist.
Wie andere Bibliotheken in dieser Liste können Sie beim Web Scraping mit Ruby CSS- und XPath-Selektoren verwenden, um im Parse-Baum zu navigieren und auf die benötigten Daten zuzugreifen. Abgesehen davon ist das Scraping mehrerer Seiten mit diesem Edelstein recht einfach, solange Sie verstehen, wie HTML dargestellt wird.
In unserem Leitfaden Nokogiri für Anfänger finden Sie eine kurze Einführung in den Edelstein. In der Zwischenzeit finden Sie hier ein Snippet zum Parsen einer eCommerce-Produktseite:
</p>
<pre data-no-auto-translation="">require 'httparty'
require 'nokogiri'
require 'byebug'
def scraper
url = "https://www.newchic.com/hoodies-c-12200/?newhead=0&mg_id=2&from=nav&country=223&NA=0"
unparsed_html = HTTParty.get(url)
page = Nokogiri::HTML(unparsed_html)
products = Array.new
product_listings = page.css('div.mb-lg-32')</pre>
<p>
HTMLAgilityPack
Für C#-Entwickler ist HTMLAgilityPack der HTML- und XML-Parser schlechthin. Er ist schnell und verfügt über alle Funktionen, die Sie für Ihre Projekte benötigen. Vielleicht möchten Sie ihn jedoch über ScrapySharp verwenden.
ScrapySharp ist eine in C-Sharp geschriebene Open-Source-Bibliothek für Web Scraping. Sie enthält einen Web-Client zur Nachahmung eines Browsers und eine HTMLAgilityPack-Erweiterung zur Verwendung von CSS-Selektoren für die Durchquerung des Knotenbaums.
Nachdem Sie Ihre Datei eingerichtet haben, können Sie Ihre Ziel-URL mit diesen beiden Codezeilen parsen:
</p>
<pre data-no-auto-translation="">HtmlWeb web = new HtmlWeb();
HtmlDocument doc = web.Load("https://blog.hubspot.com/topic-learning-path/customer-retention");</pre>
<p>
Den vollständigen Code finden Sie in unserem Tutorial über CSharp Web Scraping.
ScraperAPI
ScraperAPI ist, wie Sie vielleicht schon erraten haben, eine Web Scraping API, die entwickelt wurde, um Ihnen zu helfen, IP-Sperren zu vermeiden, indem sie einen Großteil der Komplexität des Web Scraping für Sie übernimmt. Dinge wie IP-Rotation, JavaScript-Rendering und CAPTCHA-Verarbeitung werden für Sie automatisiert, indem Sie Ihre Anfragen einfach über die Server von ScraperAPI senden.
Weniger bekannt ist jedoch, dass die ScraperAPI auch über eine Autoparse-Funktion verfügt. Wenn Sie autoparse=true in den Parametern der Anfrage festlegen, analysiert die API das rohe HTML und gibt die Daten im JSON-Format zurück.
Um es anschaulicher zu machen, hier ein Schnipsel, den Sie sofort verwenden können:
</p>
<pre data-no-auto-translation="">curl "http://api.scraperapi.com/?api_key=APIKEY&url=https://www.amazon.com/dp/B07V1PHM66&autoparse=true"</pre>
<p>
Derzeit funktioniert diese Funktion mit Amazon, Google Search und Google Shopping.
Um 5000 kostenlose API-Credits und Ihren eigenen API-Schlüssel zu erhalten, melden Sie sich für ein kostenloses ScraperAPI-Konto an.
Sollten Sie Ihren eigenen Parser erstellen?
Wir haben viele Scraping-Projekte gesehen, die mit den oben aufgeführten Tools entwickelt wurden, und haben sie aus erster Hand verwendet. Wir können Ihnen also garantieren, dass Sie mit den verfügbaren Bibliotheken so ziemlich alles erreichen können.
Wir wissen jedoch auch, dass es manchmal (und für bestimmte Branchen) unerlässlich ist, eine hausinterne Option in Betracht zu ziehen. Wenn Sie erwägen, einen eigenen Parser zu entwickeln, sollten Sie die folgenden Vor- und Nachteile berücksichtigen, um eine fundierte Entscheidung zu treffen:
Profis |
Nachteile |
|
|
|
|
|
|
|
|
In den meisten Fällen werden Sie mit den vorhandenen Technologien auskommen, aber wenn es geschäftlich sinnvoll ist, einen eigenen Parser zu entwickeln, sollten Sie hier beginnen.
Einpacken
Parsing ist für Web Scraping unerlässlich, da wir mit Rohdaten nicht arbeiten können - zumindest nicht effektiv und effizient.
Noch wichtiger ist es jedoch, ein Ziel vor Augen zu haben und die Website zu verstehen, die wir scrapen wollen. Jede Website ist anders aufgebaut, also müssen wir recherchieren, bevor wir einen Code schreiben oder unsere Tools auswählen.
JS-lastige Websites erfordern einen anderen Ansatz als statische Seiten, und nicht jedes Tool kann problemlos mit Paginierung umgehen.
Denken Sie daran, dass es beim Web Scraping darum geht, die Struktur einer Website herauszufinden, um die Daten zu extrahieren, die wir benötigen. Es geht um Problemlösungen und nicht nur um den technischen Stack.
Wenn Sie mehr über Web-Scraping erfahren möchten, finden Sie in unserem Blog Web-Scraping-Tutorials und Spickzettel. In unserer Dokumentation erfahren Sie, wie Sie mit ScraperAPI in wenigen Minuten unentdeckbare Scraper erstellen können.
Bis zum nächsten Mal, viel Spaß beim Schaben!