Ga naar de hoofdinhoud

Beschrijving van methoden (v1)

waarschuwing

Deze JavaScript API wordt als verouderd beschouwd, we raden aan om API versie 2 te gebruiken

Houd er rekening mee dat sommige methoden het gebruik van het trefwoord yield vereisen

yield this.request()

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

Een HTTP-antwoord ophalen op basis van een verzoek, waarbij de volgende argumenten worden opgegeven:

  • method - de verzoekmethode (GET, POST...)
  • url - de link voor het verzoek
  • queryParams - een hash met get-parameters of een hash met de body van het post-verzoek
  • opts - een hash met verzoekopties

Als de POST-methode wordt gebruikt, kan de body van het verzoek op twee manieren worden doorgegeven:

  • door simpelweg de namen van de variabelen en hun waarden op te sommen in queryParams. Bijvoorbeeld:
{
key: set.query,
id: 1234,
type: 'text'
}
  • via de variabele body in opts. Bijvoorbeeld:
body: 'key=' + set.query + '&id=1234&type=text'

opts.check_content

check_content: [ voorwaarde1, voorwaarde2, ...] - een array van voorwaarden om de ontvangen inhoud te controleren; als de controle faalt, wordt het verzoek herhaald met een andere proxy.

Mogelijkheden:

  • gebruik van strings als voorwaarden (zoeken op voorkomen van de string)
  • gebruik van reguliere expressies als voorwaarden
  • gebruik van eigen controlefuncties, waaraan de data en de headers van het antwoord worden doorgegeven
  • er kunnen meerdere verschillende soorten voorwaarden tegelijk worden opgegeven
  • voor logische ontkenning plaatst u de voorwaarde in een array, d.w.z. check_content: ['xxxx', [/yyyy/]] betekent dat het verzoek als succesvol wordt beschouwd als de ontvangen data de substring xxxx bevat en de reguliere expressie /yyyy/ tegelijkertijd geen overeenkomsten vindt op de pagina

Voor een succesvol verzoek moeten alle in de array opgegeven controles slagen

Voorbeeld (in de commentaren staat wat nodig is om het verzoek als succesvol te beschouwen):

let response = yield this.request('GET', set.query, {}, {
check_content: [
/<\/html>|<\/body>/, //deze reguliere expressie moet werken op de ontvangen pagina
['XXXX'], //deze substring mag niet voorkomen op de ontvangen pagina
'</html>', //deze substring moet voorkomen op de ontvangen pagina
(data, hdr) => {
return hdr.Status == 200 && data.length > 100;
} //deze functie moet true retourneren
]
});

opts.decode

decode: 'auto-html' - automatische detectie van de codering en conversie naar utf8

Mogelijke waarden:

  • auto-html - op basis van headers, meta-tags en de inhoud van de pagina (optimaal aanbevolen optie)
  • utf8 - geeft aan dat het document in utf8-codering is
  • <encoding> - elke andere codering

opts.headers

headers: { ... } - hash met headers, de naam van de header wordt in kleine letters opgegeven, inclusief cookie Voorbeeld:

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', ...] - maakt het mogelijk om de sorteervolgorde van headers te overschrijven

opts.recurse

recurse: N - maximaal aantal redirects dat gevolgd wordt, standaard 7, gebruik 0 om redirects uit te schakelen

opts.proxyretries

proxyretries: N - aantal pogingen om het verzoek uit te voeren, standaard overgenomen uit de scraper-instellingen

opts.parsecodes

parsecodes: { ... } - lijst met HTTP-antwoordcodes die de scraper als succesvol zal beschouwen, standaard overgenomen uit de scraper-instellingen. Als u '*': 1 opgeeft, worden alle antwoorden als succesvol beschouwd. Voorbeeld:

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

opts.timeout

timeout: N - time-out voor het antwoord in seconden, standaard overgenomen uit de scraper-instellingen

opts.do_gzip

do_gzip: 1 - bepaalt of compressie (gzip/deflate/br) moet worden gebruikt, standaard ingeschakeld (1), om uit te schakelen stel de waarde in op 0

opts.max_size

max_size: N - maximale grootte van het antwoord in bytes, standaard overgenomen uit de scraper-instellingen

opts.cookie_jar

cookie_jar: { ... } - hash met cookies.

opts.attempt

attempt: N - geeft het nummer van de huidige poging aan; bij gebruik van deze parameter wordt de ingebouwde poging-handler voor dit verzoek genegeerd

opts.browser

browser: 1 - automatische emulatie van browser-headers (1 - ingeschakeld, 0 - uitgeschakeld)

opts.use_proxy

use_proxy: 1 - overschrijft het gebruik van proxy's voor een individueel verzoek binnen de JS-scraper bovenop de globale parameter Use proxy (1 - ingeschakeld, 0 - uitgeschakeld)

opts.noextraquery

noextraquery: 0 - schakelt het toevoegen van Extra query string aan de verzoek-URL uit (1 - ingeschakeld, 0 - uitgeschakeld)

opts.save_to_file

save_to_file: file - maakt het mogelijk om een bestand direct naar de schijf te downloaden, zonder in het geheugen te schrijven. In plaats van file wordt de naam en het pad opgegeven waaronder het bestand moet worden opgeslagen. Bij gebruik van deze optie wordt alles wat met data te maken heeft genegeerd (inhoudscontrole in check_content, response.data zal leeg zijn, enz.).

opts.data_as_buffer

data_as_buffer: 0 - bepaalt of data als een String (0) of als een Buffer-object (1) moet worden geretourneerd, standaard wordt een String geretourneerd

opts.bypass_cloudflare

bypass_cloudflare: 0 - automatische omzeiling van CloudFlare JavaScript-beveiliging met behulp van de Chrome-browser (1 - ingeschakeld, 0 - uitgeschakeld)

opts.follow_meta_refresh

follow_meta_refresh: 0 - maakt het mogelijk om redirects te volgen die zijn gedeclareerd via de HTML meta-tag:

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

opts.tlsOpts

tlsOpts: { ... } – maakt het mogelijk om instellingen voor https-verbindingen door te geven ​

yield this.parser.request()

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

Resultaten ophalen van een andere scraper (ingebouwd of een andere JS-scraper), waarbij de volgende argumenten worden opgegeven

  • parser - naam van de scraper (SE::Google, JS::Custom::Example)
  • preset - instellingen-preset van de aangeroepen scraper
  • overrideParams - hash met overschrijvingen van de instellingen van de aangeroepen scraper
  • query - verzoek

In overrideParams kunnen parameters van de aangeroepen scraper worden overschreven, ook zijn de volgende vlaggen beschikbaar:

overrideParams.resultArraysWithObjects

resultArraysWithObjects: 0 - bepaalt in welke vorm de resultaat-arrays van de aangeroepen scraper worden geretourneerd:

  • indien ingeschakeld (1) - worden arrays van objecten geretourneerd
    [{link: 'link1', anchor: 'anchor1'}, {link: 'link2', anchor: 'anchor2'}, ...]
  • indien uitgeschakeld (0) - worden standaard arrays van waarden geretourneerd
    ['link1', 'anchor1', 'link2', 'anchor2', ...]

overrideParams.needData

needData: 1 - bepaalt of data/pages[] wel (1) of niet (0) in het antwoord moet worden doorgegeven, kan worden gebruikt voor optimalisatie

tools.*

Globaal object tools, geeft toegang tot de ingebouwde functies van A-Parser (analoog aan de template toolkit tools $tools.*).

opmerking

tools.query is niet beschikbaar, gebruik this.query

this.doLog()

Geeft aan of het bijhouden van het taaklogboek is ingeschakeld, kan worden gebruikt als vlag voor optimalisatie in gevallen waarin geen logboek wordt bijgehouden en het argument voor this.logger.put een complexe expressie is

this.logger.*

.put()

this.logger.put(message) - voegt de regel message toe aan het taaklogboek

.putHTML()

this.logger.putHTML(code) - uitvoer van HTML-code naar het taaklogboek, die in de textarea zal worden weergegeven

yield this.sleep()

yield this.sleep(sec)

Stelt een vertraging in de thread in voor het aantal seconden sec, kan een decimaal getal zijn.

yield this.mutex.*

Mutex voor synchronisatie tussen threads, maakt het mogelijk om een sectie code te blokkeren voor één thread

.lock()

Wachten op een lock, de uitvoering wordt voortgezet door de eerste thread die de lock heeft verkregen, andere threads zullen wachten op het vrijgeven van de lock

.unlock()

Vrijgeven van de lock, de volgende thread zal de uitvoering voortzetten als deze op een lock wachtte (.lock())

this.cookies.*

Werken met cookies voor het huidige verzoek

.getAll()

Ophalen van een array met cookies

.setAll()

Instellen van cookies, als argument moet een array met cookies worden doorgegeven

.set()

this.cookies.set(host, path, name, value) - instellen van een enkele cookie

this.query.add()

this.query.add(query, maxLvl)

Toevoegen van een nieuw verzoek (query) met de mogelijkheid om optioneel een maximaal niveau (maxLvl) op te geven, analoog aan tools.query.add() U kunt als verzoek (query) een hash met parameters doorgeven, dit werkt analoog aan de Query Builder

Bijvoorbeeld:

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

this.proxy.*

Werken met proxy's

.next()

Wissel naar de volgende proxy, de oude proxy zal niet meer worden gebruikt voor het huidige verzoek

.ban()

Wissel en ban de proxy (te gebruiken wanneer een service de werking op basis van IP blokkeert), de proxy wordt verbannen voor de tijd die is opgegeven in de scraper-instellingen (proxybannedcleanup)

.get()

Haal de huidige proxy op (de laatste proxy waarmee een verzoek is gedaan)

.set()

this.proxy.set('http://127.0.0.1:8080', noChange = false) - stel de proxy in voor het volgende verzoek, de parameter noChange is optioneel, indien ingesteld op true zal de proxy niet veranderen tussen pogingen

yield this.captcha.*

Werken met captcha

.recognize()

yield this.captcha.recognize(preset, image, type, overrides) - laden van een captcha voor herkenning

  • image - binaire gegevens van de afbeelding voor herkenning
  • preset - verwijst naar de preset voor Util::AntiGateUtil::AntiGate
  • type een van de volgende: 'jpeg', 'gif', 'png'

Het resultaat is een hash met de velden:

  • answer - tekst uit de afbeelding
  • id - captcha-id, om later een fout te kunnen melden via reportBad
  • error - tekstuele foutmelding als answer niet is opgegeven

.recognizeFromUrl()

yield this.captcha.recognizeFromUrl(preset, url, overrides) - analoog aan de vorige methode, maar het laden van de captcha gebeurt automatisch via de link (url), zonder gebruik van een proxy

.reportBad()

yield this.captcha.reportBad(preset, id, overrides) - aan de service melden dat de captcha onjuist is opgelost

this.utils.*

.updateResultsData()

this.utils.updateResultsData(results, data) - methode voor het automatisch vullen van $pages.$i.data en $data, moet worden aangeroepen om de inhoud van de resultaatpagina toe te voegen

.urlFromHTML()

this.utils.urlFromHTML(url, base) - verwerkt een link verkregen uit HTML-code - decodeert entities (&amp; enz.), optioneel kan base worden doorgegeven - de basis-URL (bijvoorbeeld de URL van de bronpagina), zodat een volledige link kan worden verkregen

.url.extractDomain()

this.utils.url.extractDomain(url, removeDefaultSubdomain) - de methode accepteert een link als eerste parameter en retourneert het domein van deze link. De tweede optionele parameter bepaalt of het subdomein www van het domein moet worden afgeknipt. Standaard 0 - dus niet afknippen.

.url.extractTopDomain()

this.utils.url.extractTopDomain(url) - de methode accepteert een link als eerste parameter en retourneert het domein van deze link, zonder subdomeinen.

.url.extractTopDomainByZone()

this.utils.url.extractTopDomainByZone(url) - de methode accepteert een link als eerste parameter en retourneert het domein van deze link, ook zonder subdomeinen. Werkt met alle regionale zones

.url.extractMaxPath()

this.utils.url.extractMaxPath(url) - de methode accepteert een string en selecteert daaruit de URL

.url.extractWOParams()

this.utils.url.extractWOParams(url)- de methode accepteert een link en retourneert dezelfde link afgekapt tot de parameterstring. Dat wil zeggen, het retourneert de URL tot aan het ?

.removeHtml()

this.utils.removeHtml(string) - de methode accepteert een string en retourneert deze ontdaan van html-tags this.utils.removeNoDigit(string) - de methode accepteert een string, verwijdert alles behalve cijfers en retourneert het resultaat

.removeNoDigit()

this.utils.removeNoDigit(string) - de methode accepteert een string, verwijdert alles behalve cijfers en retourneert het resultaat

.removeComma()

this.utils.removeComma(string) - de methode accepteert een string, verwijdert tekens zoals .,\r\n en retourneert het resultaat

this.sessionManager.*

Om sessies in een JS-scraper te gebruiken, moet u eerst de Session Manager initialiseren. Dit gebeurt met de functie init()

init() {
this.sessionManager.init({
//hier kunt u aanvullende parameters opgeven
});
}

In this.sessionManager.init() kunnen de volgende parameters worden gebruikt:

  • name - optionele parameter, maakt het mogelijk om de naam van de scraper waartoe de sessies behoren te overschrijven, standaard gelijk aan de naam van de scraper waarin de initialisatie plaatsvindt
  • canChangeProxy - optionele parameter, mogelijkheid om van proxy te wisselen, standaard gelijk aan 1
  • domain - optionele parameter, geeft aan dat er naar sessies moet worden gezocht tussen alle opgeslagen sessies voor deze scraper (als er geen waarde is opgegeven), of alleen voor een specifiek domein (het domein moet met een punt ervoor worden opgegeven, bijvoorbeeld .site.com)

Er zijn verschillende functies voor het werken met sessies:

.get()

this.sessionManager.get() - haalt een nieuwe sessie op, moet worden aangeroepen voordat een verzoek wordt uitgevoerd

.reset()

this.sessionManager.reset() - wist cookies en haalt een nieuwe sessie op. Moet worden aangeroepen als het verzoek met de huidige sessie niet succesvol was.

.save()

this.sessionManager.save() - opslaan van een succesvolle sessie of opslaan van willekeurige gegevens in de sessie

results.<array>.addElement()

De methode results.<array>.addElement() maakt het gemakkelijker om arrays in results te vullen. Bij gebruik hiervan hoeft u de volgorde van variabelen in de array niet te onthouden en ze niet handmatig op te sommen.

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

Methoden init() en destroy()

De methode init() wordt aangeroepen bij het starten van de taak, destroy() - bij het beëindigen.

Voorbeeld van gebruik:

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

class Parser {
constructor() {
...
}

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

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