Wie können wir WSA in unserem Projekt nutzen? Schauen wir uns dieses kurze Beispiel an, in dem wir Amazon scrapen, um die teuerste Grafikkarte auf einer Seite zu finden. Dieses Beispiel ist in JavaScript geschrieben, aber du kannst es in jeder Programmiersprache umsetzen, mit der du vertraut bist.
Zunächst müssen wir einige Pakete installieren, die uns bei der HTTP-Anfrage (got) und der Auswertung des Ergebnisses (jsdom) helfen. Verwenden Sie dazu diesen Befehl im Terminal des Projekts:
npm install got jsdom
Unser nächster Schritt besteht darin, die für unsere Anfrage erforderlichen Parameter festzulegen:
const params = {
api_key: "XXXXXX",
url: "https://www.amazon.com/s?k=graphic+card"
}
So bereiten wir die Anfrage an die WebScrapingAPI vor, damit diese die Website für uns scrapt:
const response = await got('https://api.webscrapingapi.com/v1', {searchParams: params})
Nun müssen wir herausfinden, wo sich jedes Grafikkarten-Element innerhalb des HTML-Codes befindet. Mithilfe des Entwickler-Tools haben wir festgestellt, dass die Klasse s-result-item alle Details zum Produkt enthält, wir jedoch nur den Preis benötigen.
Innerhalb des Elements sehen wir einen Preis-Container mit der Klasse „a-price“ und der Unterklasse „a-offscreen“, aus dem wir den Text extrahieren werden, der den Preis darstellt.
WebScrapingAPI gibt die Seite im HTML-Format zurück, daher müssen wir sie parsen. JSDOM ist dafür das richtige Werkzeug.
const {document} = new JSDOM(response.body).window
Nachdem wir die Anfrage gesendet und die von WSA empfangene Antwort parst haben, müssen wir das Ergebnis filtern und nur das extrahieren, was für uns wichtig ist. Aus dem vorherigen Schritt wissen wir, dass sich die Details jedes Produkts in der Klasse „s-result-item“ befinden, also durchlaufen wir diese. Innerhalb jedes Elements prüfen wir, ob der Preis-Container der Klasse „a-price“ vorhanden ist, und wenn ja, extrahieren wir den Preis aus dem darin enthaltenen Element „a-offscreen“ und fügen ihn einem Array hinzu.
Herauszufinden, welches das teuerste Produkt ist, sollte nun ein Kinderspiel sein. Durchlaufen Sie einfach das Array und vergleichen Sie die Preise miteinander.
Wenn wir das Ganze in eine asynchrone Funktion verpacken, sollte der endgültige Code wie folgt aussehen:
const {JSDOM} = require("jsdom");
const got = require("got");
(async () => {
const params = {
api_key: "XXX",
url: "https://www.amazon.com/s?k=graphic+card"
}
const response = await got('https://api.webscrapingapi.com/v1', {searchParams: params})
const {document} = new JSDOM(response.body).window
const products = document.querySelectorAll('.s-result-item')
const prices = []
products.forEach(el => {
if (el) {
const priceContainer = el.querySelector('.a-price')
if (priceContainer) prices.push(priceContainer.querySelector('.a-offscreen').innerHTML)
}
})
let most_expensive = 0
prices.forEach((price) => {
if(most_expensive < parseFloat(price.substring(1)))
most_expensive = parseFloat(price.substring(1))
})
console.log("The most expensive item is: ", most_expensive)
})();