IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

Extraire des liens web d'un fichier .html


Sujet :

Langage Perl

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Février 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Février 2014
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Extraire des liens web d'un fichier .html
    À que hello tout le monde !
    Un peu nouveau dans le monde de Perl (études oblige), je suis à la recherche d'un peu d'aide. En effet, j'ai quelques exos à faire et je n'ai eu aucun soucis, sauf avec un seul. J'ai passé du temps à chercher la solution, mais je n'y arrive pas, d'où mon poste !
    L'exo est très simple, récupérer (et afficher suivant leur nombre d’occurrence) tous les liens http, ftp et adresse mail d'une page web. De mon côté j'ai réussi à télécharger un .html d'une adresse web passé en commentaire, mais après je bloque :/.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    #!/usr/bin/perl
    use strict;
     
    my $lien = $ARGV[0];
    my $fichier;
    my @contenu;
    my %frequence_affichage;
    my $row;
     
    if(defined $lien){
    	`curl $lien > fichier_tmp.html`;
    	$fichier = "fichier_tmp.html";
    	open FILE, "$fichier" or die "erreur ouverture fichier temporaire\n";
    	@contenu = <FILE>;
     
    	#Need help :'(
     
     
    	close FILE;
     
    	unlink "fichier_tmp.html";
    }
    else{
    	die("Veuillez passer en argument une adresse web. Veuillez installer curl\n->  sudo apt-get install curl wget lynx w3m\n");
    }
    Merci d'avance !

  2. #2
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Points : 4 029
    Points
    4 029
    Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2013
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 247
    Points : 406
    Points
    406
    Par défaut
    Si tu as le fichier html de la page, tu peux donc le parcourir:

    - soit "manuellement" ligne par ligne et expression régulière
    - soit en parsant ton fichier avec HTMLarser et ensuite tu traite les données

    je repasse dans l'après midi pour étoffer ma réponse

  4. #4
    Candidat au Club
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Février 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Février 2014
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    @ggnore : Merci de ton aide, mais malheureusement il faut faire ça sans utiliser de module externe :/

    @6ril23 : Merci à toi aussi . J'ai dans l'idée (mais après comment le coder je bloque) de faire un grep dans le fichier télécharger en utilisant un REGEX (du type <a href="." ) et récupérer tous les liens de cette manière, de les stocker dans un tableau hashage (pour pouvoir les compter). Mais mon problème c'est que je peux avoir plusieurs lien dans chaque ligne de mon fichier et je ne sais pas comment les récupérer :/

  5. #5
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Points : 4 029
    Points
    4 029
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    #!/usr/bin/perl
     
    use strict;
    use warnings;
     
    my $input               ='<li><a href="http://general.developpez.com/cours/" title="">Tutoriels</a></li><li><a href="http://magazine.developpez.com/" title="">Magazine</a></li>
                    <li><a href="http://general.developpez.com/faq/" title="">FAQs</a></li>
                    <li><a href="http://blog.developpez.com/" title="">Blogs</a></li>
                    <li><a href="http://projets.developpez.com/" title="">Projets</a></li>
                    <li><a href="http://chat.developpez.com/" title="">Chat</a></li>
                    <li><a href="http://www.developpez.com/newsletter/">Newsletter</a></li>
                    <li><a href="http://etudes.developpez.com/">Études</a></li>
                    <li><a href="http://emploi.developpez.com/" title="">Emploi</a></li>
                    <li><a href="http://club.developpez.com/">Club</a></li>
                    <li><a href="http://club.developpez.com/contacts/" title="">Contacts</a></li>';
     
    sub count_href{
            my ($text, $pattern) = @_; 
            my @href_array = split($pattern, $text);
            return (scalar @href_array);
    }
     
    my $link_number = count_href($input, 'href');
    printf "\nnb href : $link_number\n";
     
    my $href_counter=1;
    my @cutter;
     
    while ($href_counter <= $link_number){
            $input =~ /a href=\"([^\"]*)\"/;
            printf "\n$href_counter/$link_number : $1\n";
            @cutter = split($1, $input);
     
    #       foreach my $cut (@cutter){
    #               printf "$cut;";
    #       }
     
            printf "RESTE:$cutter[1]";
            $input = $cutter[1];
            $href_counter++;
    }
    C'est vite fait, mal fait, le dernier lien n'est pas extrait correctement, je ne sais pas pourquoi.
    Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux

  6. #6
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2013
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 247
    Points : 406
    Points
    406
    Par défaut
    désolé j'ai pas pu repassé hier.

    en reprenant ton code ça donnerait quelque chose comme (pas testé):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    #!/usr/bin/perl
    use strict;
     
    my $lien = $ARGV[0];
    my $fichier;
    my @contenu;
    my %frequence_affichage;
    my $row;
    my @array;
     
    if(defined $lien){
    	`curl $lien > fichier_tmp.html`;
    	$fichier = "fichier_tmp.html";
    	open FILE, "$fichier" or die "erreur ouverture fichier temporaire\n";
    	#@contenu = <FILE>;
     
    	while(<FILE>){
    		if ( $_ =~ /href="(.*)"/ ){
    			print "lien: $1\n";
     			push (@array, $1);                  
    		}
     	}
     
    	close FILE;
     
    	unlink "fichier_tmp.html";
    }
    else{
    	die("Veuillez passer en argument une adresse web. Veuillez installer curl\n->  sudo apt-get install curl wget lynx w3m\n");
    }
    # pour avoir le nombre d'elements:
    my $taille = @array
    print $taille

  7. #7
    Candidat au Club
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Février 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Février 2014
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par ggnore Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    #!/usr/bin/perl
     
    use strict;
    use warnings;
     
    my $input               ='<li><a href="http://general.developpez.com/cours/" title="">Tutoriels</a></li><li><a href="http://magazine.developpez.com/" title="">Magazine</a></li>
                    <li><a href="http://general.developpez.com/faq/" title="">FAQs</a></li>
                    <li><a href="http://blog.developpez.com/" title="">Blogs</a></li>
                    <li><a href="http://projets.developpez.com/" title="">Projets</a></li>
                    <li><a href="http://chat.developpez.com/" title="">Chat</a></li>
                    <li><a href="http://www.developpez.com/newsletter/">Newsletter</a></li>
                    <li><a href="http://etudes.developpez.com/">Études</a></li>
                    <li><a href="http://emploi.developpez.com/" title="">Emploi</a></li>
                    <li><a href="http://club.developpez.com/">Club</a></li>
                    <li><a href="http://club.developpez.com/contacts/" title="">Contacts</a></li>';
     
    sub count_href{
            my ($text, $pattern) = @_; 
            my @href_array = split($pattern, $text);
            return (scalar @href_array);
    }
     
    my $link_number = count_href($input, 'href');
    printf "\nnb href : $link_number\n";
     
    my $href_counter=1;
    my @cutter;
     
    while ($href_counter <= $link_number){
            $input =~ /a href=\"([^\"]*)\"/;
            printf "\n$href_counter/$link_number : $1\n";
            @cutter = split($1, $input);
     
    #       foreach my $cut (@cutter){
    #               printf "$cut;";
    #       }
     
            printf "RESTE:$cutter[1]";
            $input = $cutter[1];
            $href_counter++;
    }
    C'est vite fait, mal fait, le dernier lien n'est pas extrait correctement, je ne sais pas pourquoi.

    Merci de ta réponse ggnore ! Je vais me débrouiller avec ça

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutante] Extraire des données à partir d'un fichier html avec xsl
    Par sab_etudianteBTS dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 11/03/2008, 09h10
  2. [RegEx] Exclure une chaine dans un motif, pour extraire des liens html
    Par Dimitri01 dans le forum Langage
    Réponses: 4
    Dernier message: 09/11/2007, 16h40
  3. Réponses: 3
    Dernier message: 04/01/2007, 17h42
  4. Extraire des informations précises d'un fichier
    Par cameleon33 dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 14/10/2006, 13h40
  5. Extraire des lignes precises d'un fichier
    Par keke33 dans le forum Entrée/Sortie
    Réponses: 9
    Dernier message: 03/06/2004, 10h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo