Métodos auxiliares (utils, tools, sleep)
this.utils.*
.updateResultsData(results, data)
await this.utils.updateResultsData(results, data) - método para el llenado automático de $pages.$i.data y $data, es necesario llamarlo para agregar contenido a la página resultante
.urlFromHTML(url, base)
await this.utils.urlFromHTML(url, base) - procesa un enlace obtenido del código HTML: decodifica entidades (&, etc.), opcionalmente se puede pasar base - la URL base (por ejemplo, la URL de la página de origen), de esta manera se puede obtener un enlace completo
.url.extractDomain(url, removeDefaultSubdomain)
await this.utils.url.extractDomain(url, removeDefaultSubdomain) - el método acepta como primer parámetro un enlace y devuelve el dominio de dicho 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(url)
await this.utils.url.extractTopDomain(url) - el método acepta como primer parámetro un enlace y devuelve el dominio de dicho enlace, sin subdominios.
.url.extractTopDomainByZone(url)
await this.utils.url.extractTopDomainByZone(url) - el método acepta como primer parámetro un enlace y devuelve el dominio de dicho enlace, incluyendo la eliminación de subdominios. Funciona con todas las zonas regionales.
.url.extractMaxPath(url)
await this.utils.url.extractMaxPath(url) - el método acepta una cadena y extrae una URL de ella.
.url.extractWOParams(url)
await 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(string)
await this.utils.removeHtml(string) - el método acepta una cadena y la devuelve limpia
de etiquetas HTML
.removeNoDigit(string)
await this.utils.removeNoDigit(string) - el método acepta una cadena, elimina todo excepto los dígitos y devuelve el resultado
.removeComma(string)
await this.utils.removeComma(string) - el método acepta una cadena, elimina caracteres como .,\r\n y devuelve el resultado
.getAllBlocks(html, regexp, opts?)
await this.utils.getAllBlocks(html, regexp, opts?) - obtención de todos los bloques en la página con sus correspondientes etiquetas de cierre, el método acepta una cadena HTML y una expresión regular que indica el inicio del bloque (cualquier bloque que tenga etiquetas de cierre pares, por ejemplo <div>...</div>), como resultado devuelve un array de todos los bloques encontrados
Opciones opts:
searchStartIndex- indica el índice en la cadena desde el cual comenzar la búsqueda, por defecto0
const blocks = this.utils.getAllBlocks(html, /<div [^>]*?class="results"/)
.getAllBlocksByAttr(html, tag, attrName, attrRegExp, opts?)
await this.utils.getAllBlocksByAttr(html, tag, attrName, attrRegExp, opts?) - método similar a .getAllBlocks, en lugar de una expresión regular para buscar el inicio del bloque, se especifica el nombre de la etiqueta, el nombre del atributo por el cual se realizará la búsqueda (por ejemplo id, class) y una expresión regular que se aplicará al valor del atributo especificado
const blocks = this.utils.getAllBlocksByAttr(html, 'div', 'class', /results/)
await tools.*
Objeto global tools, permite acceder a las funciones integradas de A-Parser
Análogo de las herramientas del motor de plantillas $tools.*
tools.query no está disponible, es necesario usar this.query
await tools.createTemplate(string)
Permite usar el motor de plantillas Template Toolkit dentro del extractor JavaScript.
let template = await tools.createTemplate("Hello [% content %]!")
template = typeof template == 'function' ? await template({content: 'World'}) : template
this.logger.put(template) // Output: Hello World!
Ejemplo de uso "Extractor de conversión de marcado Markdown a HTML"
await this.sleep(sec)
await this.sleep(sec)
Establece un retraso en el hilo por un número de segundos (sec), puede ser fraccionario.
await 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á con el primer hilo que haya tomado el bloqueo, los demás hilos esperarán a que se libere el bloqueo
.unlock()
Liberación del bloqueo, el siguiente hilo continuará la ejecución si estaba esperando el bloqueo - .lock()
results.<array>.addElement()
El método results.<array>.addElement() permite llenar arreglos en results de manera más conveniente. Al usarlo, no es necesario recordar la secuencia de variables en el arreglo ni enumerarlas manualmente.
results.serp.addElement({
link: 'https://google.com',
anchor: 'Google',
snippet: 'Loreps ipsum...',
});
this.isContextAlive()
Este método es necesario para hilos de larga duración que procesan consultas en un bucle, permitiendo finalizar el trabajo correctamente al detener o eliminar una tarea
while (this.isContextAlive()) {
await this.request(...)
}