Vai al contenuto principale

Descrizione dei metodi (v1)

avvertimento

Questa JavaScript API è considerata obsoleta, si consiglia di utilizzare l' API versione 2

Si prega di notare che alcuni metodi richiedono l'uso della parola chiave yield

yield this.request()​

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

Ottenere una risposta HTTP tramite richiesta, gli argomenti specificati sono:

  • method - metodo della richiesta (GET, POST...)
  • url - link per la richiesta
  • queryParams - hash con parametri get o hash con il corpo della richiesta post
  • opts - hash con le opzioni della richiesta

Se viene utilizzato il metodo POST, il corpo della richiesta può essere trasmesso in due modi:

  • elencando semplicemente i nomi delle variabili e i loro valori in queryParams. Ad esempio:
{
key: set.query,
id: 1234,
type: 'text'
}
  • tramite la variabile body in opts. Ad esempio:
body: 'key=' + set.query + '&id=1234&type=text'

opts.check_content​

check_content: [ condizione1, condizione2, ...] - array di condizioni per verificare il contenuto ricevuto; se la verifica fallisce, la richiesta verrà ripetuta con un altro proxy.

Funzionalità:​

  • utilizzo di stringhe come condizioni (ricerca per occorrenza della stringa)
  • utilizzo di espressioni regolari come condizioni
  • utilizzo di funzioni di verifica personalizzate, a cui vengono passati i dati e gli header della risposta
  • è possibile impostare contemporaneamente diversi tipi di condizioni
  • per la negazione logica, inserire la condizione in un array, ovvero check_content: ['xxxx', [/yyyy/]] significa che la richiesta sarà considerata riuscita se i dati ricevuti contengono la sottostringa xxxx e allo stesso tempo l'espressione regolare /yyyy/ non trova corrispondenze nella pagina

Per una richiesta riuscita, devono passare tutte le verifiche specificate nell'array

Esempio (nei commenti è indicato cosa serve affinché la richiesta sia considerata riuscita):

let response = yield this.request('GET', set.query, {}, {
check_content: [
/<\/html>|<\/body>/, //questa espressione regolare deve corrispondere nella pagina ricevuta
['XXXX'], //questa sottostringa non deve essere presente nella pagina ricevuta
'</html>', //questa sottostringa deve essere presente nella pagina ricevuta
(data, hdr) => {
return hdr.Status == 200 && data.length > 100;
} //questa funzione deve restituire true
]
});

opts.decode​

decode: 'auto-html' - rilevamento automatico della codifica e conversione in utf8

Valori possibili:

  • auto-html - basato su header, tag meta e contenuto della pagina (opzione consigliata ottimale)
  • utf8 - indica che il documento è in codifica utf8
  • <encoding> - qualsiasi altra codifica

opts.headers​

headers: { ... } - hash con gli header, il nome dell'header va specificato in minuscolo, è possibile indicare anche i cookie Esempio:

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', ...] - consente di ridefinire l'ordine di ordinamento degli header

opts.recurse​

recurse: N - numero massimo di reindirizzamenti (redirect), predefinito 7, utilizzare 0 per disabilitare i redirect

opts.proxyretries​

proxyretries: N - numero di tentativi di esecuzione della richiesta, per impostazione predefinita viene preso dalle impostazioni dello scraper

opts.parsecodes​

parsecodes: { ... } - elenco dei codici di risposta HTTP che lo scraper considererà riusciti, per impostazione predefinita viene preso dalle impostazioni dello scraper. Se si specifica '*': 1, tutte le risposte saranno considerate riuscite. Esempio:

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

opts.timeout​

timeout: N - timeout della risposta in secondi, per impostazione predefinita viene preso dalle impostazioni dello scraper

opts.do_gzip​

do_gzip: 1 - determina se utilizzare la compressione (gzip/deflate/br), abilitato per impostazione predefinita (1), per disabilitare impostare il valore a 0

opts.max_size​

max_size: N - dimensione massima della risposta in byte, per impostazione predefinita viene preso dalle impostazioni dello scraper

opts.cookie_jar​

cookie_jar: { ... } - hash con i cookie.

opts.attempt​

attempt: N - indica il numero del tentativo corrente; quando si utilizza questo parametro, il gestore dei tentativi integrato per questa richiesta viene ignorato

opts.browser​

browser: 1 - emulazione automatica degli header del browser (1 - abilitato, 0 - disabilitato)

opts.use_proxy​

use_proxy: 1 - ridefinisce l'uso del proxy per una singola richiesta all'interno dello scraper JS rispetto al parametro globale Use proxy (1 - abilitato, 0 - disabilitato)

opts.noextraquery​

noextraquery: 0 - disabilita l'aggiunta di Extra query string all'URL della richiesta (1 - abilitato, 0 - disabilitato)

opts.save_to_file​

save_to_file: file - consente di scaricare un file direttamente su disco, evitando la scrittura in memoria. Al posto di file si specifica il nome e il percorso con cui salvare il file. Quando si utilizza questa opzione, viene ignorato tutto ciò che riguarda data (verifica del contenuto in check_content, response.data sarà vuoto, ecc.).

opts.data_as_buffer​

data_as_buffer: 0 - determina se restituire data come stringa String (0) o come oggetto Buffer (1), per impostazione predefinita viene restituita una stringa String

opts.bypass_cloudflare​

bypass_cloudflare: 0 - bypass automatico della protezione JavaScript di CloudFlare utilizzando il browser Chrome (1 - abilitato, 0 - disabilitato)

opts.follow_meta_refresh​

follow_meta_refresh: 0 - consente di seguire i redirect dichiarati tramite il meta tag HTML:

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

opts.tlsOpts​

tlsOpts: { ... } – consente di passare le impostazioni per le connessioni https ​

yield this.parser.request()​

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

Ottenere i risultati da un altro scraper (integrato o un altro scraper JS), gli argomenti specificati sono:

  • parser - nome dello scraper (SE::Google, JS::Custom::Example)
  • preset - preset delle impostazioni dello scraper chiamato
  • overrideParams - hash con le ridefinizioni delle impostazioni dello scraper chiamato
  • query - richiesta

In overrideParams è possibile ridefinire i parametri dello scraper chiamato, sono inoltre disponibili questi flag:

overrideParams.resultArraysWithObjects​

resultArraysWithObjects: 0 - determina in quale formato restituire gli array dei risultati dello scraper chiamato:

  • se abilitato (1) - verranno restituiti array di oggetti
    [{link: 'link1', anchor: 'anchor1'}, {link: 'link2', anchor: 'anchor2'}, ...]
  • se disabilitato (0) - verranno restituiti array standard di valori
    ['link1', 'anchor1', 'link2', 'anchor2', ...]

overrideParams.needData​

needData: 1 - determina se trasmettere (1) o meno (0) nella risposta data/pages[], può essere utilizzato per l'ottimizzazione

tools.*​

Oggetto globale tools, consente di accedere alle funzioni integrate di A-Parser (analogo agli strumenti del template toolkit $tools.*).

nota

tools.query non è disponibile, è necessario utilizzare this.query

this.doLog()​

Indica se la registrazione del log dell'attività è abilitata, può essere utilizzato come flag per l'ottimizzazione, nei casi in cui il log non viene registrato e l'argomento per this.logger.put è un'espressione complessa

this.logger.*​

.put()​

this.logger.put(message) - aggiunge la riga message al log dell'attività

.putHTML()​

this.logger.putHTML(code) - output nel log dell'attività di codice HTML, che verrà visualizzato nella textarea

yield this.sleep()​

yield this.sleep(sec)

Imposta un ritardo nel thread per il numero di secondi sec, può essere frazionario.

yield this.mutex.*​

Mutex per la sincronizzazione tra i thread, consente di bloccare una sezione di codice per un singolo thread

.lock()​

Attesa del lock, l'esecuzione continuerà con il primo thread che ha acquisito il lock, gli altri thread attenderanno il rilascio del lock

.unlock()​

Rilascio del lock, il thread successivo continuerà l'esecuzione se era in attesa del lock (.lock())

this.cookies.*​

Lavoro con i cookie per la richiesta corrente

.getAll()​

Ottenere un array di cookie

.setAll()​

Impostazione dei cookie, come argomento deve essere passato un array con i cookie

.set()​

this.cookies.set(host, path, name, value) - impostazione di un singolo cookie

this.query.add()​

this.query.add(query, maxLvl)

Aggiunta di una nuova query (query) con la possibilità opzionale di specificare il livello massimo (maxLvl), analogamente a tools.query.add() È possibile passare come query (query) un hash con i parametri, funziona analogamente al Costruttore di query

Esempio:

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

this.proxy.*​

Lavoro con i proxy

.next()​

Cambiare il proxy con il successivo, il vecchio proxy non verrà più utilizzato per la richiesta corrente

.ban()​

Cambiare e bannare il proxy (necessario quando il servizio blocca l'operazione per IP), il proxy verrà bannato per il tempo specificato nelle impostazioni dello scraper (proxybannedcleanup)

.get()​

Ottenere il proxy corrente (l'ultimo proxy con cui è stata effettuata la richiesta)

.set()​

this.proxy.set('http://127.0.0.1:8080', noChange = false) - impostare il proxy per la richiesta successiva, il parametro noChange è opzionale, se impostato su true il proxy non cambierà tra i tentativi

yield this.captcha.*​

Lavoro con i captcha

.recognize()​

yield this.captcha.recognize(preset, image, type, overrides) - caricamento del captcha per il riconoscimento

  • image - dati binari dell'immagine per il riconoscimento
  • preset - indica il preset per Util::AntiGateUtil::AntiGate
  • type specificare uno tra: 'jpeg', 'gif', 'png'

Il risultato sarà un hash con i campi:

  • answer - testo dall'immagine
  • id - id del captcha, per poter segnalare successivamente un errore tramite reportBad
  • error - errore testuale, se answer non è impostato

.recognizeFromUrl()​

yield this.captcha.recognizeFromUrl(preset, url, overrides) - analogo al metodo precedente, ma il caricamento del captcha verrà eseguito automaticamente tramite link (url), senza l'uso di proxy

.reportBad()​

yield this.captcha.reportBad(preset, id, overrides) - segnalare al servizio che il captcha è stato risolto in modo errato

this.utils.*​

.updateResultsData()​

this.utils.updateResultsData(results, data) - metodo per la compilazione automatica di $pages.$i.data e $data, necessario chiamarlo per aggiungere il contenuto della pagina risultante

.urlFromHTML()​

this.utils.urlFromHTML(url, base) - elabora un link ottenuto dal codice HTML - decodifica le entità (&amp; ecc.), opzionalmente è possibile passare base - URL di base (ad esempio l'URL della pagina di origine), in questo modo è possibile ottenere il link completo

.url.extractDomain()​

this.utils.url.extractDomain(url, removeDefaultSubdomain) - il metodo accetta come primo parametro un link e restituisce il dominio da quel link. Il secondo parametro opzionale determina se rimuovere il sottodominio www dal dominio. Per impostazione predefinita 0 - ovvero non rimuovere.

.url.extractTopDomain()​

this.utils.url.extractTopDomain(url) - il metodo accetta come primo parametro un link e restituisce il dominio da quel link, senza sottodomini.

.url.extractTopDomainByZone()​

this.utils.url.extractTopDomainByZone(url) - il metodo accetta come primo parametro un link e restituisce il dominio da quel link, inclusi i casi senza sottodomini. Funziona con tutte le zone regionali

.url.extractMaxPath()​

this.utils.url.extractMaxPath(url) - il metodo accetta una stringa e seleziona un URL da essa

.url.extractWOParams()​

this.utils.url.extractWOParams(url)- il metodo accetta un link e restituisce lo stesso link troncato prima della stringa dei parametri. Ovvero restituirà l'URL fino al ?

.removeHtml()​

this.utils.removeHtml(string) - il metodo accetta una stringa e la restituisce pulita dai tag html

.removeNoDigit()​

this.utils.removeNoDigit(string) - il metodo accetta una stringa, rimuove tutto tranne le cifre e restituisce il risultato

.removeComma()​

this.utils.removeComma(string) - il metodo accetta una stringa, rimuove caratteri come .,\r\n e restituisce il risultato

this.sessionManager.*​

Per utilizzare le sessioni nello scraper JS, è necessario prima inizializzare il Gestore delle sessioni. Questo viene fatto utilizzando la funzione init()

init() {
this.sessionManager.init({
//qui è possibile impostare parametri aggiuntivi
});
}

In this.sessionManager.init() è possibile utilizzare i seguenti parametri:

  • name - parametro opzionale, consente di ridefinire il nome dello scraper a cui appartengono le sessioni, per impostazione predefinita è uguale al nome dello scraper in cui avviene l'inizializzazione
  • canChangeProxy - parametro opzionale, possibilità di cambiare proxy, per impostazione predefinita è uguale a 1
  • domain - parametro opzionale, indica di cercare le sessioni tra tutte quelle salvate per questo scraper (se il valore non è impostato), oppure solo per un dominio specifico (è necessario specificare il dominio con un punto davanti, ad esempio .site.com)

Esistono diverse funzioni per lavorare con le sessioni:

.get()​

this.sessionManager.get() - ottiene una nuova sessione, deve essere chiamato prima di effettuare una richiesta

.reset()​

this.sessionManager.reset() - pulizia dei cookie e ottenimento di una nuova sessione. Deve essere chiamato se la richiesta con la sessione corrente non ha avuto successo.

.save()​

this.sessionManager.save() - salvataggio di una sessione riuscita o salvataggio di dati arbitrari nella sessione

results.<array>.addElement()​

Il metodo results.<array>.addElement() consente di compilare gli array in results in modo più comodo. Utilizzandolo, non è necessario ricordare la sequenza delle variabili nell'array ed elencarle manualmente.

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

Metodi init() e destroy()​

Il metodo init() viene chiamato all'avvio dell'attività, destroy() - al completamento.

Esempio di utilizzo:

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

class Parser {
constructor() {
...
}

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

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