Archive for novembre, 2011


Exercice : commande Iconv

 

 

 

 

 

 

 

 

Merci pour votre lecture et à la prochaine. 

Maknie attend votre(vos) commentaire(s)

Publicités

L’encodage des pages :

Il faut si la page n’est pas en UTF8 ,  faire le dump dans l’encodage détecté, et préciser la sortie du dump.

Il faut mettre un verrous :

Pour décoder l’encodage de départ et forcer l’encodage en UTF8 en sortie.

If  PAGES ASPIREE est en UTF8

Alors DUMP en UTF8

else ; Dump dans l’encodage détecté concesion de dump en UTF8

S’assurer de l’encodage avant de faire le Dump : détecter l’encodage, le mettre en utf8 et faire le dump.

Commande file -i   ..PAGES ASPIREES/1/13.html  , donne l’encodage du document.

on obtient charset=utf-8, on ne peut faire lynx que lorsqu’on sait dans qel code est écrit la page.

La commande CUT :

cut : dans le man, étant donné un fichier, extraire des colonnes dans ce fichier.

On considère ce qui est donné par file-i comme deux colonnes avec une première colonne pour ce qui se trouve avant = et une deuxième pour ce qui se trouve après.

Cut-f : définir les colonnes qui nous intéresse. ici la 2

cut-d : spécifier le marqueur de colonne (par exemple le délimiteur de colonne c’est le caractère = et la deuxième colonne c’est ce qui se trouve après)

On écrit :

on crée la variable encodage

encodage=$ ( file -i ../PAGES ASPIRES/1/13.html | cut -f2 -d= utf-8)

ensuite

echo $encodage

utf-8

Pour le lynx on fait ensuite :

lynx -dump -nolist -display_charset =$encodage

if [encodage== »utf-8]

else

encodage=$(………..)

lynx -d -u -cd = $encodage

Transformer par exemple un codage ISO  en UTF8 avec ICONV

3ème cas de figure : ICONV ne connaît pas l’encodage de départ et ne peut pas le convertir en UTF8

On se sert de la balise charset qui se trouve sur le code html dans la balise meta. Il faut aller chercher dans le fichier html aspirées le contenu de la chaine de caractère meta.

Commande egrep :

egrep : commande de filtrage, elle va chercher un motif exprimer entre guillemets (chaîne de caractères) dans un fichier. Cette commande permet d’extraire des lignes du fichier contenant la chaîne de caractères voulue.

egep « charset= »

exemple :

egrep « charset= » ../PAGES ASPIRES/1/13.html

<meta ……..charset=ISO>

egrep « charset= » ../PAGES ASPIRES/1/13.html |cut -f4 -d =

iso-8859

Il faut pouvoir isolé le charset on peut utiliser le cut mais il se peut que l’on ne sache pas combien de colonne il y a dans la balise meta, pb pour le cut Il faut arriver à dire que l’on veut isoler  l’endroit comportant le charset  pour prendre ce qu’il y a après.

puisque la comande cut-d n’accepte que des caractère unique comme marqueur de commande, on doit transformer la chaine de caractère « charset » en un seul caractère non ambigu pour s’en servir comme marqueur de colonne.

On utilise une nouvelle commande : sed

La commande SED :

sed : c’est un éditeur dans la ligne de commande qui permet de faire du rechercher remplacer directement dans la ligne de commande.

syntaxe :

on utilise par exemple  | ou @ comme caractère de remplacement.

Rechercher _Remplacer

sed -e  » s/charset/\@/ »   => \ permet de déspécialiser @  pour dire que c’est bien ce caractère si il est un opérateur d’expression régulière.

Sed a une syntaxe différente selon les expressions régulières, cela dépend de la puissance de la base d’expression régulière. La base minimale des opérateurs d’exp. régulières est a même pour pearl python,etc en linux.

Maintenant le marqueur de colonne c’est @ qui remplace la chaîne de caractère charset.

on utilise alors un deuxième cut en se servant de @ comme marqueur de colonne. Il ne faut pas utiliser un caractère qui correspond à un opérateur connu comme caractère de replacement, sinon, il faut le mettre entre guillemets.

egrep « charset= » ../PAGES ASPIRES/1/13.html |sed -e « s/charset/\@/ » | cut-d « @ » -f2

ou …………………………………………………………………………………………….cut- \@

on obtient ISO-5589-1″>

on ne veut que ISO-5589-1 donc on ajoute un sed pour supprimer tout ce qui a après le  »

sed -e « s/.\ ».*$// »

rechercher . (ie n’importe quel chaine de caractère) devant  » suivit de n’importe quel caractère en fin de ligne ($), remplacer par rien. On supprime tout ce qui suit le  »

Attention : si l’encodage n’est pas détecté, on ne lance pas de lynx. on bloque le traitement si l’aspiration s’est mal passé.

sort-u pour n’avoir qu’une seule occurrence de ce qu’on est en train de chercher.

Exercice : commande lynx

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Merci pour votre lecture et à la prochaine. 

Maknie attend votre(vos) commentaire(s)

par Samantha
 
 

Le retour curl donne 0 :

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.

La commande Lynx :

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

 

par Samantha
 

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é.

J’obtiens les script suivant:

Ensuite j’ai exécuté ce script dans le terminal et on obtient une pages html comme celle-ci :

Problème de variable

par Samantha

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.

par Samantha
 

Objectifs :

1. Utiliser le script fait-tableau version 2 utilisé la semaine dernière en cours et y apporter les modifications nécessaires pour que celui-ci soit adapter à notre travail.

2. Aux tableaux obtenus grâce au script fait-tableau-version2, il faudra ajouter une colonne supplémentaire pour les pages aspirées correspondantes. De plus il faudra également modifier le script pour pouvoir visualiser les erreurs.

Avant toute chose il faut donne la description des commandes : CURL et WGET.

Wget : sur mon terminal in english of course. Cette commande doit(peut) être suivie d’une option et doit être suivie d’une URL. Elle permet de télécharger à partir du web des données non intéractives. en fait elle permet d’extraire du web le contenu de certaines pages et cela se fait automatiquement tout seul. wget –  r permet de récupérer tous les liens en aspirants toutes l’arborescence du site alors que curl ne peut pas faire ça car il n’aspire que d’url en url . Pour wget on peut même signaler la longueur de l’arborescence que l’on veut aspirer.

Curl : n’existe pas dans les commandes disponibles sur mon terminal, je dois chercher sur le net pour pouvoir l’installer sur mon terminal.Je tape « sudo apt-get install curl » et la commande est installée. Dans le manuel : curl sert à transeférer une Url. elle est suivie d’une option et de l’url en question.

1. Le script ci-dessous et celui qui a été utilisé au cours du 9 novembre, il y figure les modifications permettant de travailler directement sur le répertoire contenant les urls et cela sans avoir à les mentionner, grâce à la commande READ.

Le script fonctionne très bien sur la machine de la fac, on obtient un tableau pour chaque fichier d’urls et ans chaque tableau, une cellule contentant  un numéro en face de chaque cellule de liens cliquable.

Cependant après avoir tout essayé, le script modifié ne fonctionne pas sur ma machine, on obtient trop de tableaux (4) et ils ne sont pas numérotés correctement. Ils sont tous numérotés 1 et idem pour les liens.

Je pense que c’est un problème de variable mais j’ignore lequel.

Les problèmes d’encodage :

Tout doit être encodé en UTF-8.  Le fichier doit être écrit en UTF-8 et il faut dire qu’on écrit en UTF-8 dans la balise <meta>. Pour certains caractères qui ne figurent pas dans l’ASCII, on peut utiliser des entités HTML indépendemment de l’encodage, par exemple pour écrire ° on écrit &deg; le navigateur traduit cette entité HTML en caractère correspondant. C’est du HTML qui passe au-dessus de l’encodage.

Autre solution : On peut utiliser des codes Unicode pour représenter les caractères problématiques.

 

Suite du cours : On veut créer un tableau qui comporte un colonne contenant les pages aspirées.

On peut recupérée la page que pointe le lien en faisant enregistrer sous, mais les navigateurs réinterprète le HTML et cela ne marche pas toujours.

On va donc utliliser une balise pour copier le contenu de ces pages.

La commande wget : elle récupère le fichier dans un serveur web distant, dans le répertoire à la racine et le ramène sur notre machine dans un endroit qu’on lui a indiqué en faisant une copie à distance.

idem pour curl.

wget renumérote les fichiers. On veut les stocker dans le répertoire pages aspirées.

-O : output

On va nommer le fichier de la page aspirées pour chaque url $i, ça permet d’associer le nom du fichier et de les distanguer, la pages aspirées 5 correspond à la 5è url.

On écrit donc wget http://www.ibm.com/index.html -O .

j= compteur des fichiers url donc des tableaux qui est initialisé à l’extérieur de la boucle.

i= est initialiser à l’ext. sur les urls, et à l’intérieur sur les tableaux.

Ce qui permet de dissocier numéro de tableau et numéro des urls c’est l’association tableau/urls : donc on crée un nom : $j-$i.html

wget http://www.ibm.com/index.html -O ./PAGES-ASPIREES/$j-$i.html

Ce serait mieux de créer dans le répertoire PAGES ASPIREES un fichier fichier pages aspirées par fichier url.

si on veut créer un fichier $j (numéro du fichier url) mkdir $j dans PAGES ASPIREES

wget se place avant la boucle for  nom in `cat $fic`

Dans notre script les urls porte le nom $nom

wget $nom -O ./PAGES-ASPIREES/$i.html; => récupéré l’url stocké dans la machine dans le fichier $i sous le répertoire PAGES ASPIREES

=>position par rapport au programme

On veut placer la page aspirée dans le tableaudes urls. Il faut donc créer une celleule supplémentaire dans notre tableau. Chemin relatif par rapport à l’endroit ou se trouve le fichier tableau dans lequel on veut faire référence au fichier de la page aspirée et non par rapport à l’endroit ou je me trouve.

echo « <tr><td>$i</td></tr><td><tr><a href=\ »$nom\ »>$nom</a></tr></td><tr><td>./PAGES-APSPIREES/$i.html</tr></td> » » >>$tableau;

La variable retourwget ou retourcurl : si la commande se passe bien, le $? porte la valeur 0 et si elle se passe mal elle porte la valeur 1,2,3..

Reagarder les descriptifs de curl et de wget.

Modifier le script pour obtenir le tableau de pages aspirées.

 

Correction du script de création tableau :

On corrige le script qui sert à créer le tableau avec un numéro en face de chaque urls.

comment éviter d’avoir à écrire à chaque fois l’exécution du script.

Redirection entrante pour éviter d’écrire à chaque fois le nom de fichier entrant et le nom de fichier de sortie. On va mettre en place une astuce pour permettre au script d’aller directement récupérer les informations sasns que l’utilisateur n’ait à entrer les noms de fichiers.

On écrit de manière définitive dans un fichier les valeurs des entrées et sorties qu’on veut générer :

./URLS/url-biocarburant-fr.txt

./TABLEAUX/tableau-urls-fr-kh.html

que l’on nomme input.txt

On modifie le script fait tableau en supprimant les deux lignes echo :

read fic;

read tablo;

echo « Le nom du fichier html ou stocker ces liens $tablo »;

Lorsqu’on exécute le fichier on le fait suivre du nom du fichier de stockage. La première ligne du script ‘read fic’ va lire le nom du fichier stockage :

sh fait-tableau-version1-input.sh   <  sh input.txt

=> redirection de flux.

Point HTML : pour faire une liste entrer la balise <ol> et pour numéroter les ligne on utilise la balise <li> pour avoir des points, on utilise la balise <ul>

On peut peut pas utiliser ce codage pour numéroter les lignes d’urls.

On utilise un code qui compte les lignes grâce à une variable. Première ligne i=1 et ajouter 1 à chaque fois qu’on passe une ligne.Puis on affiche la valeur du compteur au moment ou j’écris la ligne.

echo « <tr><td>$i>/td></tr>>td>tr>$nom</tr></td>

Puis il faut incrémenter c’est à dire ajouter 1 à i pour chaque ligne.  i=i+1

<=>i+=1  : incrémentation et assignation à la fois.

let »i+=1 »

ou i=` expr $i+1`;

Point HTML :

<td><a href= »http.//lien.com »> url1</a></td>

Pour notre script, on veut tous les liens soient clicables.

On écrit  echo « <tr><td>$i</td></tr><td><tr><a href=\ »$nom\ »>$nom</a></tr></td>

\ »$nom\ » : affiche la valeur de $nom, donc l’url.

Comment traiter du même coup les deux fichiers d’urls ?

Dans la boucle en input  on va écrire read rep puisqu’il ne s’agit plus d’un fichier mais d’un répertoire de fichiers.

On change le fichier input :

./URLS

../TABLEAUX/tableau-urls-fr-kh.html

en écrivant read rep;

onveut dire au programme : pour chacun des fichiers de rep on veut que la boucle soit lue.

=> à ce stade tout est écrit dans un seul tableau donc on doit ajouter :

read tablo;

echo « <html><body> » >$tablo;

=>on aura autant de tableau que de fichiers.

On remet une boucle for fic in ‘ls $rep` => ls liste le contenu du répertoire.

Dans cette boucle for, on va pouvoir traiter 1 fichier

echo « <tableau> »>>$tablo;

cat : il faut reconstruire le chemin du fichier que l’on veut traiter. par rapport à l’endroit où l’on se trouve. pour accéder au fichier que l’on veut traiter c’est $rep et pour traiter le fichier c’est $fic

`cat  $rep/$fic`

Si on n’indique pas le chemin, le terminal va afficher Error : aucun fichier de ce nom, car on ne lui aura pas indiqué le bon chemin.

par Samantha

Biocarburant-s : définition, aperçu socio-lexicologique.

Comme on l’a tous remarqué, le BIO a le vent en poupe. On veut manger bio, acheter bio, s’habiller bio, bref vivre bio.

Les carburants n’y échappent pas, la mode du bio s’y est faite aussi une place. Mais bio dans « biocarburant » et bio dans « un jus d’orange bio » recouvrent-ils la même réalité ?

Le préfixe « bio » trouve son origine dans le  mot grec  « bios » et désigne la vie, le vivant cf. biologie ( étude de ce qui est vivant). Il s’agit là de son sens étymologique. Cependant, le préfixe « bio » est devenu très prolifique en perdant ( en partie) son sens originel. La signification du préfixe bio a été détournée de deux façons :

  1. bio :  adj./nom, désigne un produit de consommation « issu de l’agriculture biologique », c’est-à-dire qui n’utilise pas (du moins c’est ce qu’ils prétendent) de produits chimiques, d’engrais,etc. Les produits issus de ce mode de production portent le label « bio ». Cette utilisation de bio montre que ce n’est plus un préfixe mais que c’est devenu un signe à part entière qui recouvre une autre réalité que le préfixe grec.
  2. bio :  joue ici le rôle d’un préfixe. Cependant, il s’est également éloigné du sens grec « le vivant ». Dans cette utilisation du préfixe bio, cela désigne tout ce qui est alternatif et qui a pour visée première la préservation de l’environnement, à partir de matériau que l’on trouve dans la nature. On pourrait classer cette acception de bio dans l’expression hyperonymique « Développement durable ».Ce préfixe fourni une multitude de dérivés : biocarburant, bioénergie, biotechnologie, biocosmétologie, etc.

On constate que bio est un polysème. Le signifié est unique (pro-environnementale, alternatif)mais en discours il s’actualise de manière différente et ne recouvre pas toujours la même réalité.

Pour distinguer les différentes acceptions qui se réalisent en discours, on peut s’appuyer à la fois sur un critère sémantique et sur un critère syntaxique. En effet, sémantiquement, « bio » n’a pas les même synonymes en 1. et en 2.et syntaxiquement ils ne se combinent pas de la même manière aux autres unités. En 1. « bio » est un adjectif (voire substantif) et caractérise un certain mode de consommation alternatif, il désigne à lui seul tout un domaine à part entière « le bio »; en 2 il a un comportement préfixale qui confère aux unités auxquelles il s’adjoint un caractère de « bon pour l’environnement, utilisant ce qui est vivant,alternatif,  utilise et produit autres choses que les produits toxiques et chimiques habituels. »

C’est cette deuxième acception de « bio » qui es à l’origine du substantif « biocarburant-s », qui désignerait les carburants dits alternatifs qui seraient moins nocifs pour l’environnement, qui répondraient à un cahier des charges qui pourrait laisser penser qu’ils seraient une solution durable à l’épuisement des ressources fossiles, au dérèglement climatique, au fiasco environnementale causé par les énergies traditionnelles bref « c’est bio, c’est bon ». Pour ce lexème en particulier, on perçoit tout de même une trace du sens grec « vivant », car « biocarburant » désigne les carburant produits à partir d’autre chose que du pétrole et que l’on trouve dans la nature (huile végétale, maïs, ethanol, etc.) ou recyclé.

Ci-dessus le fruit de ma réfléxion, ci-dessous, définition du dictionnaire :

Biocarburant : ou agrocarburant désigne un carburant liquide produit à partir de matériau non fossile issu de l’agriculture (maïs, colza, etc.). (cf wiki)

L’imaginaire collectif :

L’étude lexicologique n’explique pas toujours et n’est pas le seul à jouer un rôle dans la définition de « biocarburant-s ». Outre les définitions stricto sensu de biocarburant, l’imaginaire collectif contribue à coller à cette définition une forme de solution bienfaitrice pour l’environnement. Cela s’explique sans doute par la première acception de bio « propre, bon pour la santé, sans produit chimique ». Cette subjectivité qui se jette dans une définition purement factuelle, laisse deviner qu’il y a débat sur le sujet et qu’en réalité, bien que l’opinion collective semble penser que bio et donc biocarburant soit bien, sain et bon pour l’environnement, on est en fait face à une bataille des « pros and cons biocarburant ».

Pourquoi ? Les « biocarburants » ont commencé à se développer dans la lancée de ce qu’on a appelé les énergies renouvelables ( éoliennes, panneaux solaires, barrages hydroliques,etc.) pensant bien faire et trouver une alternative durable au pétrole. Sauf que, les pros « biocarburants » ont négligés quelques détails importants relevant du coût humain, financier, et spacio-temporel que ces énergies nécessitent. C’est là que les cons biocarburants ont fait leur entrée avec des arguments plutôt costauds (Greenpeace &Co) tels que « risque de famine, désastre écologique ».

Dans l’histoire, il n’y a pas de méchants, car chacun pense défendre la bonne cause.

C’est pourquoi, je me suis dit qu’une étude de ce mot pourrait être révélatrice de ce débat qui est toujours d’actualité. Un sorte de mini veille d’opinion, tout en essayant de mettre l’accent sur l’aspect linguistique, par exemple en s’attardant sur les contextes d’apparition du mot, les adjectifs qui les qualifient, ses réalisations syntaxiques et les différentes valeurs sémantiques qu’il recouvre.

Alea jacta est.