Ir al contenido principal

Descripción de métodos (v1)

advertencia

Esta API de JavaScript se considera obsoleta; recomendamos utilizar la API versión 2

Tenga en cuenta que algunos métodos requieren el uso de la palabra clave yield

yield this.request()

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

Obtención de una respuesta HTTP mediante una solicitud; se especifican los siguientes argumentos:

  • method - método de la solicitud (GET, POST...)
  • url - enlace para la solicitud
  • queryParams - hash con parámetros GET o hash con el cuerpo de la solicitud POST
  • opts - hash con opciones de la solicitud

Si se utiliza el método POST, el cuerpo de la solicitud se puede pasar de dos maneras:

  • simplemente enumerando los nombres de las variables y sus valores en queryParams. Por ejemplo:
{
key: set.query,
id: 1234,
type: 'text'
}
  • a través de la variable body en opts. Por ejemplo:
body: 'key=' + set.query + '&id=1234&type=text'

opts.check_content

check_content: [ condición1, condición2, ...] - matriz de condiciones para verificar el contenido recibido; si la verificación falla, la solicitud se repetirá con otro proxy.

Posibilidades:

  • uso de cadenas como condiciones (búsqueda por coincidencia de cadena)
  • uso de expresiones regulares como condiciones
  • uso de funciones de verificación propias, a las que se les pasan los datos y los encabezados de la respuesta
  • se pueden definir varios tipos de condiciones a la vez
  • para la negación lógica, coloque la condición en una matriz, es decir, check_content: ['xxxx', [/yyyy/]] significa que la solicitud se considerará exitosa si los datos recibidos contienen la subcadena xxxx y, al mismo tiempo, la expresión regular /yyyy/ no encuentra coincidencias en la página.

Para que la solicitud sea exitosa, deben pasar todas las verificaciones especificadas en la matriz.

Ejemplo (en los comentarios se indica qué se necesita para que la solicitud se considere exitosa):

let response = yield this.request('GET', set.query, {}, {
check_content: [
/<\/html>|<\/body>/, //esta expresión regular debe coincidir en la página obtenida
['XXXX'], //esta subcadena no debe estar en la página obtenida
'</html>', //esta subcadena debe estar en la página obtenida
(data, hdr) => {
return hdr.Status == 200 && data.length > 100;
} //esta función debe devolver true
]
});

opts.decode

decode: 'auto-html' - detección automática de la codificación y conversión a utf8

Valores posibles:

  • auto-html - basado en encabezados, etiquetas meta y el contenido de la página (opción recomendada óptima)
  • utf8 - indica que el documento está en codificación utf8
  • <encoding> - cualquier otra codificación

opts.headers

headers: { ... } - hash con encabezados, el nombre del encabezado se especifica en minúsculas, se puede incluir cookie entre otros Ejemplo:

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', ...] - permite redefinir el orden de clasificación de los encabezados

opts.recurse

recurse: N - número máximo de redirecciones, por defecto 7, use 0 para desactivar el seguimiento de redirecciones

opts.proxyretries

proxyretries: N - número de intentos para realizar la solicitud, por defecto se toma de la configuración del extractor

opts.parsecodes

parsecodes: { ... } - lista de códigos de respuesta HTTP que el extractor considerará exitosos, por defecto se toma de la configuración del extractor. Si se especifica '*': 1, todas las respuestas se considerarán exitosas. Ejemplo:

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

opts.timeout

timeout: N - tiempo de espera de la respuesta en segundos, por defecto se toma de la configuración del extractor

opts.do_gzip

do_gzip: 1 - determina si se debe usar compresión (gzip/deflate/br), activado por defecto (1), para desactivarlo establezca el valor en 0

opts.max_size

max_size: N - tamaño máximo de la respuesta en bytes, por defecto se toma de la configuración del extractor

opts.cookie_jar

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

opts.attempt

attempt: N - indica el número del intento actual; al usar este parámetro, se ignora el manejador de intentos integrado para esta solicitud

opts.browser

browser: 1 - emulación automática de encabezados de navegador (1 - activado, 0 - desactivado)

opts.use_proxy

use_proxy: 1 - anula el uso de proxy para una solicitud individual dentro del extractor JS por encima del parámetro global Use proxy (1 - activado, 0 - desactivado)

opts.noextraquery

noextraquery: 0 - desactiva la adición de Extra query string a la URL de la solicitud (1 - activado, 0 - desactivado)

opts.save_to_file

save_to_file: file - permite descargar un archivo directamente al disco, omitiendo la escritura en memoria. En lugar de file, se especifica el nombre y la ruta para guardar el archivo. Al usar esta opción, se ignora todo lo relacionado con data (verificación de contenido en check_content, response.data estará vacío, etc.).

opts.data_as_buffer

data_as_buffer: 0 - determina si se devuelve data como una cadena String (0) o como un objeto Buffer (1), por defecto se devuelve una cadena String

opts.bypass_cloudflare

bypass_cloudflare: 0 - evasión automática de la protección JavaScript de CloudFlare utilizando el navegador Chrome (1 - activado, 0 - desactivado)

opts.follow_meta_refresh

follow_meta_refresh: 0 - permite seguir redirecciones declaradas mediante la etiqueta meta HTML:

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

opts.tlsOpts

tlsOpts: { ... } – permite pasar ajustes para conexiones https ​

yield this.parser.request()

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

Obtención de resultados de otro extractor (integrado u otro extractor JS), se especifican los siguientes argumentos:

  • parser - nombre del extractor (SE::Google, JS::Custom::Example)
  • preset - ajuste preestablecido del extractor llamado
  • overrideParams - hash con anulaciones de la configuración del extractor llamado
  • query - consulta

En overrideParams se pueden redefinir los parámetros del extractor llamado, también están disponibles estos indicadores:

overrideParams.resultArraysWithObjects

resultArraysWithObjects: 0 - determina en qué formato devolver las matrices de resultados del extractor llamado:

  • si está activado (1) - se devolverán matrices de objetos
    [{link: 'link1', anchor: 'anchor1'}, {link: 'link2', anchor: 'anchor2'}, ...]
  • si está desactivado (0) - se devolverán matrices de valores estándar
    ['link1', 'anchor1', 'link2', 'anchor2', ...]

overrideParams.needData

needData: 1 - determina si se debe pasar (1) o no (0) data/pages[] en la respuesta, puede usarse para optimización

tools.*

Objeto global tools, permite acceder a las funciones integradas de A-Parser (análogo a herramientas del motor de plantillas $tools.*).

nota

tools.query no está disponible, es necesario usar this.query

this.doLog()

Indica si el registro de la tarea está activado, puede usarse como un indicador para optimización, en casos donde no se lleva registro y el argumento de this.logger.put es una expresión compleja

this.logger.*

.put()

this.logger.put(message) - añade la línea message al registro de la tarea

.putHTML()

this.logger.putHTML(code) - salida de código HTML al registro de la tarea, que se mostrará en el textarea

yield this.sleep()

yield this.sleep(sec)

Establece un retraso en el hilo por un número de segundos sec, puede ser fraccionario.

yield this.mutex.*

Mutex para la sincronización entre hilos, permite bloquear una sección de código para un solo hilo

.lock()

Espera de bloqueo, la ejecución continuará el primer hilo que capture el bloqueo, los demás hilos esperarán la liberación del bloqueo

.unlock()

Liberación del bloqueo, el siguiente hilo continuará la ejecución si estaba esperando el bloqueo (.lock())

this.cookies.*

Trabajo con cookies para la solicitud actual

.getAll()

Obtención de una matriz de cookies

.setAll()

Establecimiento de cookies, se debe pasar una matriz con cookies como argumento

.set()

this.cookies.set(host, path, name, value) - establecimiento de una sola cookie

this.query.add()

this.query.add(query, maxLvl)

Adición de una nueva consulta (query) con la posibilidad de especificar opcionalmente el nivel máximo (maxLvl), de manera similar a tools.query.add() Se puede pasar como consulta (query) un hash con parámetros, funciona de manera similar al Constructor de consultas

Ejemplo:

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

this.proxy.*

Trabajo con proxy

.next()

Cambiar al siguiente proxy, el proxy antiguo ya no se utilizará para la solicitud actual

.ban()

Cambiar y banear el proxy (necesario cuando el servicio bloquea el trabajo por IP), el proxy será baneado por el tiempo especificado en la configuración del extractor (proxybannedcleanup)

.get()

Obtener el proxy actual (el último proxy con el que se realizó la solicitud)

.set()

this.proxy.set('http://127.0.0.1:8080', noChange = false) - establecer el proxy para la siguiente solicitud, el parámetro noChange es opcional, si se establece en true el proxy no cambiará entre intentos

yield this.captcha.*

Trabajo con captcha

.recognize()

yield this.captcha.recognize(preset, image, type, overrides) - carga de captcha para reconocimiento

  • image - datos binarios de la imagen para reconocimiento
  • preset - indica el ajuste preestablecido para Util::AntiGateUtil::AntiGate
  • type se especifica uno de: 'jpeg', 'gif', 'png'

El resultado será un hash con los campos:

  • answer - texto de la imagen
  • id - id del captcha, para poder informar de un error posteriormente a través de reportBad
  • error - error de texto, si answer no está definido

.recognizeFromUrl()

yield this.captcha.recognizeFromUrl(preset, url, overrides) - similar al método anterior, pero la carga del captcha se realizará automáticamente mediante el enlace (url), sin usar proxy

.reportBad()

yield this.captcha.reportBad(preset, id, overrides) - informar al servicio que el captcha se resolvió incorrectamente

this.utils.*

.updateResultsData()

this.utils.updateResultsData(results, data) - método para el llenado automático de $pages.$i.data y $data, es necesario llamarlo para añadir el contenido de la página resultante

.urlFromHTML()

this.utils.urlFromHTML(url, base) - procesa un enlace obtenido de código HTML: decodifica entidades (&amp;, etc.), opcionalmente se puede pasar base (URL base, por ejemplo, la URL de la página de origen), permitiendo obtener el enlace completo

.url.extractDomain()

this.utils.url.extractDomain(url, removeDefaultSubdomain) - el método acepta como primer parámetro un enlace y devuelve el dominio de ese enlace. El segundo parámetro opcional determina si se debe recortar el subdominio www del dominio. Por defecto es 0, es decir, no recortar.

.url.extractTopDomain()

this.utils.url.extractTopDomain(url) - el método acepta como primer parámetro un enlace y devuelve el dominio de ese enlace, sin subdominios.

.url.extractTopDomainByZone()

this.utils.url.extractTopDomainByZone(url) - el método acepta como primer parámetro un enlace y devuelve el dominio de ese enlace, incluyendo sin subdominios. Funciona con todas las zonas regionales.

.url.extractMaxPath()

this.utils.url.extractMaxPath(url) - el método acepta una cadena y extrae una URL de ella

.url.extractWOParams()

this.utils.url.extractWOParams(url)- el método acepta un enlace y devuelve el mismo enlace recortado hasta la cadena de parámetros. Es decir, devolverá la URL hasta el ?

.removeHtml()

this.utils.removeHtml(string) - el método acepta una cadena y la devuelve limpia de etiquetas html

.removeNoDigit()

this.utils.removeNoDigit(string) - el método acepta una cadena, elimina todo excepto los dígitos y devuelve el resultado

.removeComma()

this.utils.removeComma(string) - el método acepta una cadena, elimina caracteres como .,\r\n y devuelve el resultado

this.sessionManager.*

Para usar sesiones en el extractor JS, primero se debe inicializar el Administrador de sesiones. Esto se hace con la función init()

init() {
this.sessionManager.init({
//aquí se pueden establecer parámetros adicionales
});
}

En this.sessionManager.init() se pueden usar los siguientes parámetros:

  • name - parámetro opcional, permite redefinir el nombre del extractor al que pertenecen las sesiones, por defecto es igual al nombre del extractor en el que se realiza la inicialización
  • canChangeProxy - parámetro opcional, posibilidad de cambiar de proxy, por defecto es 1
  • domain - parámetro opcional, indica buscar sesiones entre todas las guardadas para este extractor (si no se define valor), o solo para un dominio específico (es necesario especificar el dominio con un punto delante, por ejemplo .site.com)

Existen varias funciones para trabajar con sesiones:

.get()

this.sessionManager.get() - obtiene una nueva sesión, debe llamarse antes de realizar la solicitud

.reset()

this.sessionManager.reset() - limpieza de cookies y obtención de una nueva sesión. Debe llamarse si la solicitud con la sesión actual no fue exitosa.

.save()

this.sessionManager.save() - guardado de una sesión exitosa o guardado de datos arbitrarios en la sesión

results.<array>.addElement()

El método results.<array>.addElement() permite llenar matrices en results de manera más conveniente. Al usarlo, no es necesario recordar la secuencia de variables en la matriz ni enumerarlas manualmente.

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

Métodos init() y destroy()

El método init() se llama al inicio de la tarea, destroy() al finalizar.

Ejemplo de uso:

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

class Parser {
constructor() {
...
}

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

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

Enlaces útiles