Wenn Sie sich für Web-Scraping interessieren, kann Crawlee dabei helfen. Es ist eine schnelle, interaktive Scraping-Engine, die von Datenwissenschaftlern, Entwicklern und Forschern zum Sammeln von Webdaten verwendet wird. Crawlee ist einfach einzurichten und bietet Funktionen wie Proxy-Rotation und Sitzungsverwaltung. Diese Funktionen sind entscheidend für das Scraping großer oder dynamischer Websites, ohne dass Ihre IP-Adresse gesperrt wird, und gewährleisten eine reibungslose und unterbrechungsfreie Datenerfassung.
In diesem Tutorial lernen Sie, wie Sie Crawlee für Web-Scraping verwenden. Sie beginnen mit einem einfachen Web-Scraping-Beispiel und schreiten zu fortgeschritteneren Konzepten fort, wie Sitzungsverwaltung und Scraping dynamischer Seiten.
Web-Scraping mit Crawlee
Stellen Sie vor Beginn dieses Tutorials sicher, dass die folgenden Voraussetzungen auf Ihrem Rechner installiert sind:
- Node.js
- npm
- Visual Studio Code
Einfaches Web-Scraping mit Crawlee
Sobald alle Voraussetzungen erfüllt sind, beginnen wir mit dem Scraping der Books to Scrape-Website, die sich aufgrund ihrer einfachen HTML-Struktur ideal zum Lernen eignet.
Öffnen Sie Ihr Terminal oder Ihre Shell und initialisieren Sie zunächst ein Node.js-Projekt mit den folgenden Befehlen:
mkdir crawlee-tutorial
cd crawlee-tutorial
npm init -y
Installieren Sie dann die Crawlee-Bibliothek mit dem folgenden Befehl:
npm install crawlee
Um Daten von einer Website effektiv zu scrapen, müssen Sie die Webseite, die Sie scrapen möchten, untersuchen, um die Details der HTML-Tags der Website zu ermitteln. Öffnen Sie dazu die Website in Ihrem Browser und navigieren Sie zu den Entwicklertools, indem Sie mit der rechten Maustaste auf die Webseite klicken. Klicken Sie dann auf Untersuchen oder Element untersuchen:

Der Tab Elemente sollte standardmäßig aktiv sein und stellt das HTML-Layout der Webseite dar. In diesem Beispiel wird jedes einzelne angezeigte Buch in einem article-HTML-Tag mit der Klasse product_pod platziert. Innerhalb jedes Artikels ist der Buchtitel in einem h3-Tag enthalten. Der eigentliche Titel des Buches ist im title-Attribut des a-Tags innerhalb des h3-Elements enthalten. Der Buchpreis befindet sich im Tag p mit der Klasse price_color:

Erstellen Sie im Stammverzeichnis Ihres Projekts eine Datei namens scrape.js und fügen Sie den folgenden Code hinzu:
const { CheerioCrawler } = require('crawlee');
const crawler = new CheerioCrawler({
async requestHandler({ request, $ }) {
const books = [];
$('article.product_pod').each((index, element) => {
const title = $(element).find('h3 a').attr('title');
const price = $(element).find('.price_color').text();
books.push({ title, price });
});
console.log(books);
},
});
crawler.run(['https://books.toscrape.com/']);
In diesem Code verwenden Sie CheerioCrawler aus crawlee, um Buchtitel und Preise von https://books.toscrape.com/ zu scrapen. Der Crawler ruft HTML-Inhalte ab, extrahiert Daten aus <article class="product_pod">-Elementen mithilfe einer jQuery-ähnlichen Syntax und gibt die Ergebnisse in der Konsole aus.
Nachdem Sie den vorherigen Code zu Ihrer scrape.js-Datei hinzugefügt haben, können Sie den Code mit dem folgenden Befehl ausführen:
node scrape.js
Ein Array mit Buchtiteln und Preisen sollte in Ihrem Terminal ausgegeben werden:
…output omitted…
{
title: 'The Boys in the Boat: Nine Americans and Their Epic Quest for Gold at the 1936 Berlin Olympics',
price: '£22.60'
},
{ title: 'The Black Maria', price: '£52.15' },
{
title: 'Starving Hearts (Triangular Trade Trilogy, #1)',
price: '£13.99'
},
{ title: "Shakespeare's Sonnets", price: '£20.66' },
{ title: 'Set Me Free', price: '£17.46' },
{
title: "Scott Pilgrim's Precious Little Life (Scott Pilgrim #1)",
price: '£52.29'
},
…output omitted…
Proxy-Rotation mit Crawlee
Ein Proxy ist der Vermittler zwischen Ihrem Computer und dem Internet. Wenn Sie einen Proxy verwenden, sendet er Ihre Webanfragen an den Proxy-Server, der sie an die Zielwebsite weiterleitet. Der Proxy-Server sendet die Antwort der Website zurück, wobei der Proxy Ihre IP-Adresse verbirgt und verhindert, dass Sie durch Rate-Limiting oder IP-Sperren blockiert werden.
Crawlee vereinfacht die Proxy-Implementierung, da es über eine integrierte Proxy-Verwaltung verfügt, die Wiederholungsversuche und Fehler effizient behandelt. Crawlee unterstützt auch eine Reihe von Proxy-Konfigurationen zur Implementierung rotierender Proxys.
Im folgenden Abschnitt richten Sie einen Proxy ein, indem Sie zunächst einen gültigen Proxy besorgen. Anschließend überprüfen Sie, ob Ihre Anfragen über die Proxys geleitet werden.
Einen Proxy einrichten
Kostenlose Proxys werden generell nicht empfohlen, da sie langsam und unsicher sein können und möglicherweise nicht die notwendige Unterstützung für sensible Webaufgaben bieten. Erwägen Sie stattdessen die Verwendung von Bright Data, einem Proxy-Dienst, der sicher, stabil und zuverlässig ist. Es werden auch kostenlose Tests angeboten, sodass Sie ihn vor der Verpflichtung ausprobieren können.
Um Bright Data zu verwenden, klicken Sie auf der Startseite auf die Schaltfläche Gratis testen und füllen Sie die erforderlichen Informationen aus, um ein Konto zu erstellen.
Sobald Ihr Konto erstellt ist, melden Sie sich beim Bright Data-Dashboard an, navigieren Sie zu Proxys & Scraping-Infrastruktur und fügen Sie einen neuen Proxy hinzu, indem Sie Residential-Proxys auswählen:

Behalten Sie die Standardeinstellungen bei und schließen Sie die Erstellung Ihres Residential-Proxys ab, indem Sie auf Hinzufügen klicken.
Wenn Sie aufgefordert werden, ein Zertifikat zu installieren, können Sie Ohne Zertifikat fortfahren auswählen. Für den Produktionseinsatz und reale Anwendungsfälle sollten Sie jedoch das Zertifikat einrichten, um Missbrauch zu verhindern, falls Ihre Proxy-Informationen jemals offengelegt werden.
Notieren Sie sich nach der Erstellung die Proxy-Anmeldedaten, einschließlich Host, Port, Benutzername und Passwort. Diese benötigen Sie im nächsten Schritt:

Führen Sie im Stammverzeichnis Ihres Projekts den folgenden Befehl aus, um die axios-Bibliothek zu installieren:
npm install axios
Sie verwenden die axios-Bibliothek, um eine GET-Anfrage an http://lumtest.com/myip.json zu stellen, die bei jeder Ausführung des Skripts die Details des verwendeten Proxys zurückgibt.
Erstellen Sie anschließend im Stammverzeichnis Ihres Projekts eine Datei namens scrapeWithProxy.js und fügen Sie den folgenden Code hinzu:
const { CheerioCrawler } = require("crawlee");
const { ProxyConfiguration } = require("crawlee");
const axios = require("axios");
const proxyConfiguration = new ProxyConfiguration({
proxyUrls: ["http://USERNAME:PASSWORD@HOST:PORT"],
});
const crawler = new CheerioCrawler({
proxyConfiguration,
async requestHandler({ request, $, response, proxies }) {
// Make a GET request to the proxy information URL
try {
const proxyInfo = await axios.get("http://lumtest.com/myip.json", {
proxy: {
host: "HOST",
port: PORT,
auth: {
username: "USERNAME",
password: "PASSWORD",
},
},
});
console.log("Proxy Information:", proxyInfo.data);
} catch (error) {
console.error("Error fetching proxy information:", error.message);
}
const books = [];
$("article.product_pod").each((index, element) => {
const title = $(element).find("h3 a").attr("title");
const price = $(element).find(".price_color").text();
books.push({ title, price });
});
console.log(books);
},
});
crawler.run(["https://books.toscrape.com/"]);
Hinweis: Ersetzen Sie
HOST,PORT,USERNAMEundPASSWORDdurch Ihre Anmeldedaten.
In diesem Code verwenden Sie CheerioCrawler aus crawlee, um Informationen von https://books.toscrape.com/ über einen angegebenen Proxy zu scrapen. Sie konfigurieren den Proxy mit ProxyConfiguration; dann rufen Sie Proxy-Details über eine GET-Anfrage an http://lumtest.com/myip.json ab und protokollieren diese. Schließlich extrahieren Sie die Buchtitel und Preise mithilfe der jQuery-ähnlichen Syntax von Cheerio und protokollieren die gescrapten Daten in der Konsole.
Jetzt können Sie den Code ausführen und testen, um sicherzustellen, dass die Proxys funktionieren:
node scrapeWithProxy.js
Sie erhalten ähnliche Ergebnisse wie zuvor, aber diesmal werden Ihre Anfragen über Bright Data-Proxys geleitet. Sie sollten auch die Details des Proxys in der Konsole protokolliert sehen:
Proxy Information: {
country: 'US',
asn: { asnum: 21928, org_name: 'T-MOBILE-AS21928' },
geo: {
city: 'El Paso',
region: 'TX',
region_name: 'Texas',
postal_code: '79925',
latitude: 31.7899,
longitude: -106.3658,
tz: 'America/Denver',
lum_city: 'elpaso',
lum_region: 'tx'
}
}
[
{ title: 'A Light in the Attic', price: '£51.77' },
{ title: 'Tipping the Velvet', price: '£53.74' },
{ title: 'Soumission', price: '£50.10' },
{ title: 'Sharp Objects', price: '£47.82' },
{ title: 'Sapiens: A Brief History of Humankind', price: '£54.23' },
{ title: 'The Requiem Red', price: '£22.65' },
…output omitted..
Wenn Sie das Skript erneut mit node scrapingWithBrightData.js ausführen, sollten Sie einen anderen IP-Adressenstandort sehen, der vom Bright Data-Proxy-Server verwendet wird. Dies bestätigt, dass Bright Data bei jeder Ausführung Ihres Scraping-Skripts Standorte und IPs rotiert. Diese Rotation ist wichtig, um Blockierungen oder IP-Sperren von den Zielwebsites zu umgehen.
Hinweis: In der
proxyConfigurationhätten Sie verschiedene Proxy-IPs übergeben können, aber da Bright Data das für Sie übernimmt, müssen Sie die IPs nicht angeben.
Sitzungsverwaltung mit Crawlee
Sitzungen helfen dabei, den Zustand über mehrere Anfragen hinweg aufrechtzuerhalten, was für Websites nützlich ist, die Cookies oder Anmeldesitzungen verwenden.
Um eine Sitzung zu verwalten, erstellen Sie eine Datei namens scrapeWithSessions.js im Stammverzeichnis Ihres Projekts und fügen Sie den folgenden Code hinzu:
const { CheerioCrawler, SessionPool } = require("crawlee");
(async () => {
// Open a session pool
const sessionPool = await SessionPool.open();
// Ensure there is a session in the pool
let session = await sessionPool.getSession();
if (!session) {
session = await sessionPool.createSession();
}
const crawler = new CheerioCrawler({
useSessionPool: true, // Enable session pool
async requestHandler({ request, $, response, session }) {
// Log the session information
console.log(`Using session: ${session.id}`);
// Extract book data and log it (for demonstration)
const books = [];
$("article.product_pod").each((index, element) => {
const title = $(element).find("h3 a").attr("title");
const price = $(element).find(".price_color").text();
books.push({ title, price });
});
console.log(books);
},
});
// First run
await crawler.run(["https://books.toscrape.com/"]);
console.log("First run completed.");
// Second run
await crawler.run(["https://books.toscrape.com/"]);
console.log("Second run completed.");
})();
Hier verwenden Sie CheerioCrawler und SessionPool aus crawlee, um Daten von https://books.toscrape.com/ zu scrapen. Sie initialisieren einen Sitzungs-Pool und konfigurieren dann den Crawler zur Nutzung dieser Sitzung. Die requestHandler-Funktion protokolliert die Sitzungsinformationen und extrahiert Buchtitel und Preise mithilfe der jQuery-ähnlichen Selektoren von Cheerio. Der Code führt zwei aufeinanderfolgende Scraping-Durchläufe durch und protokolliert bei jedem Durchlauf die Sitzungs-ID.
Führen Sie den Code aus und testen Sie ihn, um zu überprüfen, ob verschiedene Sitzungen verwendet werden:
node scrapeWithSessions.js
Sie sollten ähnliche Ergebnisse wie zuvor sehen, aber diesmal sollten Sie auch die Sitzungs-ID für jeden Durchlauf sehen:
Using session: session_GmKuZ2TnVX
[
{ title: 'A Light in the Attic', price: '£51.77' },
{ title: 'Tipping the Velvet', price: '£53.74' },
…output omitted…
Using session: session_lNRxE89hXu
[
{ title: 'A Light in the Attic', price: '£51.77' },
{ title: 'Tipping the Velvet', price: '£53.74' },
…output omitted…
Wenn Sie den Code erneut ausführen, sollten Sie sehen, dass eine andere Sitzungs-ID verwendet wird.
Verarbeitung dynamischer Inhalte mit Crawlee
Wenn Sie mit dynamischen Websites arbeiten (d.h. Websites, deren Inhalte durch JavaScript befüllt werden), kann Web-Scraping äußerst schwierig sein, da Sie JavaScript rendern müssen, um auf die Daten zuzugreifen. Um mit diesen Situationen umzugehen, integriert Crawlee Puppeteer, einen Headless-Browser, der JavaScript rendern und mit der Zielwebsite interagieren kann, genau wie ein Mensch es tun würde.
Um diese Funktionalität zu demonstrieren, scrapen wir Inhalte von dieser YouTube-Seite. Stellen Sie wie immer vor dem Scraping sicher, dass Sie die Regeln und Nutzungsbedingungen dieser Seite überprüfen.
Nachdem Sie die Nutzungsbedingungen überprüft haben, erstellen Sie eine Datei namens scrapeDynamicContent.js im Stammverzeichnis Ihres Projekts und fügen Sie den folgenden Code hinzu:
const { PuppeteerCrawler } = require("crawlee");
async function scrapeYouTube() {
const crawler = new PuppeteerCrawler({
async requestHandler({ page, request, enqueueLinks, log }) {
const { url } = request;
await page.goto(url, { waitUntil: "networkidle2" });
// Scraping first 10 comments
const comments = await page.evaluate(() => {
return Array.from(document.querySelectorAll("#comments #content-text"))
.slice(0, 10)
.map((el) => el.innerText);
});
log.info(`Comments: ${comments.join("n")}`);
},
launchContext: {
launchOptions: {
headless: true,
},
},
});
// Add the URL of the YouTube video you want to scrape
await crawler.run(["https://www.youtube.com/watch?v=wZ6cST5pexo"]);
}
scrapeYouTube();
Führen Sie dann den Code mit dem folgenden Befehl aus:
node scrapeDynamicContent.js
In diesem Code verwenden Sie den PuppeteerCrawler aus der Crawlee-Bibliothek, um YouTube-Videokommentare zu scrapen. Sie beginnen mit der Initialisierung eines Crawlers, der zu einer bestimmten YouTube-Video-URL navigiert und wartet, bis die Seite vollständig geladen ist. Sobald die Seite geladen ist, wertet der Code den Seiteninhalt aus, um die ersten zehn Kommentare durch Auswahl von Elementen mit dem angegebenen CSS-Selektor #comments #content-text zu extrahieren. Die Kommentare werden dann in der Konsole protokolliert.
Ihre Ausgabe sollte die ersten zehn Kommentare zum ausgewählten Video enthalten:
INFO PuppeteerCrawler: Starting the crawler.
INFO PuppeteerCrawler: Comments: Who are you rooting for?? US Marines or Ex Cons
Bro Mateo is a beast, no lifting straps, close stance.
ex convict doing the pushups is a monster.
I love how quick this video was, without nonsense talk and long intros or outros
"They Both have combat experience" is wicked
That military guy doing that deadlift is really no joke.. ...
One lives to fight and the other fights to live.
Finally something that would test the real outcome on which narrative is true on movies
I like the comradery between all of them. Especially on the Bench Press ... Both team members quickly helped out on the spotting to protect from injury. Well done.
I like this style, no youtube funny business. Just straight to the lifts
…output omitted…
Den gesamten in diesem Tutorial verwendeten Code finden Sie auf GitHub.
Fazit
In diesem Artikel haben Sie gelernt, wie Sie Crawlee für Web-Scraping verwenden, und gesehen, wie es die Effizienz und Zuverlässigkeit Ihrer Web-Scraping-Projekte verbessern kann.
Denken Sie daran, beim Scraping von Daten stets die robots.txt-Datei und die Nutzungsbedingungen der Zielwebsite zu respektieren.
Sind Sie bereit, Ihre Web-Scraping-Projekte mit professionellen Daten, Tools und Proxys auf ein neues Level zu heben? Entdecken Sie die umfassende Web-Scraping-Infrastruktur von Bright Data, die sofort einsatzbereite Datensätze und erweiterte Proxy-Dienste bietet, um Ihre Datenerfassung zu optimieren.
Registrieren Sie sich jetzt und starten Sie Ihren kostenlosen Test!