Merci pour votre lecture et à la prochaine.
Maknie attend votre(vos) commentaire(s).
Depuis plusieurs semaines, je perds des neurones sur de script. Je n’ai rien publié depuis car je voulais arriver à emboîter toutes les commandes sur un même script pour pouvoir l’exécuter. Le problème (un parmi tant d’autres), c’est que lorsque je curl maintenantla commande curl ne me donne que des erreurs => retour curl = 23 et ce pour toutes les lignes.
Ceci m’empêche d’effectuer le reste du traitement.
Pourtant mon script à l’air complet :
Elles servent à écrire de manière générique des chaînes de caractères qui ont des caractéristiques communes.
Comment peut-on écrire une url ? une date ? Elles permettent de décrire de manière concise des classes de chaînes de caractères. Cela passe par le repérage de motifs ou patron. Cela nous sert à localiser les zones qui nous intéressent. Cependant il est parfois difficile de définir le modèle.
\bmot\b
\bbiocarburant(s)\b
Les meilleurs outils de travail sur les données textuelles intègrent l’utilisation des expressions régulières. cependant la syntaxe des exp. régulières peut varier dans certains outils mais la syntaxe peut varier, mais le principe est touours le même.
Ces motifs sont utiles pour chercher les chaînes de caractères qui nous intéresse. Il y a des caractères simples et aussi des caractères spéciaux (opérateurs).
En général, les motifs sont assez complexes.
[...] signifie ensemble de caractères. ce qui est entre crochets correspond à 1 caractère.
r[iau]g => ring, rang, rung
|
Exemple : in (any|every) => in any, in every
on vise un caractère compris dans l’intervalle entre crochets :
[0-9] => (0,1,2,3,4,5,6)
[^...] porte une négatin sur les éléments constitutifs de l’ensemble situé entre crochets.
supprimer une balise HTML : <[^<>]> supprime tout ce qui est entre chevrons “supprime toutes chaînes de caractères qui est tout sauf des chevrons”
avec sed on lui donne substitute, il le remplace par rien.
sed -e “s/<[^<>]>//”
? signifie que le caractère qui précède est optionnel
arbres? => arbre; arbres
interest (s|(ed|ing)(ly)?)? => interest, interests, intersted, interestingly
* remplace n’importe quoi
+ => as [a-z]+ as => au moins une occurrence
marquer des répétitions {}
Le point peut marquer n’importe quel caractère sauf le retour à la ligne.
^ => début de chaîne
$=> fin de chaîne
\w => caractère de mot, n’importe quel caractère alpha-numérique ; \b\w+\b : permet de reconnaître beaucoup de mots, mais pas tous (pas les mots accentués par exemple)
\W => n’importe quel caractère non caractère de mot
\b => frontière d’un mot à gauche ou à droite
Le parenthésage permet de construire des expressions complexes. La femeture est plus forte que la concaténation qui est plus forte que l’union.
* : caractère de fermeture qui s’applique à ce qui précède.
a|b(c*)d devient ((a| ((b(c*))d))
\ : déspécialise le caractère qui le suit.
voir le man de “egrep” qui présente des carctère d’expressions régulières intéressants.
Voir les opérateurs de Regex.
filtrage de lignes dans un fichier qui correspond à des lignes et affichage des lignes concernées.
Options egrep : voir manuel
-l : ne pas tenir en compte majuscule et minuscule
-o : affiche toutes les occurrences reconnues du motif
-v : afficher les lignes qui ne contiennent pas les lignes vides.
Supprimer les lignes vides dans un fichier et de le mettre dans un fichier, le même fichier sans lignes vides.
egrep -v ” ^$” toto.txt >totosansligne.txt
Par défaut egrep affiche la ligne contenant le motif . -o cherche le motif et affiche uniquement la chaîne de caractères reconnu, si il y a plusieurs fois le motif sur une même ligne il sera affiché plusieur fois.
egrep-o “\bcitoy\w+” => afficher tous les mots qui commencent par citoy dans le fichier.
|sort-u => affiche les différentes formes du mot “citoyen, citoyens, citoyennes, citoyennes”
On peut faire une demande de requête élargie avec egrep.
la commande a fonctionné, cependant, il y a des pages qui ne sont pas disponibles. on obtient des messages tels que “bad request”, “oops!” “pages indisponibles”. Les serveurs ne veulent pas nous laisser aspirer les pages.
Il faudra s’assurer d’avoir un résultat et qu’on a récupérer un fichier existant. Il faut vérifier que le fichier contient toujours l’occurrence.
Il faut poser une condition if le code retour est égal à 0 et if le fichier contient bien l’occurrence du mot.
On souhaite ajouter une commande supplémentaire pour ne garder que le contenu textuel de la page car curl récupère tout le codage html, on ne veut garder que le contenu textuel.
Lynx une commande unix qui est en fait un navigateur Web en ligne de commande comme firefox, internet explorer ou autre.Ce qui nous intéresse c’est une option qui s’appelle -dump pour duper, filtrer le text, il s’agit de filtrer le contenu textuel de l’url associé.
lynx-dump http://monsite.org
Il mémorise tous les liens présents dans la page en les numérotant entre crochets, et donne à la fin à quoi correspond le lien. L’option qui permet de ne pas avoir ces liens : -nolist, cela correspond mieux à ce qu’on recherche.
Il faut que toutes les sorties produites soient en UTF-8. Il faut s’assurer que la page est dans le bon code, comment déterminer l’encodage de la pages aspirée.
Si c’est de l’UTF8 : alors on peut faire une extraction et le contenu sera maintenu.
si ce n’est pas de l’UTF alors il faut reconnaitre l’encodage de la page, éventuellement utiliser lynx pour voir la page et convertir la page en utf8. Il faut déterminer le charset de fichier en sortie
-display_charset (permet de spécifier dans quel encodage sera le lynx – dump.
-displpay_charset=UTF-8 permettra de récupérer une page en UTF8. Si la page est en UTF : lynx -dump -display_charset=UTF8
si la page n’est pas UTF8 il faut essayer de détecter l’encodage de la page.on précise les options de lynx -display_charset=UTF8 et ensuite en sortie convertir la page en UTF8. (voir option)
Comment connaître l’encodage d’une page ?
Commande : file avec l’option -i file-i truc.html
Il nous faut connaître l’encodage de départ et l’encodage de sortie pour faire la conversion. Bien sûr on ne doit pas faire les traitement pour les pages qui ne donne sur rien.
à faire : Modifier le script pour :
1- si le retour curl nous donne une page qui ne donne sur rien, mettre en place une condition if pour que seule les pages existantes soient traitées.
2- Insérer une colonne pour signaler le codage de départ du texte aspiré.
Tester si ce n’est pas en UTF8 convertir en UTF8 els
Aujourd’hui le problème d’exécution du script pour obtenir une tableau numéroté et les lien des url a été résolu grâce à l’aide de mes camarades. En fait il fallait rendre le fichier exécutable en faisant chmod +x et ensuite appeler le fichier en faisant bash nomdufichier.sh sur le terminal.
J’ai donc pu avancer et compléter mon script en ajoutant la commande curl pour obtenir les pages aspirées d’une part et d’autre part ajouter un retour curl pour obtenir dans une autre colonne le résultat de cette commande si elle a réussi ou échoué.
Ensuite j’ai exécuté ce script dans le terminal et on obtient une pages html comme celle-ci :
Je suis encore loin de pouvoir faire ce qui a été demandé pour demain, c’est à dire modifier le script de la phase 1 de telle sorte que les tableaux générés comportent une cellule de numérotation de chaque url, les urls cliquables et une colonne comportant les pages aspirées de celles-ci.
J’ai un gros problème de variable qui m’empêche de continuer. En effet, j’ai modifié le script pour obtenir la première partie du travail tableau numéroté et liens cliquables. Mais j’obtiens un résultat affreux. Il y a 4 tableaux 2 fois les mêmes, ceux-ci sont tous numérotés 1 et les liens des tableaux sont tous numérotés 1.
Voici le script :
LLe script est correct mais le résultat ne l’est pas. Le terminal m’affiche un message d’erreur
nomduscript.sh 23: let: notfount
J’ai essayé d’exécuter le script en commençant par bash sh, mais le terminal me dit scirpt en binaire, impossible d’exécuter.
Qu’est-ce qui se passe ?
En réalité, j’obtiens bien une page html avec des tableaux, mais c’est affreux, rien à voir avec le résultat escompté.
Problème de variable ? de codage ?Il faut déjà que j’ajoute une balise <meta>
mais ça ne règle pas le problème de la variable.