Das Speichern der Daten in einer CSV-Datei scheint eine gute Lösung zu sein, und hier kommt uns csv-writer zu Hilfe. Wir müssen den Pfad und den Namen der CSV-Datei im Parameter „path“ und im Parameter „header“ angeben und eine Liste von Objekten festlegen. Jedes Objekt repräsentiert eine Spalte unserer CSV-Datei. Die Eigenschaft „title“ dieser Objekte steht für den Titel der jeweiligen Spalte, während die Eigenschaft „id“ mit den Eigenschaften der Objekte in unserer Liste der Leads übereinstimmen muss.
Wenn wir nun den gesamten Code in eine async-Funktion einbinden und eine Schleife hinzufügen, um die ersten 5 Seiten mit Unternehmen zu scrapen, sollte der Code wie folgt aussehen:
const {JSDOM} = require("jsdom");
const got = require("got");
(async () => {
const leads = []
const nrPages = 5
for (let page = 1; page <= nrPages; page++) {
const url = "https://www.yell.com/ucs/UcsSearchAction.do?keywords=restaurants%26location=United+Kingdom%26scrambleSeed=1024089043%26pageNum=" + page
const params = {
api_key: "XXX",
url: url
}
const response = await got('https://api.webscrapingapi.com/v1', {searchParams: params})
const {document} = new JSDOM(response.body).window
const relatedElements = document.querySelectorAll('.businessCapsule--mainRow')
if (relatedElements) {
relatedElements.forEach(el => {
const businessName = el.querySelector('.businessCapsule--name')
const businessRatingAverage = el.querySelector('.starRating--average')
const businessRatingTotal = el.querySelector('.starRating--total span')
const businessContact = el.querySelector('.business--telephoneNumber')
leads.push({
businessName: businessName ? businessName.innerHTML : 'No business name',
businessRatingAverage: businessRatingAverage ? businessRatingAverage.innerHTML : 'No ratings',
businessRatingTotal: businessRatingTotal ? businessRatingTotal.innerHTML : 'No ratings',
businessContact: businessContact ? businessContact.innerHTML : 'No phone number'
})
})
}
}
const csvWriter = require('csv-writer').createObjectCsvWriter({
path: 'leads.csv',
header: [
{id: 'businessName', title: 'Business Name'},
{id: 'businessRatingAverage', title: 'Business Average Rating'},
{id: 'businessRatingTotal', title: 'Business No. of Ratings'},
{id: 'businessContact', title: 'Business Phone Number'},
]
})
csvWriter.writeRecords(leads).then(() => console.log('Success!!'))
})();