Cómo usar nodejs para crear un programa rastreador
Todo el proceso de creación de un programa rastreador con NodeJS:
1. Crear un proyecto craelr-demo
Cree un proyecto Express y luego agregue Todo. El contenido se ha eliminado porque no es necesario mostrarlo en la web por el momento. Por supuesto, también podemos usar npm install express en una carpeta vacía para usar las funciones Express requeridas.
2. Análisis del sitio de destino
Como se muestra en la figura, esto es parte de la etiqueta div en la página de inicio de CNode. Utiliza esta serie de identificadores y clases para localizar la información requerida. .
3. Utilice superagente para obtener datos de origen
Superagent es una biblioteca Http que utiliza API ajax. Su uso es casi el mismo que el de jQuery. La solicitud de obtención iniciada a través de él se genera en. el resultado de la devolución de llamada.
El código es el siguiente:
var express = require('express');
var url = require('url'); la URL de operación
var superagent = require('superagent'); // No olvides npm install para estas tres dependencias externas
var cheerio = require('cheerio');
var eventproxy = require('eventproxy');
var targetUrl = 'odejs.org/';
superagent.get(targetUrl)
.end(function (err, res) {
console.log(res);
});
4. análisis p>
cheerio es una función jQuery del lado del servidor que primero carga el HTML usando su .load() y luego filtra los elementos mediante selectores CSS.
El código es el siguiente:
var $ = cheerio.load(res.text);
//Filtrar datos a través del selector CSS
$('#topic_list .topic_title').each(función (idx, elemento) {
console.log(elemento);
});
5. Utilice eventproxy para rastrear cada tema simultáneamente
Eventproxy es una solución a este problema utilizando un enfoque de eventos (paralelo). Cuando se completa todo el raspado, eventproxy recibe el mensaje del evento y automáticamente llama al controlador por usted.
El código es el siguiente:
//Paso 1: Obtener una instancia de eventproxy
var ep = new eventproxy();
// Paso 2: Definir la función de devolución de llamada para escuchar eventos.
//El método after se utiliza para monitoreo repetido
//Parámetros: nombre de evento (Cadena) nombre del evento, tiempos (Número) número de tiempos de monitoreo, función de devolución de llamada
ep.after('topic_html', topicUrls. length, function(topics){
// temas es una matriz que contiene datos de ep.emit('topic_html', topicUrls. length, function (temas){
) emit('topic_html', par) 40 veces
//.map
temas = temas.map( function( topicPair) {
// Usa cheerio
var topicUrl = topicPair[0];
var topicHtml = topicPair[1];
var $ = cheerio.load( topicHtml);
return ({
título: $('.topic_full_title').text().trim(),
href: topicUrl,
comentario1: $('.reply_content ').eq(0).text().trim()
});
});
//resultado
console.log('resultado:');
console.log(topics);
});
// Paso 3: Determinar el
topicUrls.forEach(function (topicUrl) {
superagent.get(topicUrl) p>
.end(function (err, res) {
console.log('fetch ' + topicUrl + ' exitoso');
ep.emit( 'topic_html ', [topicUrl, res.text]);
});
});
6. Obtener análisis de resultados