Formulaire de contact

 

Bonne nouvelle : les sites inaccessibles (Pourquoi ? cf le blog précédent) se débloquent... enfin, à condition que nous utilisions une VPN...


Récapitulatif de la séance 6 (25/10/2017)

 

PLAN DU COURS

3 QUESTIONS

  1. COMMENT S'ASSURER QUE LES TRAITEMENTS SE DÉROULENT BIEN ?
  2. COMMENT EXTRAIRE LE TEXTE BRUT DE CHACUNE DES URLS ? (FAUT-IL TRAVAILLER SUR LES PAGES ASPIRÉES OU FAIRE AUTREMENT ?
  3. COMMENT FAIRE EN SORTE QUE LES SORTIES TEXTUELLES PRODUITES SOIENT BIEN ENCODÉES EN UTF-8 ?

N TABLEAUX DE 7 COLONNES

 


Q1. COMMENT S'ASSURER QUE LES TRAITEMENTS SE DÉROULENT BIEN ?

1.1 L'exécution de commandes se passe bien.

  • Rédirection de stdERR vers un fichier log; puis vérifier ce fichier.
    Désavantages : lourd, complexe
  • Code de retour de la dernière commande (ou du dernier pipeline) $?
    valeur == 0; => l'exécution se passe bien
    valeur != 0; => err
  • EX1 :
    ~/Documents/ProjetEncadre20172018/cours/Seance6$ ls | wc -l
    4
    ~/Documents/ProjetEncadre20172018/cours/Seance6$ echo $?
    0
    EX2 :
    ~/Documents/ProjetEncadre20172018/cours/Seance6$ on_fabrique_cette_commande p3.html
    on_fabrique_cette_commande: command not found
    ~/Documents/ProjetEncadre20172018/cours/Seance6$ echo $?
    127

    Désavantages : la bonne exécution des commandes ne veut pas dire que le résultat soit bon

1.2 Le résultat de commandes correspond à l'attente.

En l'occurrence,
- il faut vérifier que l'entrée soit en bon état. Précisément, il faut que les URLs soient téléchargeables ;
- il faut s'assurer que les sorties (notamment les textes bruts) soient en utf-8 (à expliquer infra).

Attente : Réponse de requête, ie. code d'état 200 OK

Solution 1 : récupérer l'entête des fichiers d'URLs.
cURL -I (--head)récupérer uniquement l'entête (ou avec [OPTION] -v, --verbose, plus ou moins pareille) ;
-L relancer la requête de curl en cas de rédirections.
La première ligne de chaque réponse est ce dont nous avons besoin.

EX :
~/Documents/ProjetEncadre20172018/cours/Seance6$ curl -IL http://www.plurital.org
HTTP/1.1 301 Moved Permanently
Server: Varnish
Location: http://www.tal.univ-paris3.fr/plurital/
Content-Type: text/html; charset=utf-8
Cache-Control: max-age=10800
Content-Length: 315
Accept-Ranges: bytes
Date: Sun, 29 Oct 2017 21:02:31 GMT
Via: 1.1 varnish
Age: 27
Connection: keep-alive

HTTP/1.1 200 OK
Date: Sun, 29 Oct 2017 21:02:31 GMT
Server: Apache
Last-Modified: Tue, 12 Sep 2017 15:49:04 GMT
ETag: "6a305-44cb-558fffb905c00"
Accept-Ranges: bytes
Content-Length: 17611
Vary: Accept-Encoding
Content-Type: text/html
Connection: keep-alive 

Désavantages : en cas de rédirections, plusieurs réponses

Solution 2 : Récupérer uniquement le code d'état.
Soit extraire à partir du résultat supra,
soit utiliser [OPTION] -w (--write-out) pour obtenir le code.

EX1 :
~/Documents/ProjetEncadre20172018/cours/Seance6$ curl -sIL http://www.plurital.org| egrep -i 'HTTP\/[0-9]\.[0-9]' | awk '{print $2}'
301
200

Explication :
le motif'HTTP\/[0-9]\.[0-9]'correspond aux protocaux HTTP/0.9 HTTP/1.1 HTTP/2.0 etc.
awk '{print $2} imprimer la deuxième "colonne" d'une ligne du type suivant : HTTP/1.1 200 OK

EX2 :
~/Documents/ProjetEncadre20172018/cours/Seance6$ curl -sL --write-out "\n%{http_code}\n" http://www.plurital.org -o t.html

200

Q2. COMMENT EXTRAIRE LE TEXTE BRUT DE CHACUNE DES URLS ? (FAUT-IL TRAVAILLER SUR LES PAGES ASPIRÉES OU FAIRE AUTREMENT ?

Dans cette séance, nous avons utilisé la commande lynx avec ses options -dump et -nolist pour ce faire.
lynx est un navigateur d'informations distribuées à portée générale pour le World Wide Web.
[OPTION] -dump décharger la sortie formatée du fichier par défaut
[OPTION] -nolist désactiver la fonctionnalité de listage des liens dans les déchargements

Q3. COMMENT FAIRE EN SORTE QUE LES SORTIES TEXTUELLES PRODUITES SOIENT BIEN ENCODÉES EN UTF-8 ?

Etapes :
  • tester l'encodage
  • si necessaire, modifier l'encodage (à détailler dans le prochain blog)
Dans cette séance, nous avons détaillé la première étape.

Solution 1 : tester localement des texts déchargés

Méthode : la commande file -ipermettant de connaître le type d’un fichier, y compris son encodage.

EX :
~/Documents/ProjetEncadre20172018/PROJET_MOT_SUR_LE_WEB$ for f in `ls ./PAGES-ASPIREES`; do file -i ./PAGES-ASPIREES/$f; done
./PAGES-ASPIREES/1-1.html: text/html; charset=utf-8
./PAGES-ASPIREES/1-2.html: text/html; charset=utf-8
./PAGES-ASPIREES/1-3.html: text/html; charset=utf-8
./PAGES-ASPIREES/1-4.html: text/html; charset=utf-8
./PAGES-ASPIREES/2-1.html: text/html; charset=us-ascii
./PAGES-ASPIREES/2-2.html: text/html; charset=utf-8
./PAGES-ASPIREES/2-3.html: text/html; charset=utf-8
./PAGES-ASPIREES/2-4.html: text/html; charset=us-ascii
./PAGES-ASPIREES/3-1.html: text/html; charset=utf-8
./PAGES-ASPIREES/3-2.html: text/html; charset=utf-8
./PAGES-ASPIREES/3-3.html: text/html; charset=utf-8
./PAGES-ASPIREES/3-4.html: text/html; charset=utf-8

Solution 2 : avant de décharger un fichier, tester l'encodage.

Méthode : toujours cULR -Icar l'information sur l'encodage est également intégrée dans l'entête. Nous pouvons simplement retrouver cette information à l'aide d'une RegExp. (cf exo infra)

Désavantages : au cas où l'entête ne retourne aucune information sur l'encodage, il faut fouiller dans l'ensemble d'un fichier html le balise <meta>contenant son "charset".


CREATION DE N TABLEAUX DE 7 COLONNES

L'arborescence de notre répertoire de travail :
~/Documents/ProjetEncadre20172018/PROJET_MOT_SUR_LE_WEB$ tree -d
.
├── CONTEXTES
├── DUMP-TEXT
├── IMAGES
├── PAGES-ASPIREES
├── PROGRAMMES
├── TABLEAUX
└── URLS

7 directories

Paramètres
~/Documents/ProjetEncadre20172018/PROJET_MOT_SUR_LE_WEB$ cat ./PROGRAMMES/Seance6_parametres
./URLS
./TABLEAUX/Seance6_Tableaux
./PAGES-ASPIREES
./DUMP-TEXT

MISE A JOUR de la version 25/10/2017

i. ajouter la colonne Etat_de_lien (Réponse de requête)
ii. ajouter la colonne Code_retour (le http_code de la Réponse de requête)
iii. ajouter la colonne encodage (pour l'instant, ne récupérer que l'encodage à partir de l'entête à l'aide de curl -I)
iv. ajouter la colonne Dump-text
v. suprimer le table_iterator ; pour remplacer, lire le nom du fichier d'URLs
vi. ajouter une paramètre rep_dump_text pour stocker des texts dump.

 

3.1 Script


#!bin/bash
#PATH=$PATH:~/home/.../PROJET_MOT_SUR_LE_WEB
#./PROGRAMMES/Seance6-CreationTableau_7cols.sh
#PARAMETRE: ./PROGRAMMES/Seance6_parametres
#EXECUTION
#bash ./PROGRAMMES/Seance6-CreationTableau_7cols.sh < ./PROGRAMMES/Seance6_parametres
#VERSION 20171025
#MISE A JOURS :
#   i ajouter la colonne Etat_de_lien (Réponse de requête)
#   ii ajouter la colonne Code_retour (le http_code de la Réponse de requête)
#   iii ajouter la colonne encodage (pour l'instant, ne récupérer que l'encodage
#       à partir de l'entête à l'aide de curl -I)
#   iv ajouter la colonne Dump-text
#   v suprimer le table_iterator ; pour remplacer, lire le nom du fichier d'URLs
#   vi ajouter une paramètre rep_dump_text pour stocker des texts dump
###############################################################################
###############################################################################
###############lire des paramètres dans le fichier Seance6_parametres##########
echo "Création d'une page html contenant trois tableaux ";
read rep; 
read table;
read rep_page_aspiree;
read rep_dump_text;

echo "INPUT : nom du répertoire contenant des fichiers d'URLs : $rep"; 
echo "OUTPUT : nom du fichier html contenant des tableaux : $table";
echo "OUTPUT : nom du répertoire stockant les pages aspirées : $rep_page_aspiree";
echo "OUTPUT : nom du répertoire stockant les texts dump : $rep_dump_text";

echo -e "\n\n\n\n\nVeuillez patienter quelques instants.\n\n\nTravail en mode silence...\n\n\n";

################################################################################

echo -e "<!DOCTYPE html>\n<html>\n\t<head>\n\t\t<title>Tableau URLs</title>\n\t\t<meta charset = 'utf-8'>\n\t</head>\n" > $table;
echo -e "\t<body>\n\t\t<h2 align=\"center\">Tableaux des URLs de teste</h2>" >> $table;

###############################2 iterateurs,1 pour tableau, 1 pour ligne########
#table_iterator=0;

#La première boucle permettant de lire fichier par fichier et de créer n 
#tableaux (n = le nombre de fichiers dans le répertoire ./URLS)
for file in `ls $rep`
do  
    #let "table_iterator = table_iterator++";
    echo -e "\t\t<table border = \"1\" bordercolor = \"#47baae\" width = \"80%\" align = \"center\">" >> $table;
    echo -e "\t\t\t<tr height = \"30px\" bgcolor = \"#47baae\"><th colspan = \"7\">Tableau-$file</th></tr>" >> $table;
    echo -e "\t\t\t<tr>\n\t\t\t<th width = \"5%\" align = \"center\">N°</th>" >> $table;
    echo -e "\t\t\t\t<th width = \"20%\" align = \"center\">Etat_de_lien</th>" >> $table;
    echo -e "\t\t\t\t<th width = \"15%\" align = \"center\">Code_retour</th>" >> $table;
    echo -e "\t\t\t\t<th width = \"15%\" align = \"center\">Encodage</th>" >> $table;
    echo -e "\t\t\t\t<th width = \"15%\" align = \"center\">Lien</th>" >> $table;
    echo -e "\t\t\t\t<th width = \"15%\" align = \"center\">Page_aspirée</th>" >> $table;
    echo -e "\t\t\t\t<th width = \"15%\" align = \"center\">Dump-text</th>\n\t\t\t</tr>" >> $table;
    
    line_iterator=0;
    # la seconde boucle permettant de traiter ligne par ligne des urls  dans chaque fichier
    for line in `cat $rep/$file`
    do
        let line_iterator++;
        #2 variables, 1 pour la page aspirée, 1 pour le text dump
        page="$rep_page_aspiree/$file-aspiree-$line_iterator.html";
        dump="$rep_dump_text/$file-dump-$line_iterator";
        
        #Demande la réponse de requête,  [OPTION]de cURL -s: en mode silence;  
        #-I:récupérer seulement l'entête info de HTTP; -L: relancer la requête de curl 
        #en cas de rédirections; le motif 'HTTP\/[0-9]\.[0-9]'correspond aux protocaux 
        #HTTP/0.9 HTTP/1.1 HTTP/2.0 etc.
        #awk '{print $2}  imprimer la deuxième "colonne" dans une ligne du type suivant : HTTP/1.1 200 OK, ie. le http_code
        # sed 's/\n/\t/g' et 's/\r/\t/g' remplacer des passages à la lignes par une tabulation pour que plusieurs valeurs soient dans la même ligne
        lien_statut=`curl -sIL $line|egrep -i 'HTTP\/[0-9]\.[0-9]'| awk '{print $0}' | sed  's/\n/\t/g'|sed  's/\r/\t/g'`; 
        
        #Demander le http_code (une autre manière que la RegExp utilisée supra),
        #aspirer la page html et la rédiriger avec le nom $page
        code_retour=`curl -sL -o $page -w "%{http_code}" $line`;
        echo "Etat de lien : $lien_statut"; #test, à enlever après
        echo "Code_retour : $code_retour"; #test, à enlever après
        echo "################################################################";
        
        #Demander l'encodage  
        #RegExp: ?<=   lookbehind;  ?=  lookahead
        #$0 : l'ensemble de la ligne qui correspond à l'argument grep;
        #tolower() transmettre en miniscule
        #alternative: démimiter par  =
        #encodage=`curl -sIL $line |egrep -i "charset"|cut -d"=" -f2`;
        encodage=`curl -sIL $line|grep -i -Po '(?<=charset=).+(?=\b)' |awk '{print tolower($0)}'`;
        
        #Récupérer le text, ingnorer des urls dans la page
        lynx -dump -nolist $line > $dump;
        
        
        echo -e "\t\t\t<tr>\n\t\t\t\t<td align = \"center\">$line_iterator</td>" >> $table;
        echo -e "\t\t\t\t<td align = \"center\">$lien_statut</td>" >> $table;
        echo -e "\t\t\t\t<td align = \"center\">$code_retour</td>" >> $table;
        echo -e "\t\t\t\t<td align = \"center\">$encodage</td>" >> $table;
        echo -e "\t\t\t\t<td align = \"center\"><a href = '$line'>$file-lien-$line_iterator</a></td>" >> $table;
        echo -e "\t\t\t\t<td align = \"center\"><a href = ".$page">$file-aspiree-$line_iterator</a></td>" >> $table;
        echo -e "\t\t\t\t<td align = \"center\"><a href = ".$dump">$file-dump-$line_iterator</a></td>\n\t\t\t</tr>" >> $table;
    done;
    
    echo -e "\t\t</table>\n" >> $table;
    echo -e "\t\t<br/>\n\t\t<hr width = \"80%\" color = \"#47baae\" cb 9 size = \"10\">\n\t\t<br/>" >> $table; #horizontal rule
done;

echo -e "\t</body>\n</html>" >> $table;
echo "Fin de création des tableaux.";

Exécution

~/Documents/ProjetEncadre20172018/PROJET_MOT_SUR_LE_WEB$ bash ./PROGRAMMES/Seance6-CreationTableau_7cols.sh < ./PROGRAMMES/Seance6_pa
rametres 
Création d'une page html contenant trois tableaux 
INPUT : nom du répertoire contenant des fichiers d'URLs : ./URLS
OUTPUT : nom du fichier html contenant des tableaux : ./TABLEAUX/Seance6_Tableaux
OUTPUT : nom du répertoire stockant les pages aspirées : ./PAGES-ASPIREES
OUTPUT : nom du répertoire stockant les texts dump : ./DUMP-TEXT





Veuillez patienter quelques instants.


Travail en mode silence...



Etat de lien : HTTP/1.1 200 OK 
Code_retour : 200
################################################################
Etat de lien : HTTP/1.1 200 OK 
Code_retour : 200
################################################################
Etat de lien : HTTP/1.1 200 OK 
Code_retour : 200
################################################################
Etat de lien : HTTP/1.1 200 OK 
Code_retour : 200
################################################################
Etat de lien : HTTP/1.1 200 OK 
Code_retour : 200
################################################################
Etat de lien : HTTP/1.1 200 OK 
Code_retour : 200
################################################################
Etat de lien : HTTP/1.1 200 OK 
Code_retour : 200
################################################################
Etat de lien : HTTP/1.1 200 OK 
Code_retour : 200
################################################################
Etat de lien : HTTP/1.1 301 Moved Permanently 
HTTP/1.1 200 OK 
Code_retour : 200
################################################################
Fin de création des tableaux. 

 


3.2 Explication

  • Créer 2 variables, 1 pour la page aspirée, 1 pour le text déchargé
page="$rep_page_aspiree/$file-aspiree-$line_iterator.html";
dump="$rep_dump_text/$file-dump-$line_iterator";
  • Demande la réponse de requête,
    [OPTION] de cURL -s : en mode silence;
    -I: récupérer seulement l'entête info de HTTP;
    -L : relancer la requête de curl en cas de rédirections;
    le motif 'HTTP\/[0-9]\.[0-9]'correspond aux protocaux HTTP/0.9 HTTP/1.1 HTTP/2.0etc.
    awk '{print $2} imprimer la deuxième "colonne" dans une ligne du type suivant : HTTP/1.1 200 OK, ie. le http_code
    sed 's/\n/\t/g'et sed 's/\r/\t/g' remplacer des passages à la lignes par une tabulation pour que plusieurs valeurs soient dans la même ligne
lien_statut=`curl -sIL $line|egrep -i 'HTTP\/[0-9]\.[0-9]'| awk '{print $0}' | sed  's/\n/\t/g'| sed  's/\r/\t/g'`; 
  • Demander le http_code (une autre manière que la RegExp utilisée supra), aspirer la page html et la rédiriger avec le nom $page
        code_retour=`curl -sL -o $page -w "%{http_code}" $line`;
  • Demander l'encodage
    RegExp: ?<= lookbehind; ?= lookahead
    $0 : l'ensemble de la ligne qui correspond à l'argument grep;
    tolower() transmettre en miniscule
encodage=`curl -sIL $line|grep -i -Po '(?<=charset=).+(?=\b)'| awk '{print tolower($0)}'`;

Alternative : délimiter par =
encodage=`curl -sIL $line |egrep -i "charset"|cut -d"=" -f2`;

3.3 RESULTATS

  • Tableaux
    seance6_tbl_7cols_beta

  • Fichier html
    seance6_src_html_beta

  • Une des pages déchargées en chinois (colonne 7)
    seance6_txt-dump_cn

  • Une des pages déchargées en français (colonne 7)
    seance6_txt-dump_fr

 

REFERENCES

Total comment

Auteurs

AI_PLURITAL

Récapitulatif de la séance 5 (18/10/2017)

 

PLAN


  2 outils

  3 commandes

  n tableaux de 3 colonnes



I Présentation de 2 outils

    GroMoteur et Le Trameur

1.1 GroMoteur 

    Outil de création de corpus. Il permet de crawler des pages à partir des listes d'URLs. En fait, la première phase de notre projet est de simulier en gros un GroMoteur.

1.2 Le Trameur

    Nous allons utiliser cet outil pour analyser notre corpus à la fin du projet.
    Cette séance, il s'agit notamment de tester nos fichier d'urls avec le module petitMoteur dans Le Trameur.
    Nous l'avons testé sur Windows.

   




    Après avoir récupéré ce fichier de textes aspirés, nous modifions le "passage à la ligne" du format Windows au format Unix pour des traîtements éventuels.
    Les textes aspirés sont entourés d'une pair de balise <url> et </url>.
   


II Présentation de 3 commandes

   
 wget, curl et diff

2.1 wget

    Description : wget est une commande non interactif pour télécharger des fichiers depuis le Web. Il rédirige par défaut le fichier dans le répertoire courant.

    Utilisation : wget [OPTION] [URL]

    Exemple : Nous l'avons testé avec l'url de page d'accueil du Trameur. Cette page est rédirigée par défaut dans notre répertoire courant avec son nom original. 


~/Documents/20172018-S1/Projet_Encadre/COURS/Seance1018$ wget http://www.tal.univ-paris3.fr/trameur/
--2017-10-22 20:04:23--  http://www.tal.univ-paris3.fr/trameur/
Resolving www.tal.univ-paris3.fr (www.tal.univ-paris3.fr)... 195.221.71.50
Connecting to www.tal.univ-paris3.fr (www.tal.univ-paris3.fr)|195.221.71.50|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 95057 (93K) [text/html]
Saving to: ‘index.html’

index.html                                                  100%[==========================================================================================================================================>]  92,83K  --.-KB/s    in 0,06s   

2017-10-22 20:04:23 (1,50 MB/s) - ‘index.html’ saved [95057/95057]

~/Documents/20172018-S1/Projet_Encadre/COURS/Seance1018$ ls
index.html  Notes1018.odt



2.2 curl

    Description : curl est une commande pour télécharger des fichiers et d'afficher son contenu dans la console, i.e. stdOUT. C'est-à-dire que nous avons besoins de le rédiriger si necessaire.

    Utilisation : curl [OPTION] [URL]

    Exemple: Nous l'avons testé avec le même url que nous avons utilisé sufra. Nous l'avons rédirigé avec un nouveau nom dans le même répertoire pour fair une comparaison à l'étape suivante.


~/Documents/20172018-S1/Projet_Encadre/COURS/Seance1018$ curl http://www.tal.univ-paris3.fr/trameur/ > curl_test.html
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 95057  100 95057    0     0  93465      0  0:00:01  0:00:01 --:--:-- 93560
~/Documents/20172018-S1/Projet_Encadre/COURS/Seance1018$ ls
curl_test.html  index.html  Notes1018.odt



2.3 diff

    Description : comparer des fichiers ligne par ligne

    Utilisation : diff [OPTION] [FICHIER1] [FICHIER2[OPTION] [URL]] ...

    Exemple : Nous avons comparé les deux fichiers que nous avons eu récupérés des étapes précédentes. Il ne renvoit aucune information, ce qui veut dire que les deux fichiers sont identiques. 


~/Documents/20172018-S1/Projet_Encadre/COURS/Seance1018$ diff index.html curl_test.html 
~/Documents/20172018-S1/Projet_Encadre/COURS/Seance1018$ 



III Création de n tableaux de 3 colonnes

 

Les consignes :

    -. Il faut lire un fichier d'URLs puis plusieurs ==> réalisé le 18/10/2017

    -. Il faut afficher chaque URL dans une ligne d'un tableau (1 colonne au départ) ==> réalisé le 12/10/2017 cf le blog précédent


    -. Il faut ajouter une colonne pour numéroter les URLs ==> réalisé le 18/10/2017


    -. Il faut créer un lien hypertexte pour chaque URL ==> réalisé le 12/10/2017 cf le blog précédent


    -. Il faut ajouter une colonne contenant "la page aspirée" pour chaque URL ==> réalisé le 18/10/2017


Note : Nous avons remarqué que de multiples tentatives de téléchargement avec des commandes risquaient un blocage par certains sites. Nous avons donc décidé de ne tester notre script qu'avec quelques petities listes d'urls aléatoires. Une fois que nous aurions finalement complété ce script, nous allons l'exécuter avec nos propres fichiers d'urls.


L'arborescence de notre répertoire de travail : 

~/Documents/20172018-S1/Projet_Encadre/PROJET_MOT_SUR_LE_WEB$ tree -d
.
├── CONTEXTES
├── DUMP-TEXT
├── IMAGES
├── PAGES-ASPIREES
├── PROGRAMMES
├── TABLEAUX
└── URLS

7 directories



EXECUTION : 

~/Documents/20172018-S1/Projet_Encadre/PROJET_MOT_SUR_LE_WEB$ bash ./PROGRAMMES/CreationTableaux_v_3col.sh < ./PROGRAMMES/parametres
Création d'une page html contenant trois colonnes
INPUT : Le nom du repertoire contenant les fichiers d'url : ./URLS
OUTPUT : Le nom du fichier html en sortie : ./TABLEAUX/Tableaux_URL
OUTPUT : Le nom du répertoire stockant les pages aspirées : ./PAGES-ASPIREES
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  101k    0  101k    0     0   261k      0 --:--:-- --:--:-- --:--:--  262k
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  100k    0  100k    0     0   418k      0 --:--:-- --:--:-- --:--:--  420k
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Toal   Spent    Left  Speed
100 53158    0 53158    0     0  94652      0 --:--:-- --:--:-- --:--:-- 94587
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 97507  100 97507    0     0  81807      0  0:00:01  0:00:01 --:--:-- 81869
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 47390    0 47390    0     0  57423      0 --:--:-- --:--:-- --:--:-- 57372
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 43151    0 43151    0     0  53233      0 --:--:-- --:--:-- --:--:-- 53207
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  102k    0  102k    0     0   161k      0 --:--:-- --:--:-- --:--:--  161k
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  222k    0  222k    0     0   918k      0 --:--:-- --:--:-- --:--:--  922k
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 87944  100 87944    0     0  79323      0  0:00:01  0:00:01 --:--:-- 79371
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  101k    0  101k    0     0   445k      0 --:--:-- --:--:-- --:--:--  447k
Fin de création des tableaux.


Résultat (partiel) : les pages aspirées


~/Documents/20172018-S1/Projet_Encadre/PROJET_MOT_SUR_LE_WEB$ ls ./PAGES-ASPIREES/
1-1.html  1-2.html  2-1.html  2-2.html  2-3.html  2-4.html  3-1.html  3-2.html  3-3.html  3-4.html

Explication du script

Initiation des 3 variables  à partir du fichier "parametres"

echo "Création d'une page html contenant trois colonnes";
read repertoire;
read nom_html;
read repertoire_aspiree;
echo "INPUT : Le nom du repertoire contenant les fichiers d'url : $repertoire";
echo "OUTPUT : Le nom du fichier html en sortie : $nom_html";
echo "OUTPUT : Le nom du répertoire stockant les pages aspirées : $repertoire_aspiree";



Initiation du compteur

compteur_tableaux=1; 


compteur_lien=1; 




2 boucles : 

La boucle externe permet de lire fichier par fichier et de créer n tableaux (n = le nombre de fichiers dans le répertoire ./URLS)
La boucle interne permet de traiter ligne par ligne des urls dans chaque fichier


for fichier_url in `ls $repertoire`     # la première boucle permettant de lire fichier par fichier et de créer n tableaux (n = le nombre de fichiers dans le répertoire ./URLS)
do
    echo -e "\t<table border=\"1\" align=\"center\" width=\"66%\" bordercolor=\"#47baae\">" >> $nom_html;
    echo -e "\t\t<tr bgcolor=\"#47baae\"><th colspan=\"3\">\n\t\t\t$fichier_url</th></tr>" >> $nom_html;
    echo -e "\t\t<tr>\n\t\t\t<th align=\"center\" width\"10%\">N°</th>" >> $nom_html;
    echo -e "\t\t\t<th width=\"80%\" align=\"center\">Lien</a></th>" >> $nom_html;
    echo -e "\t\t\t<th align=\"center\">Page Aspirée</th>\n\t\t</tr>" >> $nom_html;
    
    compteur_lien=1;
    for lien in `cat $repertoire/$fichier_url`      # la seconde boucle permettant de traiter ligne par ligne des urls dans chaque fichier
    do
        curl $lien > $repertoire_aspiree/$compteur_tableaux-$compteur_lien.html;      # aspirer des pages html et les rédiriger dans le répertoire ./PAGE-ASPIREES
        ###### écrire ligne par ligne et colonne par colonne le numéro, l'url et le lien vers la page aspirée dans chaque tableau ######
        echo -e "\t\t<tr >\n\t\t\t<td align=\"center\">$compteur_lien</td>" >> $nom_html;
        echo -e "\t\t\t<td><a href="$lien">$lien</a></td>" >> $nom_html;
        echo -e "\t\t\t<td align=\"center\"><a href=".$repertoire_aspiree/$compteur_tableaux-$compteur_lien.html">$compteur_tableaux-$compteur_lien</a></td>\n\t\t</tr>\n" >> $nom_html;
        let compteur_lien++;
    done    
    echo "</table>" >> $nom_html;
    echo -e "<hr width=\"66%\" size=\"6\" color=\"#47baae\"/>" >> $nom_html;    #horizontal rule
    let compteur_tableaux++;
done



Aspirer des pages html et les rédiriger dans le répertoire ./PAGE-ASPIREES


 curl $lien > $repertoire_aspiree/$compteur_tableaux-$compteur_lien.html;      # aspirer des pages html et les rédiriger dans le répertoire ./PAGE-ASPIREES



Ecrire ligne par ligne et colonne par colonne le numéro, l'url et le lien vers la page aspirée dans chaque tableau

echo -e "\t\t<tr >\n\t\t\t<td align=\"center\">$compteur_lien</td>" >> $nom_html;
echo -e "\t\t\t<td><a href="$lien">$lien</a></td>" >> $nom_html;
echo -e "\t\t\t<td align=\"center\"><a href=".$repertoire_aspiree/$compteur_tableaux-$compteur_lien.html">$compteur_tableaux-$compteur_lien</a></td>\n\t\t</tr>\n" >> $nom_html;



Incrémenter le compteur à la fin de chaque itération

let compteur_tableaux++;


let compteur_lien++;


MISE A JOUR de la version 18/10/2017

#   i.      lire plusieurs fichiers d'urls
#   ii.     stocker les urls dans des tableaux différents 
#   iii.    ajouter deux nouvelles colonnes (numéro et page_aspirée)
#   iv.     ajouter un paramètre pour stocker des pages aspirées


Script complet


#!/bin/bash
#PATH=$PATH:~/home/.../PROJET_MOT_SUR_LE_WEB
#./PROGRAMMES/CreationTableaux_v_3col.sh
#EXECUTION
#bash ./PROGRAMMES/CreationTableaux_v_3col.sh < ./PROGRAMMES/parametres
#VERSION 20171018
#MISE A JOURS :
#   i.      lire plusieurs fichiers d'urls
#   ii.     stocker les urls dans des tableaux différents  
#   iii.    ajouter deux nouvelles colonnes (numéro et page_aspirée)
#   iv.     ajouter un paramètre pour stocker des pages aspirées
################################################################
#parametre :  ./PROGRAMMES/parametres
################################################################
echo "Création d'une page html contenant trois colonnes";
read repertoire;
read nom_html;
read repertoire_aspiree;
echo "INPUT : Le nom du repertoire contenant les fichiers d'url : $repertoire"; 
echo "OUTPUT : Le nom du fichier html en sortie : $nom_html";
echo "OUTPUT : Le nom du répertoire stockant les pages aspirées : $repertoire_aspiree";

######debut de la page HTML finale ######
echo  '<!DOCTYPE html>' >$nom_html;
echo -e "<html>\n<head>\n\t<meta charset=\"utf8\">\n\t<title>Tableaux de liens</title>\n</head>\n<body>" >> $nom_html; 
echo -e "\t<h2 align = \"center\">Tableau de liens</h2>" >> $nom_html;


###### 2 iterateurs : 1 pour tableau (compteur_tableaux), 1 pour ligne (compteur_lien) ######
compteur_tableaux=1;
for fichier_url in `ls $repertoire`     # la première boucle permettant de lire fichier par fichier et de créer n tableaux (n = le nombre de fichiers dans le répertoire ./URLS)
do
    echo -e "\t<table border=\"1\" align=\"center\" width=\"66%\" bordercolor=\"#47baae\">" >> $nom_html;
    echo -e "\t\t<tr bgcolor=\"#47baae\"><th colspan=\"3\">\n\t\t\t$fichier_url</th></tr>" >> $nom_html;
    echo -e "\t\t<tr>\n\t\t\t<th align=\"center\" width\"10%\">N°</th>" >> $nom_html;
    echo -e "\t\t\t<th width=\"80%\" align=\"center\">Lien</a></th>" >> $nom_html;
    echo -e "\t\t\t<th align=\"center\">Page Aspirée</th>\n\t\t</tr>" >> $nom_html;
    
    compteur_lien=1;
    for lien in `cat $repertoire/$fichier_url`      # la seconde boucle permettant de traiter ligne par ligne des urls dans chaque fichier
    do
        curl $lien > $repertoire_aspiree/$compteur_tableaux-$compteur_lien.html;      # aspirer des pages html et les rédiriger dans le répertoire ./PAGE-ASPIREES
        ###### écrire ligne par ligne et colonne par colonne le numéro, l'url et le lien vers la page aspirée dans chaque tableau ######
        echo -e "\t\t<tr >\n\t\t\t<td align=\"center\">$compteur_lien</td>" >> $nom_html;
        echo -e "\t\t\t<td><a href="$lien">$lien</a></td>" >> $nom_html;
        echo -e "\t\t\t<td align=\"center\"><a href=".$repertoire_aspiree/$compteur_tableaux-$compteur_lien.html">$compteur_tableaux-$compteur_lien</a></td>\n\t\t</tr>\n" >> $nom_html;
        let compteur_lien++;
    done    
    echo "</table>" >> $nom_html;
    echo -e "<hr width=\"66%\" size=\"6\" color=\"#47baae\"/>" >> $nom_html;    #horizontal rule
    let compteur_tableaux++;
done

###### fin de la page HTML finale ######
echo -e "</body>\n</html>" >> $nom_html;
echo "Fin de création des tableaux.";


RESULTATS

Tableaux



Fichier html 


Une des pages originales (colonne 2)


Le fichier local correspondant (colonne 3 : page aspirée)





Références





https://www.tutorialspoint.com/unix_commands/curl.htm 

http://www.linux-france.org/article/man-fr/man1/diff-1.html

Total comment

Auteurs

AI_PLURITAL

Récapitulatif de la séance 4 (11/10/2017)





PLAN DU COURS

     Encodage et format de fichier
     Rappel HTML
     Exercice : Création d’une page html contenant un tableau d’url avec un script bash


I Encodage et format de fichier

1.1 encodage
L’ensemble de travail est basé sur utf-8 pour éviter des problèmes éventuels causés par l’encodage.
Pour en faire, nous avons plusieurs commandes unix :

1.1.1 $file -i [FILE]
Permettre de connaître le type d’un fichier, y compris son encodage.

1.1.2 $iconv [options] [-f from-encoding] [-t to-encoding] [inputfile]...
Permettre de convertir l’encodage d’un fichier.

1.1.3 $utrac [options] [FILE]
Commande non noyau unix, avec des fonctions similaires que $iconv

1.2 Format de fichier
En l’occurence, il s’agit notamment de la fin de ligne des fichiers edités avec des outils d'Unix et de Windows. Notre environment de travail est Unix (distribution Linux Ubuntu 16.04). Il est donc necessaire de s’assurer que la fin de ligne de chaque fichier se conforme au standard Unix.

1.2.1 Format
Windows :  0x0D0x0A = CRLF = \r\n 
Unix : 0x0A = LF = \n 

1.2.2 Solutions
1) avec l’IU de l’éditeur de texte kate : => Tools => End of line  => Unix
2) avec la commande $utrac supra.

2 Rappel HTML
Il s’agit de
1) connaître la structure d’une page HTML et de
2) construire une page html contenant un tableau, ce que nous avons déjà complété dans le blog précédent.

EXERCICE


Création d’une page html contenant un tableau d’urls avec un script bash :

Environment de travail :

/home/.../PROJET_MOT_SUR_LE_WEB
$ tree -d
.
├── CONTEXTES
├── DUMP-TEXT
├── IMAGES
├── PAGES-ASPIREES
├── PROGRAMMES
├── TABLEAUX
└── URLS

Script :

./PROGRAMMES/CreationTableau_url_1colonne_html_test.sh

#!bin/bash
#PATH=$PATH:~/home/.../PROJET_MOT_SUR_LE_WEB
#./PROGRAMMES/CreationTableau_url_1colonne_html_test.sh
#testé avec ./URLS/liste-url-newspaper.txt fourni par le prof
################################################################
# Création d'une page html contenant une colonne d'urls
# Entrée : un fichier .txt contenant des urls 
# Sortie : un fichier .html contenant un tableau d'une colonne
################################################################
echo "Création d'une page html contenant une colonne d'urls";
echo 'Entrez le nom du fichier.txt contenant des liens :'; 
read f; 
echo 'Entrez le nom du fichier.html pour stocker les liens : '; 
read t; 
echo '<!DOCTYPE html>' > $t;
echo '<html>' >> $t;
echo '<head>' >> $t;
# l'encodage de caractères 
echo '<title>Tableau urls</title>' >> $t;
echo '<meta charset = "utf-8">' >> $t; 
echo '</head>' >> $t;
echo '<body>' >> $t;
echo '<p>Tableau des urls de teste<p>' >> $t;
echo '<table border = "1" bordercolor = "#47baae" width = "60%" align = "center">' >> $t;
echo '<tr>' >> $t;
echo '<th>liens</th>' >> $t;
echo '</tr>' >> $t;
#boucle d'insertion des liens ligne par ligne
for l in $(cat $f);
do 
    echo "<tr><td align = "center"><a href="$l">$l</a></td><tr>" >> $t;
done;
echo '</table>' >> $t;
echo '</body>' >> $t;
echo '</html>' >> $t;
echo 'Fin de création de tableau.'

Exécution :


~/Documents/ProjetEncadre20172018/PROJET_MOT_SUR_LE_WEB$ bash ./PROGRAMMES/CreationTableau_url_1colonne_html_tes
t.sh 
Création d'une page html contenant une colonne d'urls 
Entrez le nom du fichier.txt contenant des liens : 
./URLS/liste-url-newspaper.txt 
Entrez le nom du fichier.html pour stocker les liens :  
./TABLEAUX/tableau_url_1col_test.html 
Fin de création de tableau. 
~/Documents/ProjetEncadre20172018/PROJET_MOT_SUR_LE_WEB$ firefox ./TABLEAUX/tableau_url_1col_test.html 

Résultat :



Références

http://www.linuxcertif.com/man/1/utrac/
https://doc.ubuntu-fr.org/iconv

Total comment

Auteurs

AI_PLURITAL