Zurück zum Blog
Anleitungen
Robert MunceanuLast updated on Mar 31, 20266 min read

So extrahieren Sie Sitemaps von Websites für mehr Effizienz

So extrahieren Sie Sitemaps von Websites für mehr Effizienz

Hallo und willkommen zurück zu unserer Web-Scraping-Show! In der heutigen Folge werden wir herausfinden, wie Preisoptimierung zum Wachstum unseres Unternehmens beitragen kann, indem wir eine Website mithilfe ihrer Sitemaps scrapen.

Wenn du wissen möchtest, wie es weitergeht, mach es dir bequem, schnapp dir ein paar Snacks und schau weiter zu – ich meine natürlich: lies weiter!

Warum Sie Produktdaten benötigen

Die Nutzung öffentlicher Informationen für das eigene Geschäftswachstum ist unter Unternehmern weltweit gängige Praxis.

Preisdaten, Wettbewerbsbeobachtung, Umsatzoptimierung und andere Lösungen, die Ihrem Unternehmen zum Erfolg verhelfen, lassen sich mithilfe eines Web-Scraping-Tools gewinnen. Stellen Sie sich vor, wie viel Zeit es kosten würde, die Informationen von Hunderten von Produkten per Kopieren und Einfügen in eine Tabelle zu übertragen. Hier verändert WebScrapingAPI die Spielregeln.

Die klassische Methode, Informationen mit einem Web-Scraping-Tool zu sammeln

Nehmen wir an, Sie möchten die Produkte einer Website en masse scrapen. Eine Möglichkeit, ein Web-Scraping-Tool zu nutzen, besteht darin, die URL jeder Produktseite manuell auszuwählen, damit das Tool sie scrapen kann. Das bedeutet, dass Sie die Website durchsuchen und herausfinden müssen, wo sich die einzelnen Produktseiten befinden, und so weiter.

Wenn die Website nur ein paar Dutzend Seiten umfasst, ist das noch machbar, aber was ist, wenn die Website Hunderte oder sogar Tausende von Seiten hat? Die Arbeit könnte etwas mühsam werden, viel Zeit in Anspruch nehmen und zudem unangenehm sein.

Was können wir in einer solchen Situation tun?

Der schnellere Weg

Sitemaps. Was sind das?

Sitemaps können im Zusammenhang mit SEO von Vorteil sein. Sie sind wie ein Bauplan einer Website und helfen Suchmaschinen dabei, alle Inhalte Ihrer Website zu finden, zu crawlen oder sogar zu indexieren.

Normalerweise werden sie von großen Websites verwendet, um ihre Seiten besser zu strukturieren und Suchmaschinen dabei zu helfen, die wichtigsten Seiten von den weniger wichtigen zu unterscheiden.

Können wir diese Sitemaps beim Scraping zu unserem Vorteil nutzen? Natürlich! Finden wir heraus, wie sie uns helfen können, die Inhalte einer Website massenhaft zu scrapen.

Probieren wir die Methode aus!

Um WebScrapingAPI nutzen zu können, müssen wir ein Konto erstellen und unseren privaten Zugangsschlüssel erhalten, der zur Authentifizierung bei der API dient. Keine Sorge, die Kontoerstellung ist kostenlos und du musst weder deine Kreditkarte noch andere persönliche Daten angeben.

Nach der Anmeldung werden wir zum Dashboard weitergeleitet. Hier sehen wir unseren Zugangsschlüssel, den wir in wenigen Augenblicken verwenden werden. Bewahren Sie ihn gut auf, aber wenn Sie glauben, dass Ihr privater Schlüssel kompromittiert wurde, können Sie ihn jederzeit zurücksetzen, indem Sie auf die Schaltfläche „Reset API Key“ klicken.

Weitere Details zur Funktionsweise von WebScrapingAPI und zur Integration in Ihr Projekt finden Sie in der Dokumentation. Um die API zu testen, hilft Ihnen der API Playground dabei, die Ergebnisse noch besser zu visualisieren!

Genug der Einführung, schauen wir uns nun an, wie wir WebScrapingAPI nutzen können, um mithilfe von Sitemaps Daten zu scrapen.

In diesem Beispiel verwenden wir NodeJS als Programmiersprache, aber du kannst jede Programmiersprache verwenden, mit der du vertraut bist. Anschließend scrapen wir die Sitemap und parsen ihre Produkt-URLs, scrapen die Produktseiten und speichern die Daten in einer CSV-Datei. Auf diese Weise kannst du mit WebScrapingAPI massenhaft Daten scrapen, aber wenn du nur bestimmte Seiten scrapen möchtest, kannst du auch spezifische Anfragen stellen.

1. Sitemap-URLs finden

In diesem Beispiel betrachten wir die Sitemaps von Maplin, die sich am Ende ihrer robots.txt-Datei befinden.

Wenn wir der obigen URL folgen, werden wir zu der XML-Datei weitergeleitet, die die Sitemap-Links enthält.

Wenn wir dem ersten Link von oben folgen, gelangen wir zur Sitemap verschiedener Seiten, von denen einige Produktseiten sind! Das sind die Seiten, von denen wir Daten extrahieren und in einer CSV-Datei für die spätere Verwendung speichern werden. Klingt einfach, nicht wahr?

2. Identifizieren Sie die Selektoren

Um nur die Daten zu extrahieren, die wir benötigen, müssen wir wissen, wo sie sich befinden. Dazu rufen wir die oben genannte URL für die intelligenten Lichtschalter auf und nutzen das Entwickler-Tool „Inspect“.

Wir stellen fest, dass jedes Produkt in der Liste unter einem li-Tag mit der Klasse ais-Hits-item steht.

Innerhalb dieses Knotens sehen wir, dass der Titel und der Preis jeweils unter dem h3-Tag mit der Klasse „result-title“ und dem span-Tag mit der Klasse „after_special price“ stehen.

3. Installieren Sie die erforderlichen Pakete

Dieser Schritt ist recht einfach; installieren Sie einfach diese Pakete:

  • jsdom: hilfreich beim Parsen von HTML.
  • got: Dieses Paket hilft uns dabei, die HTTP-Anfrage an die WebScrapingAPI zu stellen.
  • xml2js: parst die XML-Datei und wandelt sie zur einfacheren Verwendung in ein Objekt um.
  • csv-writer: zum Speichern der extrahierten Daten in einer CSV-Datei.

Um all diese Pakete zu installieren, gib einfach diesen Befehl in das Terminal deines Projekts ein:

npm install jsdom got xml2js csv-writer

4. Parameter für die Anfrage vorbereiten

Hier nutzen wir eine der Funktionen der WebScrapingAPI, um die Seite zu rendern und zu warten, bis der gesamte Inhalt geladen ist. Auf diese Weise können wir mehr Daten erfassen. Vergessen Sie nicht, Ihren privaten Zugangsschlüssel und die URL hinzuzufügen, die Sie scrapen möchten – in unserem Fall die Sitemap-URL, die die Links zu den Produktseiten enthält.

const api_url = "https://api.webscrapingapi.com/v1"
const url = "https://www.maplin.co.uk/media/sitemap/maplin_uk-1-1.xml"
let params = {
   api_key: "XXXXX",
   url: url,
   render_js: 1,
   wait_until: 'networkidle2'
}

5. Senden Sie die Anfrage und analysieren Sie die resultierende XML-Zeichenkette

Nachdem wir das Ergebnis von der API erhalten haben, müssen wir die XML-Zeichenkette in ein Objekt konvertieren.

const response = await got(api_url, {searchParams: params})

const parser = new xml2js.Parser()
parser.parseString(response.body, async function (err, result) { 
// the rest of the code 
}

Der nächste Schritt besteht darin, die Produkt-URLs zu durchlaufen, für jede eine Anfrage zu erstellen, um die Produktdaten zu extrahieren, und auszuwählen, welche Informationen wir speichern müssen.

6. Durchlaufen, anfordern, auswählen

In diesem Beispiel müssen wir nicht alle URLs der Sitemap durchlaufen, daher nehmen wir nur die URLs von Position 5 bis 10. Als Nächstes bereiten wir die Parameter für die API-Anfrage vor und verwenden JSDOM, um den resultierenden HTML-Code zu parsen.

Um den Titel und den Preis des Produkts auszuwählen, haben wir zuvor gesehen, dass diese sich jeweils im h3-Tag mit der Klasse „result-title“ und im span-Tag mit der Klasse „after_special price“ befinden.

Nachdem wir ein Objekt mit dem soeben extrahierten Titel und Preis erstellt haben, fügen wir es dem Array „products“ hinzu.

Der Code sollte in etwa so aussehen:

let products = []

for (let index = 5; index < 10; index++) {
   params.url = result['urlset']['url'][index]['loc'][0]

   const res = await got(api_url, {searchParams: params})

   const {document} = new JSDOM(res.body).window

   const elements = document.querySelectorAll('li.ais-Hits-item')
   if (elements) {
       elements.forEach((element) => {
           let element_obj = {}

           const title = element.querySelector('h3.result-title')
           if (title && title.innerHTML) element_obj.title = title.innerHTML
           const price = element.querySelector('.after_special.price')
           if (price && price.innerHTML) element_obj.price = price.innerHTML

           if (element_obj && element_obj.title && element_obj.price)
               products.push(element_obj)
       })
   }
}

7. Speichern der extrahierten Daten

Hier verwenden wir die csv-writer-Bibliothek, um eine Liste von Objekten in eine CSV-Datei zu konvertieren.

Geben Sie einfach den Pfad und den Namen der zu erstellenden Datei sowie das headers-Array an, das aus Spaltenobjekten besteht, wobei die ID die Eigenschaften der Produkt-Objekte darstellt und der Titel der Name der Spalte ist.

const csvWriter = require('csv-writer').createObjectCsvWriter({
   path: 'products.csv',
   header: [
       {id: 'title', title: 'Product Name'},
       {id: 'price', title: 'Product Price'}
   ]
})
csvWriter.writeRecords(products).then(() => console.log('Success!!'))

8. Fertig!

Wir haben erfolgreich Daten extrahiert, indem wir Sitemaps verwendet haben, um durch die Produktseiten einer Website zu navigieren – herzlichen Glückwunsch! Hier ist die vollständige Ansicht des Codes:

const {JSDOM} = require("jsdom");
const got = require("got");
const xml2js = require("xml2js");

(async () => {
   const api_url = "https://api.webscrapingapi.com/v1"
   const url = "https://www.maplin.co.uk/media/sitemap/maplin_uk-1-1.xml"
   let params = {
       api_key: "XXXXX",
       url: url,
       render_js: 1,
       wait_until: 'networkidle2'
   }
   const response = await got(api_url, {searchParams: params})

   const parser = new xml2js.Parser()
   parser.parseString(response.body, async function (err, result) {

       let products = []

       for (let index = 5; index < 10; index++) {
           params.url = result['urlset']['url'][index]['loc'][0]

           const res = await got(api_url, {searchParams: params})

           const {document} = new JSDOM(res.body).window

           const elements = document.querySelectorAll('li.ais-Hits-item')
           if (elements) {
               elements.forEach((element) => {
                   let element_obj = {}

                   const title = element.querySelector('h3.result-title')
                   if (title && title.innerHTML) element_obj.title = title.innerHTML
                   const price = element.querySelector('.after_special.price')
                   if (price && price.innerHTML) element_obj.price = price.innerHTML

                   if (element_obj && element_obj.title && element_obj.price)
                       products.push(element_obj)
               })
           }
       }

       const csvWriter = require('csv-writer').createObjectCsvWriter({
           path: 'products.csv',
           header: [
               {id: 'title', title: 'Product Name'},
               {id: 'price', title: 'Product Price'}
           ]
       })

       csvWriter.writeRecords(products).then(() => console.log('Success!!'))
   })
})();

Probieren Sie es selbst aus!

Ich hoffe, dieses Tutorial war hilfreich und hat dir verdeutlicht, wie einfach es ist, Sitemaps zu unserem Vorteil beim Web-Scraping zu nutzen.

Es ist sogar weniger zeitaufwendig, und auf diese Weise verpassen Sie keine Seiten, wie es normalerweise der Fall wäre, wenn Sie manuell durch eine Website navigieren.

Wenn es um das Scraping in großem Umfang geht, ist es klar, dass die Verwendung von Sitemaps eine weitaus bessere Lösung ist, als jede Produktseite manuell auszuwählen oder sogar einen Spider zum Crawlen der Website zu verwenden.

Bis zur nächsten Folge unserer Web-Scraping-Reihe: Wie wäre es, wenn du WebScrapingAPI einmal ausprobierst? Du kannst es mit bis zu 1000 kostenlosen API-Aufrufen testen. Bis zum nächsten Mal!

Über den Autor
Robert Munceanu, Full-Stack-Entwickler @ WebScrapingAPI
Robert MunceanuFull-Stack-Entwickler

Robert Munceanu ist Full-Stack-Entwickler bei WebScrapingAPI, wo er in allen Bereichen des Produkts mitwirkt und an der Entwicklung zuverlässiger Tools und Funktionen zur Unterstützung der Plattform mitwirkt.

Los geht’s

Sind Sie bereit, Ihre Datenerfassung zu erweitern?

Schließen Sie sich den über 2.000 Unternehmen an, die WebScrapingAPI nutzen, um Webdaten im Unternehmensmaßstab ohne zusätzlichen Infrastrukturaufwand zu extrahieren.