Beskrivning av metoder (v1)
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äranqueryParams- hash med get-parametrar eller hash med post-begärandekroppopts- 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 scrapernoverrideParams- hash med åsidosättningar av inställningar för den anropade scrapernquery- 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.*).
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änningpreset- anger förinställningen för
Util::AntiGatetypeanges som en av: 'jpeg', 'gif', 'png'
Resultatet blir en hash med fälten:
answer- text från bildenid- captcha-id, för att senare kunna rapportera fel viareportBaderror- 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 (& 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 skercanChangeProxy- valfri parameter, möjlighet att byta proxy, standardvärdet är 1domain- 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
🔗 Exempel på att spara en fil till disk
Exempel som visar hur man sparar filer direkt till disk
🔗 Exempel på arbete med sessioner
Användning av sessionsfunktionalitet i JavaScript-scrapers
🔗 Exempel på att spara data i en session
Demonstration av möjligheten att lagra godtyckliga data i en session
🔗 Användning av results.addElement()
Exempel på att fylla en datamatris med results.addElement() och demonstration av skillnaden från vanlig .push()