Red de conocimiento informático - Material del sitio web - Cómo escribir un rastreador elegantemente usando lenguaje C

Cómo escribir un rastreador elegantemente usando lenguaje C

Todo el mundo tiene la necesidad de escribir rastreadores web más o menos en tiempos normales. En términos generales, la primera opción para escribir rastreadores es, naturalmente, Python. Además, lenguajes como Java también son buenas opciones. La razón para elegir los lenguajes anteriores no es solo que todos tienen muy buenas bibliotecas de solicitudes de red y bibliotecas de procesamiento de cadenas, sino también que existen muchos y completos marcos de rastreo basados ​​​​en los lenguajes anteriores. Un buen marco de rastreo puede garantizar la estabilidad del programa de rastreo y la conveniencia de escribir el programa. Por lo tanto, la misión de esta biblioteca de rastreo cspider es que podamos usar el lenguaje C y aún así escribir programas de rastreo con elegancia.

Características del rastreador

Fácil de configurar. Usando una función de configuración, puede definir el agente de usuario, la cookie, el tiempo de espera, el proxy y el número máximo de subprocesos de rastreo y análisis.

La lógica del programa es independiente. Los usuarios pueden definir la función de análisis del rastreador y la función de persistencia de datos respectivamente. Y para la nueva URL analizada, el usuario puede usar la función addUrl proporcionada por cspider para agregarla a la cola de tareas.

Procesamiento de cadenas cómodo. cspider proporciona una función de expresión regular simple basada en pcre, una función de análisis xpath basada en libxml2 y una biblioteca cJSON para analizar json.

Rastreo eficiente. cspider programa el hilo de rastreo y el hilo de análisis en función de libuv, y utiliza curl como biblioteca de solicitudes de red.

Pasos para usar cspider

Obtén cspider_t.

Personalice el agente de usuario, la cookie, el tiempo de espera, el proxy y el número máximo de subprocesos de rastreo y análisis.

Agregue la URL inicial que se rastreará en la cola de tareas.

Escribe funciones de análisis y funciones de persistencia de datos.

Inicia el rastreador.

Ejemplo

Veamos primero un ejemplo de rastreador simple y lo explicaremos en detalle más adelante.

#includelt;cspider/spider.hgt;

/*

Función de análisis personalizada, d es la cadena de página html obtenida

*/

void p(cspider_t *cspider, char *d, void *user_data) {

char *get[100];

//análisis xpath html

int size = xpath(d, "//body/div[@class='wrap']/div[@class='sort-column area']/div[@ class='column -bd cfix']/ul[@class='st-list cfix']/li/strong/a", get, 100);

int i;

for ( i = 0; i lt; size; i) {

//Persistencia del nombre de la película obtenida

saveString(cspider, get[i]) ;

}

}

/*

Función de persistencia de datos, pase la función saveString() llamada en la función de análisis anterior Ingrese los datos para guardarlos más

*/

void s(void *cadena, void *user_data) {

char *get = (char * )cadena;

ARCHIVO *archivo = (FILE*)datos_usuario;

fprintf(archivo, "s\n", get);

retorno;

}

int main() {

//Inicializar spider

cspider_t *spider = init_cspider();

char *agent = "Mozilla/5.0 (Macintosh; Intel Mac OS /I; ll=108288; visto=1130500_24708145_6433169_4843567_1767120_5318823_1899158_1271597; __utma=30149280.927537245.1446813674. 14469832 17.1449139583.4; __utmz=30149280.1449139583.4.4.utmcsr=accounts.douban.com|utmccn=(referencia)|utmcmd=referencia| utmcct=/login; ps= "

//Establece la URL de la página a rastrear

cs_setopt_url(spider,

"so.tv.sohu.com/list_p1100_p20_p3_u5185_u5730_p40_p5_p6_p77_p80_p9_2d1_p101_p11.html");

//Establecer agente de usuario

cs_setopt_useragent(spider, agente);

// cs_setopt_cookie(spider, cookie);

//Pase los punteros a la función de análisis y la función de persistencia de datos

cs_setopt_process(spider, p, NULL);

//El puntero user_data de la función s apunta a stdout

cs_setopt_save(spider, s, stdout);

//Establece el número de subprocesos

cs_setopt_threadnum(spider, DESCARGAR, 2);

cs_setopt_threadnum(spider, GUARDAR, 2);

//ARCHIVO *fp = fopen("log", "wb ");

//cs_setopt_logfile(spider, fp);

//Iniciar rastreador

return cs_run(spider);

}

Explicación de ejemplo

cspider_t *spider = init_cspider(); Obtiene el cspider inicial. Se pueden utilizar funciones como cs_setopt_xxx para la configuración de inicialización. Lo que se debe tener en cuenta es: cs_setopt_process(spider, p, NULL); y cs_setopt_save(spider, s, stdout);, que configuran respectivamente la función de análisis p y la función de persistencia de datos s. Estas dos funciones deben ser implementadas por el usuario. ellos mismos Hay un puntero definido por el usuario a la información de contexto user_data.

En la función de análisis, el usuario debe definir las reglas de análisis y llamar a saveString para conservar la cadena analizada, o llamar a addUrl para agregar la URL a la cola de tareas. La cadena pasada en saveString se procesará en la función de persistencia de datos definida por el usuario. En este punto, el usuario puede elegir enviar a un archivo o base de datos, etc.

Finalmente llame a cs_run(spider) para iniciar el rastreador.

Los parámetros API detallados se pueden ver aquí