Zum Hauptinhalt springen

Methodenbeschreibung (v1)

Warnung

Diese JavaScript-API gilt als veraltet. Wir empfehlen die Verwendung der API-Version 2.

Beachten Sie, dass einige Methoden die Angabe des Schlüsselworts yield erfordern.

yield this.request()

yield this.request(method, url, queryParams, opts)

Abrufen einer HTTP-Antwort auf eine Anfrage. Als Argumente werden angegeben:

  • method - die Anfragemethode (GET, POST...)
  • url - der Link für die Anfrage
  • queryParams - ein Hash mit GET-Parametern oder ein Hash mit dem Body der POST-Anfrage
  • opts - ein Hash mit Anfrageoptionen

Wenn die POST-Methode verwendet wird, kann der Body der Anfrage auf zwei Arten übergeben werden:

  • durch einfaches Auflisten der Variablennamen und ihrer Werte in queryParams. Beispiel:
{
key: set.query,
id: 1234,
type: 'text'
}
  • über die Variable body in opts. Beispiel:
body: 'key=' + set.query + '&id=1234&type=text'

opts.check_content

check_content: [ Bedingung1, Bedingung2, ...] - ein Array von Bedingungen zur Überprüfung des empfangenen Inhalts. Wenn die Überprüfung fehlschlägt, wird die Anfrage mit einem anderen Proxy wiederholt.

Möglichkeiten:

  • Verwendung von Strings als Bedingungen (Suche nach Vorkommen des Strings)
  • Verwendung von regulären Ausdrücken als Bedingungen
  • Verwendung eigener Prüffunktionen, denen die Daten und Header der Antwort übergeben werden
  • Es können mehrere verschiedene Typen von Bedingungen gleichzeitig festgelegt werden
  • Für eine logische Negation platzieren Sie die Bedingung in ein Array, d.h. check_content: ['xxxx', [/yyyy/]] bedeutet, dass die Anfrage als erfolgreich gilt, wenn die Daten den Substring xxxx enthalten und gleichzeitig der reguläre Ausdruck /yyyy/ keine Übereinstimmungen auf der Seite findet

Für eine erfolgreiche Anfrage müssen alle im Array angegebenen Prüfungen bestanden werden.

Beispiel (in den Kommentaren ist angegeben, was für eine erfolgreiche Anfrage erforderlich ist):

let response = yield this.request('GET', set.query, {}, {
check_content: [
/<\/html>|<\/body>/, //auf der empfangenen Seite muss dieser reguläre Ausdruck zutreffen
['XXXX'], //auf der empfangenen Seite darf dieser Substring nicht vorhanden sein
'</html>', //auf der empfangenen Seite muss dieser Substring vorhanden sein
(data, hdr) => {
return hdr.Status == 200 && data.length > 100;
} //diese Funktion muss true zurückgeben
]
});

opts.decode

decode: 'auto-html' - automatische Erkennung der Kodierung und Konvertierung in utf8

Mögliche Werte:

  • auto-html - basierend auf Headern, Meta-Tags und dem Seiteninhalt (die empfohlene optimale Variante)
  • utf8 - gibt an, dass das Dokument in utf8 kodiert ist
  • <encoding> - jede andere Kodierung

opts.headers

headers: { ... } - Hash mit Headern, der Name des Headers wird in Kleinschreibung angegeben, es kann u.a. cookie angegeben werden Beispiel:

headers: {
accept: 'image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8',
'accept-encoding': 'gzip, deflate, br',
cookie: 'a=321; b=test',
'user-agent' 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36'
}

opts.headers_order

headers_order: ['cookie', 'user-agent', ...] - ermöglicht es, die Sortierreihenfolge der Header zu überschreiben

opts.recurse

recurse: N - maximale Anzahl von Weiterleitungen (Redirects), standardmäßig 7. Verwenden Sie 0, um Weiterleitungen zu deaktivieren.

opts.proxyretries

proxyretries: N - Anzahl der Versuche zur Ausführung der Anfrage, standardmäßig aus den Parser-Einstellungen übernommen.

opts.parsecodes

parsecodes: { ... } - Liste der HTTP-Antwortcodes, die der Parser als erfolgreich betrachtet, standardmäßig aus den Parser-Einstellungen übernommen. Wenn '*': 1 angegeben wird, gelten alle Antworten als erfolgreich. Beispiel:

parsecodes: {
200: 1,
403: 1,
500: 1
}

opts.timeout

timeout: N - Antwort-Timeout in Sekunden, standardmäßig aus den Parser-Einstellungen übernommen.

opts.do_gzip

do_gzip: 1 - bestimmt, ob Komprimierung (gzip/deflate/br) verwendet werden soll, standardmäßig aktiviert (1), zum Deaktivieren den Wert 0 setzen.

opts.max_size

max_size: N - maximale Größe der Antwort in Bytes, standardmäßig aus den Parser-Einstellungen übernommen.

opts.cookie_jar

cookie_jar: { ... } - Hash mit Cookies.

opts.attempt

attempt: N - gibt die Nummer des aktuellen Versuchs an. Bei Verwendung dieses Parameters wird der integrierte Versuchs-Handler für diese Anfrage ignoriert.

opts.browser

browser: 1 - automatische Emulation von Browser-Headern (1 - aktiviert, 0 - deaktiviert)

opts.use_proxy

use_proxy: 1 - überschreibt die Proxy-Verwendung für eine einzelne Anfrage innerhalb des JS-Parsers gegenüber dem globalen Parameter Use proxy (1 - aktiviert, 0 - deaktiviert)

opts.noextraquery

noextraquery: 0 - deaktiviert das Hinzufügen des Extra query string zur Anfrage-URL (1 - aktiviert, 0 - deaktiviert)

opts.save_to_file

save_to_file: file - ermöglicht das Herunterladen einer Datei direkt auf die Festplatte, ohne sie im Speicher abzulegen. Anstelle von file wird der Name und Pfad angegeben, unter dem die Datei gespeichert werden soll. Bei Verwendung dieser Option wird alles ignoriert, was mit data zusammenhängt (Inhaltsprüfung in check_content, response.data ist leer usw.).

opts.data_as_buffer

data_as_buffer: 0 - bestimmt, ob data als String (0) oder als Buffer-Objekt (1) zurückgegeben wird, standardmäßig wird ein String zurückgegeben.

opts.bypass_cloudflare

bypass_cloudflare: 0 - automatisches Umgehen des CloudFlare JavaScript-Schutzes unter Verwendung des Chrome-Browsers (1 - aktiviert, 0 - deaktiviert)

opts.follow_meta_refresh

follow_meta_refresh: 0 - ermöglicht das Verfolgen von Redirects, die über ein HTML-Meta-Tag deklariert wurden:

<meta http-equiv="refresh" content="time; url=..." />

opts.tlsOpts

tlsOpts: { ... } – ermöglicht die Übergabe von Einstellungen für HTTPS-Verbindungen. ​

yield this.parser.request()

yield this.parser.request(parser, preset, overrideParams, query)

Abrufen von Ergebnissen eines anderen Parsers (integriert oder ein anderer JS-Parser). Als Argumente werden angegeben:

  • parser - Name des Parsers (SE::Google, JS::Custom::Example)
  • preset - Einstellungs-Preset des aufgerufenen Parsers
  • overrideParams - Hash mit Überschreibungen der Einstellungen des aufgerufenen Parsers
  • query - Anfrage

In overrideParams können Parameter des aufgerufenen Parsers überschrieben werden, außerdem sind folgende Flags verfügbar:

overrideParams.resultArraysWithObjects

resultArraysWithObjects: 0 - bestimmt, in welcher Form die Ergebnis-Arrays des aufgerufenen Parsers zurückgegeben werden:

  • wenn aktiviert (1) - werden Arrays von Objekten zurückgegeben
    [{link: 'link1', anchor: 'anchor1'}, {link: 'link2', anchor: 'anchor2'}, ...]
  • wenn deaktiviert (0) - werden Standard-Arrays von Werten zurückgegeben
    ['link1', 'anchor1', 'link2', 'anchor2', ...]

overrideParams.needData

needData: 1 - bestimmt, ob data/pages[] in der Antwort übertragen werden soll (1) oder nicht (0), kann zur Optimierung verwendet werden.

tools.*

Globales Objekt tools, ermöglicht den Zugriff auf die integrierten Funktionen von A-Parser (analog zu den Template-Toolkit-Tools $tools.*).

Hinweis

tools.query ist nicht verfügbar, stattdessen muss this.query verwendet werden.

this.doLog()

Zeigt an, ob das Logging für die Aufgabe aktiviert ist. Kann als Flag zur Optimierung verwendet werden, falls kein Log geführt wird und als Argument für this.logger.put ein komplexer Ausdruck übergeben wird.

this.logger.*

.put()

this.logger.put(message) - fügt die Zeile message zum Aufgaben-Log hinzu.

.putHTML()

this.logger.putHTML(code) - Ausgabe von HTML-Code im Aufgaben-Log, der in einer Textarea angezeigt wird.

yield this.sleep()

yield this.sleep(sec)

Setzt eine Verzögerung im Thread für eine Anzahl von Sekunden sec (kann ein Dezimalwert sein).

yield this.mutex.*

Mutex zur Synchronisation zwischen Threads, ermöglicht das Sperren eines Codeabschnitts für einen Thread.

.lock()

Warten auf den Lock; die Ausführung wird durch den ersten Thread fortgesetzt, der den Lock erhält, andere Threads warten auf die Freigabe des Locks.

.unlock()

Freigabe des Locks; der nächste Thread setzt die Ausführung fort, falls er auf den Lock gewartet hat (.lock()).

this.cookies.*

Arbeit mit Cookies für die aktuelle Anfrage.

.getAll()

Abrufen eines Arrays von Cookies.

.setAll()

Setzen von Cookies; als Argument muss ein Array mit Cookies übergeben werden.

.set()

this.cookies.set(host, path, name, value) - Setzen eines einzelnen Cookies.

this.query.add()

this.query.add(query, maxLvl)

Hinzufügen einer neuen Anfrage (query) mit der optionalen Möglichkeit, die maximale Ebene (maxLvl) anzugeben, analog zu tools.query.add(). Als Anfrage (query) kann ein Hash mit Parametern übergeben werden, was analog zum Abfrage-Builder funktioniert.

Beispiel:

this.query.add({
query: "http://site.com",
param1: "..",
...
});

this.proxy.*

Arbeit mit Proxys.

.next()

Proxy auf den nächsten wechseln; der alte Proxy wird für die aktuelle Anfrage nicht mehr verwendet.

.ban()

Proxy wechseln und sperren (zu verwenden, wenn der Dienst den Zugriff über die IP blockiert); der Proxy wird für die in den Parser-Einstellungen angegebene Zeit gesperrt (proxybannedcleanup).

.get()

Aktuellen Proxy abrufen (der letzte Proxy, mit dem eine Anfrage gestellt wurde).

.set()

this.proxy.set('http://127.0.0.1:8080', noChange = false) - Proxy für die nächste Anfrage setzen. Der Parameter noChange ist optional; wenn true gesetzt wird, ändert sich der Proxy zwischen den Versuchen nicht.

yield this.captcha.*

Arbeit mit Captchas.

.recognize()

yield this.captcha.recognize(preset, image, type, overrides) - Hochladen eines Captchas zur Erkennung.

  • image - binäre Bilddaten zur Erkennung.
  • preset - gibt das Preset für Util::AntiGateUtil::AntiGate an
  • type - einer der folgenden Werte: 'jpeg', 'gif', 'png'.

Das Ergebnis ist ein Hash mit den Feldern:

  • answer - der Text aus dem Bild.
  • id - Captcha-ID, um später über reportBad einen Fehler melden zu können.
  • error - Textfehler, falls answer nicht gesetzt ist.

.recognizeFromUrl()

yield this.captcha.recognizeFromUrl(preset, url, overrides) - analog zur vorherigen Methode, aber das Laden des Captchas erfolgt automatisch über den Link (url), ohne Verwendung eines Proxys.

.reportBad()

yield this.captcha.reportBad(preset, id, overrides) - dem Dienst melden, dass das Captcha falsch gelöst wurde.

this.utils.*

.updateResultsData()

this.utils.updateResultsData(results, data) - Methode zum automatischen Befüllen von $pages.$i.data und $data; muss aufgerufen werden, um den Inhalt der Ergebnisseite hinzuzufügen.

.urlFromHTML()

this.utils.urlFromHTML(url, base) - verarbeitet einen aus HTML-Code erhaltenen Link - dekodiert Entities (&amp; usw.), optional kann base (Basis-URL, z.B. URL der Ausgangsseite) übergeben werden, um einen vollständigen Link zu erhalten.

.url.extractDomain()

this.utils.url.extractDomain(url, removeDefaultSubdomain) - die Methode nimmt als ersten Parameter einen Link und gibt die Domain aus diesem Link zurück. Der zweite optionale Parameter bestimmt, ob die Subdomain www von der Domain abgeschnitten werden soll. Standardmäßig 0 - also nicht abschneiden.

.url.extractTopDomain()

this.utils.url.extractTopDomain(url) - die Methode nimmt als ersten Parameter einen Link und gibt die Domain aus diesem Link ohne Subdomains zurück.

.url.extractTopDomainByZone()

this.utils.url.extractTopDomainByZone(url) - die Methode nimmt als ersten Parameter einen Link und gibt die Domain aus diesem Link zurück, ebenfalls ohne Subdomains. Funktioniert mit allen regionalen Zonen.

.url.extractMaxPath()

this.utils.url.extractMaxPath(url) - die Methode nimmt einen String und extrahiert daraus eine URL.

.url.extractWOParams()

this.utils.url.extractWOParams(url)- die Methode nimmt einen Link und gibt denselben Link gekürzt bis zum Parameter-String zurück. Das heißt, sie gibt die URL bis zum ? zurück.

.removeHtml()

this.utils.removeHtml(string) - die Methode nimmt einen String und gibt ihn bereinigt von HTML-Tags zurück. this.utils.removeNoDigit(string) - die Methode nimmt einen String, entfernt alles außer Ziffern und gibt das Ergebnis zurück.

.removeNoDigit()

this.utils.removeNoDigit(string) - die Methode nimmt einen String entgegen, entfernt alles außer Ziffern und gibt das Ergebnis zurück

.removeComma()

this.utils.removeComma(string) - die Methode nimmt einen String entgegen, entfernt Zeichen wie .,\r\n und gibt das Ergebnis zurück

this.sessionManager.*

Um Sessions in einem JS-Parser zu verwenden, muss zuerst der Session-Manager initialisiert werden. Dies geschieht mit der Funktion init()

init() {
this.sessionManager.init({
//hier können zusätzliche Parameter festgelegt werden
});
}

In this.sessionManager.init() können folgende Parameter verwendet werden:

  • name - optionaler Parameter, ermöglicht das Überschreiben des Namens des Parsers, dem die Sessions gehören; standardmäßig der Name des Parsers, in dem die Initialisierung erfolgt
  • canChangeProxy - optionaler Parameter, Möglichkeit zum Wechseln des Proxys, Standardwert ist 1
  • domain - optionaler Parameter, gibt an, ob Sessions unter allen für diesen Parser gespeicherten gesucht werden sollen (wenn kein Wert angegeben ist) oder nur für eine bestimmte Domain (die Domain muss mit einem führenden Punkt angegeben werden, z. B. .site.com)

Für die Arbeit mit Sessions gibt es mehrere Funktionen:

.get()

this.sessionManager.get() - ruft eine neue Session ab, muss vor dem Ausführen der Anfrage aufgerufen werden

.reset()

this.sessionManager.reset() - Löschen der Cookies und Abrufen einer neuen Session. Muss aufgerufen werden, wenn die Anfrage mit der aktuellen Session nicht erfolgreich war.

.save()

this.sessionManager.save() - Speichern einer erfolgreichen Session oder Speichern beliebiger Daten in der Session

results.<array>.addElement()

Die Methode results.<array>.addElement() ermöglicht ein bequemeres Befüllen von Arrays in results. Bei ihrer Verwendung muss man sich nicht an die Reihenfolge der Variablen im Array erinnern und diese manuell aufzählen.

results.serp.addElement({
link: 'https://google.com',
anchor: 'Google',
snippet: 'Loreps ipsum...',
});

Methoden init() und destroy()

Die Methode init() wird beim Start der Aufgabe aufgerufen, destroy() beim Beenden.

Beispiel für die Verwendung:

const puppeteer = require("puppeteer");
let globalBrowser;

class Parser {
constructor() {
...
}

async init() {
globalBrowser = await puppeteer.launch();
};

async destroy() {
if(globalBrowser)
await globalBrowser.close();
}
}