Détection des Bad Request, de l'encodage et extraction du texte en UTF-8

Publié le par La vie multilingue du verbe

http://www.phdcomics.com/comics/archive/phd120211s.gif    

Le problème signalé dans la note précédente été réglé en mettant entre guillemets la variable controlducurl après la condition if.

Ensuite, j'ai procédé à un nettoyage du code : les sauts de ligne ont été supprimés et les commentaires se situent à présent après les lignes de code, sur la même ligne, et non sur la ligne précédente. L'indentation a été corrigée automatiquement grâce à GNU Emacs (ouvrir le script avec Emacs et appuyer sur la touche de tabulation à chaque ligne dont on souhaite corriger l'indentation).

J'ai abandonné Gedit en faveur de l'éditeur de texte Kate, dont la mise en page par défaut est plus élégante. Les caractères ont une taille plus petite, la coloration du texte est moins criarde, et il est possible de masquer des boucles entières (utile pour chercher une boucle en particulier dans un script très long). Enfin, il est possible d'afficher les numéros de ligne.

Autre amélioration du code : l'usage d'un fichier d'input, nommé input.txt, que l'on place dans le dossier à partir duquel on va exécuter le script (~/PROJET-MOT-SUR-LE-WEB, et non ~/PROJET-MOT-MOT-SUR-LE-WEB/PROGRAMMES). Dans ce fichier, on inscrit le chemin correspondant aux fichiers d'URLS (soit le répertoire URLS) et, à la ligne suivante, le nom du fichier html où stocker les tableaux de liens. Dans le script, on ajoute un dièse devant les deux premières occurences de la commande echo, afin de les faire passer pour des commentaires. Cela permet de ne pas traiter ces lignes comme des commandes, et de ne pas avoir à les effacer (on ne sait jamais).

Puis on lance le script avec la commande suivante : sh ./PROGRAMMES/nomduscript.sh < input.txt

Le Terminal ira "prendre" son input dans le fichier texte au lieu de le demander à l'utilisateur à chaque lancement du script.

La tâche suivante consistait à détecter l'encodage des pages aspirées, à en extraire le texte si l'encodage est en UTF-8, et à faire le nécessaire dans le cas contraire : détecter l'encodage puis faire le Lynx, ou ne rien faire. Ilaine Wang et Juliette Hamelin l'ont très bien expliqué dans leur blog : http://projet-rever.blogspot.com/2011/11/seance-6-application.html Aussi, je me permets de ne pas exposer ici dans le détail l'utilisation des commandes file, egrep et iconv, mais voici l'intégralité du code de notre script :

kate1katekate3

Voici le tableau que nous obtenons après exécution du script :

tableau1.pngtableau2.pngtableau3.pngtableau4tableau5.png

Les bonnes pages ont bien été aspirées et le dump texte fait. Il reste néanmoins quelques problèmes :

Nous n'avons pas réussi à totalement éliminer ce problème de crochets dans le script : le Terminal renvoie un message d'erreur à de nombreuses reprises :

erreurterminal-copie-1.png

Cela ne semble pourtant pas empêcher le bon fonctionnement du script.

Autre problème : certaines lignes du code source de notre tableau commencent par des crochets fermants, comme si une balise html avait été coupée en deux (on le voit très bien, par exemple, à la ligne 5) :

tableausource.jpg

Prochaine étape : l'extraction du contexte de nos mots-clés !

Commenter cet article

iWang 13/12/2011 22:30

Pas de panique pour le crochet fermant un peu gênant. Il s'agit tout simplement de la fermeture de la balise précédente.
Je pense que c'est dû au fait qu'après avoir remplacé une variable par sa valeur, le script exécute un retour chariot: résultat, le crochet fermant la balise se retrouve à la ligne d'après!

SF 13/12/2011 21:42

Il faudra essayer d'aller plus loin dans la description des erreurs détectées:
tester votre script sur un fichier d'URL avec 1 seule URL (qui pose pb) en intégrant dans votre script des "traceurs" permettant de mettre au jour les évènements...
SF