Hoppa till huvudinnehåll

Beskrivning av metoder (v1)

varning

Detta JavaScript API anses vara föråldrat, vi rekommenderar att du använder API version 2

Observera att vissa metoder kräver att nyckelordet yield anges

yield this.request()

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

Hämta HTTP-svar på begäran, som argument anges:

  • method - begärandemetod (GET, POST...)
  • url - länk för begäran
  • queryParams - hash med get-parametrar eller hash med post-begärandekropp
  • opts - hash med alternativ för begäran

Om POST-metoden används kan begärandekroppen skickas på två sätt:

  • genom att helt enkelt lista variabelnamn och deras värden i queryParams. Till exempel:
{
key: set.query,
id: 1234,
type: 'text'
}
  • via variabeln body i opts. Till exempel:
body: 'key=' + set.query + '&id=1234&type=text'

opts.check_content

check_content: [ villkor1, villkor2, ...] - en array med villkor för att kontrollera det mottagna innehållet, om kontrollen misslyckas kommer begäran att upprepas med en annan proxy.

Möjligheter:

  • användning av strängar som villkor (sökning efter strängförekomst)
  • användning av reguljära uttryck som villkor
  • användning av egna kontrollfunktioner som tar emot data och svarsheaders
  • flera olika typer av villkor kan anges samtidigt
  • för logisk negation, placera villkoret i en array, t.ex. check_content: ['xxxx', [/yyyy/]] betyder att begäran anses lyckad om den mottagna datan innehåller understrängen xxxx och samtidigt som det reguljära uttrycket /yyyy/ inte hittar några matchningar på sidan

För en lyckad begäran måste alla kontroller som anges i arrayen godkännas

Exempel (i kommentarerna anges vad som krävs för att begäran ska anses lyckad):

let response = yield this.request('GET', set.query, {}, {
check_content: [
/<\/html>|<\/body>/, //på den mottagna sidan måste detta reguljära uttryck matcha
['XXXX'], //på den mottagna sidan får denna understräng inte finnas
'</html>', //på den mottagna sidan måste denna understräng finnas
(data, hdr) => {
return hdr.Status == 200 && data.length > 100;
} //denna funktion måste returnera true
]
});

opts.decode

decode: 'auto-html' - automatisk identifiering av kodning och konvertering till utf8

Möjliga värden:

  • auto-html - baserat på headers, meta-taggar och sidans innehåll (rekommenderat optimalt alternativ)
  • utf8 - anger att dokumentet är i utf8-kodning
  • <encoding> - vilken annan kodning som helst

opts.headers

headers: { ... } - hash med headers, headernamn anges i gemener, kan även inkludera cookie Exempel:

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', ...] - gör det möjligt att åsidosätta sorteringsordningen för headers

opts.recurse

recurse: N - maximalt antal omdirigeringar, standard är 7, använd 0 för att inaktivera omdirigeringar

opts.proxyretries

proxyretries: N - antal försök att utföra begäran, som standard hämtas detta från scraperns inställningar

opts.parsecodes

parsecodes: { ... } - lista över HTTP-svarskoder som scrapern kommer att betrakta som lyckade, som standard hämtas detta från scraperns inställningar. Om '*': 1 anges kommer alla svar att betraktas som lyckade. Exempel:

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

opts.timeout

timeout: N - svarstidsgräns i sekunder, som standard hämtas detta från scraperns inställningar

opts.do_gzip

do_gzip: 1 - avgör om komprimering ska användas (gzip/deflate/br), som standard aktiverat (1), för att inaktivera ange värdet 0

opts.max_size

max_size: N - maximal svarsstorlek i byte, som standard hämtas detta från scraperns inställningar

opts.cookie_jar

cookie_jar: { ... } - hash med kakor.

opts.attempt

attempt: N - anger numret på det aktuella försöket, vid användning av denna parameter ignoreras den inbyggda försökshanteraren för denna begäran

opts.browser

browser: 1 - automatisk emulering av webbläsarheaders (1 - aktiverat, 0 - inaktiverat)

opts.use_proxy

use_proxy: 1 - åsidosätter användningen av proxy för en enskild begäran inuti JS-scrapern över den globala parametern Use proxy (1 - aktiverat, 0 - inaktiverat)

opts.noextraquery

noextraquery: 0 - inaktiverar tillägg av Extra query string till begärans URL (1 - aktiverat, 0 - inaktiverat)

opts.save_to_file

save_to_file: file - gör det möjligt att ladda ner en fil direkt till disken utan att skriva till minnet. Istället för file anges namn och sökväg för hur filen ska sparas. Vid användning av detta alternativ ignoreras allt relaterat till data (innehållskontroll i check_content, response.data kommer att vara tom, etc.).

opts.data_as_buffer

data_as_buffer: 0 - avgör om data ska returneras som en sträng String (0) eller som ett objekt Buffer (1), som standard returneras en sträng String

opts.bypass_cloudflare

bypass_cloudflare: 0 - automatisk kringgång av CloudFlares JavaScript-skydd med hjälp av webbläsaren Chrome (1 - aktiverat, 0 - inaktiverat)

opts.follow_meta_refresh

follow_meta_refresh: 0 - gör det möjligt att följa omdirigeringar som deklarerats via HTML meta-tagg:

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

opts.tlsOpts

tlsOpts: { ... } – gör det möjligt att skicka inställningar för https-anslutningar ​

yield this.parser.request()

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

Hämta resultat från en annan scraper (inbyggd eller en annan JS-scraper), som argument anges

  • parser - scraperns namn (SE::Google, JS::Custom::Example)
  • preset - inställningsförval för den anropade scrapern
  • overrideParams - hash med åsidosättningar av inställningar för den anropade scrapern
  • query - sökfråga

I overrideParams kan man åsidosätta parametrar för den anropade scrapern, även följande flaggor är tillgängliga:

overrideParams.resultArraysWithObjects

resultArraysWithObjects: 0 - avgör i vilket format resultatmatriser från den anropade scrapern ska returneras:

  • om aktiverat (1) - matriser med objekt returneras
    [{link: 'link1', anchor: 'anchor1'}, {link: 'link2', anchor: 'anchor2'}, ...]
  • om inaktiverat (0) - standardmatriser med värden returneras
    ['link1', 'anchor1', 'link2', 'anchor2', ...]

overrideParams.needData

needData: 1 - avgör om data/pages[] ska skickas (1) eller inte (0) i svaret, kan användas för optimering

tools.*

Globalt objekt tools, ger tillgång till inbyggda funktioner i A-Parser (motsvarar mallverktyg $tools.*).

anteckning

tools.query är inte tillgänglig, använd this.query

this.doLog()

Visar om loggning av uppgiften är aktiverad, kan användas som en flagga för optimering i fall där loggen inte förs och argumentet till this.logger.put är ett komplext uttryck

this.logger.*

.put()

this.logger.put(message) - lägger till raden message i uppgiftsloggen

.putHTML()

this.logger.putHTML(code) - skriver ut HTML-kod i uppgiftsloggen, som kommer att visas i en textarea

yield this.sleep()

yield this.sleep(sec)

Ställer in en fördröjning i tråden i sec sekunder, kan vara ett decimaltal.

yield this.mutex.*

Mutex för synkronisering mellan trådar, gör det möjligt att låsa en kodsektion för en tråd

.lock()

Väntar på lås, exekveringen fortsätter för den första tråden som tog låset, övriga trådar väntar på att låset ska frigöras

.unlock()

Frigör låset, nästa tråd fortsätter exekveringen om den väntade på låset (.lock())

this.cookies.*

Arbeta med cookies för den aktuella begäran

.getAll()

Hämta en array med cookies

.setAll()

Sätta cookies, en array med cookies måste skickas som argument

.set()

this.cookies.set(host, path, name, value) - sätta en enskild cookie

this.query.add()

this.query.add(query, maxLvl)

Lägga till en ny sökfråga (query) med möjlighet att valfritt ange maximal nivå (maxLvl), på samma sätt som tools.query.add() Man kan skicka en hash med parametrar som sökfråga (query), fungerar på samma sätt som Frågebyggaren

Exempel:

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

this.proxy.*

Arbeta med proxy

.next()

Byt proxy till nästa, den gamla proxyn kommer inte längre att användas för den aktuella begäran

.ban()

Byt och spärra proxy (bör användas när tjänsten blockerar åtkomst per IP), proxyn kommer att spärras under den tid som anges i scraperns inställningar (proxybannedcleanup)

.get()

Hämta aktuell proxy (den senaste proxyn som användes för en begäran)

.set()

this.proxy.set('http://127.0.0.1:8080', noChange = false) - ställ in proxy för nästa begäran, parametern noChange är valfri, om den är true kommer proxyn inte att ändras mellan försök

yield this.captcha.*

Arbeta med captcha

.recognize()

yield this.captcha.recognize(preset, image, type, overrides) - ladda upp captcha för igenkänning

  • image - binär bilddata för igenkänning
  • preset - anger förinställningen för Util::AntiGateUtil::AntiGate
  • type anges som en av: 'jpeg', 'gif', 'png'

Resultatet blir en hash med fälten:

  • answer - text från bilden
  • id - captcha-id, för att senare kunna rapportera fel via reportBad
  • error - textfel om answer inte är angivet

.recognizeFromUrl()

yield this.captcha.recognizeFromUrl(preset, url, overrides) - liknar föregående metod, men uppladdning av captcha sker automatiskt via länk (url), utan användning av proxy

.reportBad()

yield this.captcha.reportBad(preset, id, overrides) - rapportera till tjänsten att captchan löstes felaktigt

this.utils.*

.updateResultsData()

this.utils.updateResultsData(results, data) - metod för automatisk ifyllnad av $pages.$i.data och $data, måste anropas för att lägga till innehåll på resultatsidan

.urlFromHTML()

this.utils.urlFromHTML(url, base) - bearbetar en länk hämtad från HTML-kod - avkodar entiteter (&amp; etc.), valfritt kan base skickas - bas-URL (t.ex. ursprungssidans URL), på så sätt kan en fullständig länk erhållas

.url.extractDomain()

this.utils.url.extractDomain(url, removeDefaultSubdomain) - metoden tar en länk som första parameter och returnerar domänen från länken. Den andra valfria parametern avgör om subdomänen www ska tas bort från domänen. Standard är 0 - det vill säga ta inte bort.

.url.extractTopDomain()

this.utils.url.extractTopDomain(url) - metoden tar en länk som första parameter och returnerar domänen från länken, utan subdomäner.

.url.extractTopDomainByZone()

this.utils.url.extractTopDomainByZone(url) - metoden tar en länk som första parameter och returnerar domänen från länken, även utan subdomäner. Fungerar med alla regionala zoner

.url.extractMaxPath()

this.utils.url.extractMaxPath(url) - metoden tar en sträng och extraherar en URL från den

.url.extractWOParams()

this.utils.url.extractWOParams(url)- metoden tar en länk och returnerar samma länk beskuren fram till parametersträngen. Det vill säga returnerar URL:en fram till ?

.removeHtml()

this.utils.removeHtml(string) - metoden tar en sträng och returnerar den rensad från html-taggar this.utils.removeNoDigit(string) - metoden tar en sträng, tar bort allt utom siffror och returnerar resultatet

.removeNoDigit()

this.utils.removeNoDigit(string) - metoden tar emot en sträng, tar bort allt utom siffror och returnerar resultatet

.removeComma()

this.utils.removeComma(string) - metoden tar emot en sträng, tar bort tecken som .,\r\n och returnerar resultatet

this.sessionManager.*

För att använda sessioner i en JS-scraper måste du först initiera Sessionshanteraren. Detta görs med funktionen init()

init() {
this.sessionManager.init({
//här kan du ange ytterligare parametrar
});
}

I this.sessionManager.init() kan följande parametrar användas:

  • name - valfri parameter, gör det möjligt att åsidosätta namnet på den scraper som sessionerna tillhör, standardvärdet är namnet på den scraper där initieringen sker
  • canChangeProxy - valfri parameter, möjlighet att byta proxy, standardvärdet är 1
  • domain - valfri parameter, anger att sessioner ska sökas bland alla sparade för denna scraper (om inget värde anges), eller endast för en specifik domän (domänen måste anges med en punkt först, till exempel .site.com)

Det finns flera funktioner för att arbeta med sessioner:

.get()

this.sessionManager.get() - hämtar en ny session, måste anropas innan en begäran görs

.reset()

this.sessionManager.reset() - rensar cookies och hämtar en ny session. Måste anropas om begäran med den aktuella sessionen inte lyckades.

.save()

this.sessionManager.save() - sparar en lyckad session eller sparar godtyckliga data i sessionen

results.<array>.addElement()

Metoden results.<array>.addElement() gör det enklare att fylla i arrayer i results. När den används behöver du inte komma ihåg ordningen på variablerna i arrayen eller lista dem manuellt.

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

Metoderna init() och destroy()

Metoden init() anropas när uppgiften startar, destroy() - när den avslutas.

Exempel på användning:

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

class Parser {
constructor() {
...
}

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

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

Användbara länkar