Node Unblocker für Web Scraping
Suciu Dan am 16. Januar 2023

Wir alle hassen die Momente, in denen wir versuchen, auf eine Seite zuzugreifen und die Website unsere Anfrage ohne guten Grund blockiert. Geoblocking kann zum Beispiel nur durch die Verwendung eines Proxys umgangen werden.
Node-unblocker hilft uns, einen benutzerdefinierten Proxy zu erstellen und ihn in wenigen Minuten zum Laufen zu bringen.
Was ist Node-Unblocker?
Node unblocker ist eine universelle Bibliothek, um einen Web-Proxy zu erstellen, Anfragen und Antworten abzufangen und zu verändern.
Diese Bibliothek wird auch beim Web-Scraping verwendet, um von der Website implementierte Beschränkungen wie Geoblocking, Verbergen der IP-Adresse und Ratenbegrenzung zu umgehen oder um Authentifizierungstoken zu senden.
Um es kurz zu machen: Wenn Sie diese Bibliothek verwenden, können Sie sich von blockierten und zensierten Inhalten verabschieden.
In diesem Artikel erstellen wir eine Express-Anwendung mit einem benutzerdefinierten Proxy unter Verwendung von Node Unblocker, wir fügen eine Middleware hinzu, die den User-Agent für jede Anfrage ändert, diskutieren die Proxy-Einschränkungen, stellen sie auf Heroku bereit und vergleichen sie mit einem verwalteten Dienst wie WebScrapingAPI.
Voraussetzungen
Bevor wir beginnen, sollten Sie sicherstellen, dass Sie die neueste Version von Node.JS installiert haben. Die Installation von Node.JS für jede Plattform (Windows, Linux, Mac) wäre Thema eines eigenen Artikels. Anstatt ins Detail zu gehen, sollten Sie die offizielle Website besuchen und den Anweisungen folgen.
Vorbereitung der Dinge
Wir beginnen mit der Erstellung eines Verzeichnisses für unser Projekt namens unblocked und initialisieren darin ein Node.JS-Projekt:
mkdir unblocked
cd unblocked
npm init
Abhängigkeiten installieren
Für diese Anwendung installieren wir zwei Bibliotheken: Express, ein minimalistisches Framework für Node.JS, und Node Unblocker.
npm install express unblocker
Erstellen Sie die Basisanwendung
Erstellen der Express-Anwendung
Da node.unblocker innerhalb einer Express-Instanz läuft, müssen wir das Hello World-Beispiel in unserer Anwendung einrichten.
Erstellen Sie eine index.js-Datei und fügen Sie den folgenden Code ein:
const express = require('express') const app = express() const port = 8080 app.get('/', (req, res) => { res.send('Hello World!') }) app.listen(process.env.PORT || 8080, () => { console.log(`Beispiel-App hört auf Port ${port}`) })
Wir können die Anwendung mit diesem Befehl ausführen:
node index.js
Wenn wir auf http://localhost:8080 zugreifen, sehen wir eine Hello World-Meldung. Das bedeutet, dass unsere Anwendung läuft.
Hinzufügen von Node Unblocker zu Express
Es ist an der Zeit, die Node-Unblock-Bibliothek in unsere Anwendung zu importieren:
var Unblocker = require('unblocker')
Wir erstellen eine node unbloker-Instanz und übergeben den Proxy-Parameter. Die vollständige Liste der verfügbaren Parameter finden Sie hier.
var unblocker = new Unblocker({prefix: '/proxy/'})
Wir registrieren die Node-Unblocker-Bibliothek bei Express als Middleware, so dass die Anfragen abgefangen werden:
app.use(unblocker)
Wir aktualisieren den Express-App-Listener, um Unterstützung für Websockets hinzuzufügen:
app.listen(process.env.PORT || 8080, () => { console.log(`Beispiel-App hört auf Port ${port}`) }).on('upgrade', unblocker.onUpgrade)
Nach der Durchführung all dieser Schritte sollte unsere Anwendung wie folgt aussehen:
const express = require('express') const Unblocker = require('unblocker') const app = express() const port = 8080 const unblocker = new Unblocker({prefix: '/proxy/'}) app.use(unblocker) app.get('/', (req, res) => { res.send('Hello World!') }) app.listen(process.env.PORT || 8080, () => { console.log(`Example app listening on port ${port}`) }).on('upgrade', unblocker.onUpgrade)
Testen des Proxys
Starten Sie die Anwendung neu und rufen Sie die folgende URL in Ihrem Browser auf:
http://localhost:8080/proxy/https://webscrapingapi.com
Um sicherzustellen, dass der Proxy wie erwartet funktioniert, öffnen wir die Entwicklertools im Browser und prüfen die Registerkarte Netzwerk. Alle Anfragen sollten über den Proxy laufen.

Bei Problemen, die der Proxy auslösen könnte, empfiehlt es sich, den Debug-Modus zu aktivieren, indem Sie die Umgebungsvariable DEBUG setzen. Verwenden Sie diesen Befehl, um den Proxy im Debug-Modus zu starten:
DEBUG=unblocker:* node index.js
Es ist nie eine gute Idee, diese Funktion in der Produktion zu aktivieren, also sollten wir sie nur für die Entwicklungsumgebung verwenden.
Verwendung von Middlewares
Nodeunblocker ist nicht nur eine benutzerdefinierte Proxy-Lösung, sondern ermöglicht das Abfangen und Ändern von ausgehenden und eingehenden Anfragen durch Middleware.
Wir können diese Funktion nutzen, um das Laden bestimmter Ressourcen auf der Grundlage des Ressourcentyps oder der Domäne zu blockieren, den User Agent zu aktualisieren, zurückgegebene Inhalte zu ersetzen oder Authentifizierungstoken in die Header von Anfragen einzubauen.
Eine vollständige Liste von Beispielen finden Sie hier.
Beginnen wir mit der Erstellung einer Middleware für die Einstellung eines benutzerdefinierten Benutzeragenten. Erstellen Sie eine Datei namens user-agent.js und fügen Sie diesen Code hinzu:
module.exports = function(userAgent) {
function setUserAgent(data) {
data["headers"]["user-agent"] = userAgent
}
return setUserAgent
}
Diese Funktion nimmt den benutzerdefinierten Benutzeragenten mit dem Parameter userAgent entgegen und registriert ihn im Datenobjekt mit der Funktion setUserAgent. Node unblocked ruft die Funktion setUserAgent bei jeder Anfrage auf.
const userAgent = require('./user-agent')
Wir setzen die requestMiddleware Parameter im Unblocker-Konstruktor, und wir sollten startklar sein.
const unblocker = new Unblocker({
prefix: '/proxy/',
requestMiddleware: [userAgent("nodeunblocker/1.5")]
})
Unsere index.js-Datei sollte wie folgt aussehen:
const express = require('express')
const Unblocker = require('unblocker')
const userAgent = require('./user-agent')
const app = express()
const port = 8080
const unblocker = new Unblocker({
prefix: '/proxy/',
requestMiddleware: [userAgent("nodeunblocker/1.5")]
})
app.use(unblocker)
app.get('/', (req, res) => {
res.send('Hello World!')
})
app.listen(process.env.PORT || 8080, () => {
console.log(`Example app listening on port ${port}`)
}).on('upgrade', unblocker.onUpgrade)
Es ist an der Zeit zu überprüfen, ob unser Code funktioniert. Wir müssen die Node-Unblocker-URL ändern, um sicherzustellen, dass die Header richtig aktualisiert werden.
Starten Sie die Anwendung neu und öffnen Sie diese URL in Ihrem Browser:
http://localhost:8080/proxy/https://www.whatsmyua.info/
Wenn die Website nodeunblocker/1.5 anzeigt, funktioniert unsere Middleware.

Bereitstellung auf Heroku
Jetzt, wo unser Proxy läuft, ist es an der Zeit, ihn bei Heroku einzusetzen, einer Platform as a Service (PaaS), mit der wir Anwendungen vollständig in der Cloud erstellen, starten und verwalten können.
Beachten Sie, dass nicht alle Anbieter Proxys und Web-Scraping-Apps in ihrer Infrastruktur zulassen. Heroku akzeptiert diese Arten von Anwendungen, solange die Regeln von robots.txt nicht ignoriert werden.
Nachdem wir den rechtlichen Teil besprochen haben, wollen wir unser Projekt für die Bereitstellung vorbereiten.
Skript und Motor
Wir müssen das Startskript und die Motoren in der Datei package.json festlegen.
Die Eigenschaft "Engines" teilt Heroku mit, dass wir die neueste Version von Node.JS 16 in unserer Umgebung installiert haben müssen. Das Startskript wird ausgeführt, wenn die Umgebung festgelegt ist und unsere Anwendung bereit ist, ausgeführt zu werden.
Unsere package.json sollte wie folgt aussehen:
{
"name": "unblocked",
"version": "1.0.0",
"main": "index.js",
"engines": {
"node": "16.x"
},
"scripts": {
"start": "node index.js"
},
"dependencies": {
"express": "^4.18.1",
"unblocker": "^2.3.0"
}
}
Mit Heroku ist die Bereitstellung einer Node.JS-Anwendung ein Kinderspiel. Bevor Sie zum nächsten Abschnitt übergehen, stellen Sie sicher, dass Sie das Heroku CLI und die Git-Tools installiert haben.
Anmeldung und Einrichtung
Verwenden Sie diesen Befehl, um sich von Ihrem lokalen Terminal aus bei Heroku zu authentifizieren:
heroku-anmeldung
Erstellen Sie eine neue Heroku-Anwendung, indem Sie diesen Befehl ausführen:
heroku apps:create
Dieser Befehl gibt die ID der Anwendung und ein Git-Repository zurück. Verwenden wir die ID, um den entfernten Ursprung für unser Repository festzulegen:
git init
heroku git:remote -a [YOUR_APP_ID]
Da die Versionierung des Ordners node_modules nie eine gute Idee ist, erstellen wir eine .gitignore-Datei und fügen den Ordner hinzu.
Bereitstellung von
Der letzte Schritt, bevor unser Code in die Produktion geht, ist das Commit und die Bereitstellung. Wir fügen alle Dateien hinzu, erstellen einen Commit und führen den Master-Zweig mit dem Heroku-Zweig zusammen.
git add .
git commit -am "Erste Übergabe"
git push heroku master
Nach ein paar Sekunden wird die Anwendung auf Heroku bereitgestellt. Herzlichen Glückwunsch! Es ist an der Zeit, in unserem Browser darauf zuzugreifen und sicherzustellen, dass sie funktioniert.
Verwenden Sie die folgende URL-Struktur, um die Heroku-URL zu erstellen:
[HEROKU_DYNO_URL]/proxy/https://webscrapingapi.com
Wenn Sie die Dyno URL vergessen oder verloren haben, können Sie diesen Befehl verwenden, um die verfügbaren Informationen über die aktuelle App zu erhalten:
heroku-info
Beschränkungen
Die einfache Einrichtung dieses benutzerdefinierten Proxys hat einen Nachteil: Er funktioniert nur bei einfachen Websites gut und versagt bei fortgeschrittenen Aufgaben. Einige dieser Einschränkungen sind nicht zu überwinden und erfordern die Verwendung einer anderen Bibliothek oder von Diensten Dritter.
Ein verwalteter Dienst wie WebScrapingAPI behebt all diese Einschränkungen und fügt einige zusätzliche Funktionen hinzu, wie z. B. die automatische Captcha-Auflösung, Proxies für Privatanwender und fortgeschrittene Umgehungen, um zu verhindern, dass Dienste wie Akamai, Cloudflare und Datadome Ihre Anfrage erkennen.
Hier ist eine Liste von Einschränkungen, die Sie kennen sollten, bevor Sie über den Einsatz von Node Unblocker in Ihrem Produktionsprojekt nachdenken.
OAuth-Probleme
OAuth ist der Authentifizierungsstandard, der von modernen Websites wie Facebook, Google, Youtube, Instagram und Twitter bevorzugt wird. Jede Bibliothek, die postMessage verwendet, wird mit Node Unblocker nicht funktionieren und, vielleicht haben Sie es schon erraten, OAuth erfordert postMessage, um richtig zu funktionieren.
Wenn Sie auf 57 % des Internetverkehrs verzichten wollen, nur um diese Bibliothek zu verwenden, können Sie sie in Ihr Projekt aufnehmen.
Komplexe Standorte
Websites wie YouTube, HBO Max, Roblox, Discord und Instagram funktionieren nicht, und es gibt keinen Zeitplan für die Veröffentlichung einer Version, mit der diese Websites funktionieren werden.
Die Community ist eingeladen, mit Patches zur Behebung dieser Probleme beizutragen, aber bis jemand einen Pull-Request erstellt, werden Sie keine Daten von ihnen abrufen können.
Cloudflare
Cloudflare bietet einen kostenlosen Erkennungsdienst, der standardmäßig für alle Konten aktiviert ist. Unser benutzerdefinierter Proxy-Server wird innerhalb von Sekunden erkannt und eine Captcha-Abfrage wird auf dem Bildschirm angezeigt.
Etwa 80 % der Websites verwenden das Cloudflare CDN. Wenn Ihre Anfragen durch Captcha blockiert werden, kann das das Ende Ihres Scrapers bedeuten.
Wartung
Die Einrichtung eines benutzerdefinierten Proxys ist zwar einfach, aber die Wartungsarbeiten verursachen einen extrem hohen Aufwand und lenken Sie von Ihren Geschäftszielen ab.
Sie müssen sich mit dem Betrieb der Proxy-Instanzen, der Einrichtung einer automatisch skalierenden Infrastruktur, dem Umgang mit Gleichzeitigkeit und der Verwaltung der Cluster befassen. Die Liste ist endlos.
Schlussfolgerung
Sie haben jetzt einen Web-Proxy, der auf Heroku läuft, und wissen, wie man ihn einrichtet, wie man ihn einsetzt und wo seine Grenzen liegen. Wenn Sie planen, ihn für ein Hobbyprojekt zu verwenden, ist Node Unblocker eine gute Wahl.
Aber diese Nachteile und die schlechte Unterstützung durch die Community hindern Sie daran, es in einer produktionsreifen Anwendung einzusetzen.
Ein verwalteter Dienst wie WebScrapingAPI, der Zugang zu einem großen Pool von Proxys für Rechenzentren, Mobilgeräte und Privatanwender sowie die Möglichkeit bietet, mit Geolokalisierung zu spielen, Kopfzeilen zu ändern und Cookies mit einem einzigen Parameter zu erstellen, hat keine dieser Einschränkungen.
Nachrichten und Aktualisierungen
Bleiben Sie auf dem Laufenden mit den neuesten Web Scraping-Anleitungen und Nachrichten, indem Sie unseren Newsletter abonnieren.
We care about the protection of your data. Read our <l>Privacy Policy</l>.Privacy Policy.

Ähnliche Artikel

Lernen Sie, wie Sie mit Scrapy und Splash dynamische JavaScript-gerenderte Websites scrapen können. Von der Installation über das Schreiben eines Spiders bis hin zum Umgang mit Seitenumbrüchen und der Verwaltung von Splash-Antworten bietet dieser umfassende Leitfaden Schritt-für-Schritt-Anleitungen für Anfänger und Experten gleichermaßen.


Erfahren Sie, welcher Browser am besten geeignet ist, um Cloudflare-Erkennungssysteme beim Web-Scraping mit Selenium zu umgehen.


Erfahren Sie, wie Sie Proxies mit Axios & Node.js für effizientes Web Scraping nutzen können. Tipps, Code-Beispiele und die Vorteile der Verwendung von WebScrapingAPI inklusive.
