Overblog All blogs Top blogs Jobs, Education & Studies
Edit post Follow this blog Administration + Create my blog
MENU
L'Américanisation

Master 1 Plurital 2012

Advertising

Aspiration en C:

Cette étape du projet est un peu en retard par rapport au script en bash et il est facile de comprendre pourquoi on m'a demandé pourquoi je voulais faire l'aspiration des sites en C au lieu de la faire en bash ou en python.  La première grande étape était l'installation d'une bibliothèque.  Heuresement, il existe la bibliothèque qui s'appelle libcurl - qu'on reconnaît bien de notre script bash.  Malheuresement il semble que j'ai choisi d'installer la mauvaise bibliothèque et c'était une semaine de frustration avant que je m'en rende compte.  En plus, il fallait bien faire les options 'linker' et ajouter un lien aussi à libcurl dans les options du projet, avant d'inclure les bibliothèques dans le script.  Bref, ce n'a été pas facile.  

 

En lisant bien des forums et en triant les questions beaucoup plus complexes des autres internautes perdus, j'ai réussi à faire un script qui aspire une page web et qui place le résultat dans un fichier de mon choix.  

 

La commande curl marche en 3 étapes :  

  • initialisation des options                       

    curl_easy_setopt(curl, CURLOPT_URL, "http://www.bbc.co.uk");
     
  • l'exécution de la commande                        

    res = curl_easy_perform(curl);
     
  • cleanup                        

    curl_easy_cleanup(curl);  

 

...après avoir déjà déclaré CURL *curl; CURLcode res;  

 

Il est possible aussi de voir si curl a bien marché :    

 

if(res != CURLE_OK)            

fprintf(stderr, "Erreur en executant curl : %s\n", curl_easy_strerror(res));  

ce qui récupère le résultat de l'exécution de curl et affiche un message d'erreur, avec le nom d'erreur si curl n'a pas bien fonctionné.   Pour l'instant le code html de la page s'affiche dans le terminal, puisque je n'ai pas spécifié un output.    

Advertising
Aspiration en C:

Nous pouvons voir aussi le message d'erreur affiché à l'écran quand je sabote une URL pour que ça ne soit pas trouvé :

Aspiration en C:
Advertising

Maintenant je souhaite diriger l'ouput de curl vers un fichier. Je fais ça en initialisant une autre option :  

 

FILE * fichier = fopen("file1.html", "w"); //déclaration du fichier

curl_easy_setopt(curl, CURLOPT_WRITEDATA, fichier);  

 

en faisant attention de refermer le fichier après l'exécution de curl :  

 

fclose(fichier);  

 

Et voilà le résultat :

Aspiration en C:
Aspiration en C:

Avant d'intégrer curl dans mon script, la première étape est de remplacer l'adresse url et l'emplacement de la page aspirée par des variables - des variables définies par moi et par les URLs dans un seul fichier URL. Une nouvelle commande a été utilisée pour créer le nom du fichier contenant la page aspirée :                 

 

sprintf((char *) &filename,"page%d.html", i);  

Chaque fichier aura le nom page-1.html, page-2.html, page-3.html etc.  

Aspiration en C:
Aspiration en C:
Aspiration en C:
Advertising

Et finalement, voici l'intégration de l'aspiration des pages dans le script original.  Comme avant, une autre colonne est ajoutée au tableau, contenant le lien vers la page aspirée.    

Aspiration en C:
Aspiration en C:
Aspiration en C:
Aspiration en C:
Aspiration en C:
Aspiration en C:
Aspiration en C:
Aspiration en C:

Comme avec l'aspiration en bash, il y avait des problèmes avec l'aspiration de certaines pages (surtout pour une page qui n'existe plus), comme indiqué dans mon terminal par le message d'erreur.    La prochaine étape sera de vérifier que l'aspiration a bien marché avant de procéder avec la vérification de l'encodage et le dump du contenu textuel des pages aspirées.    Une petite amélioration serait aussi de récupérer le nom de chaque fichier URL sans l'extension, pour ensuite l'utiliser pour nommer les sous-dossiers des pages aspirées.  Pour l'instant ils sont numérotés de 1 à 4.  Remplacer le tiret du 8 par une espace rendrait ce nom plus esthétique pour l'utiliser en tant que titre de chaque tableau.  

Share this post
Repost0
To be informed of the latest articles, subscribe:
Comment on this post