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

Web Perl Discussion :

téléchargement de fichier


Sujet :

Web Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 44
    Par défaut téléchargement de fichier
    Bonjour,

    Je butte sur un petit problème, et j'espère que vous pourriez me donner un petit coup de main.

    Je dois automatiser en perl le téléchargement d'un fichier : "Table_1_full_2008-12-16.xls" (par exemple) sur la page http://www.sanger.ac.uk/genetics/CGP/Census/, le fichier est téléchargeable en cliquant sur un lien dont le nom est "Complete working list.xls".

    Je pense qu'il faut utiliser les modules WWW::Mechanize et/ou LWP::Simple, mais je tourne un peu en rond, quelqu'un aurait une solution pour m'aider ?

    Merci d'avance

  2. #2
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    Pour extraire les liens da la page HTML, tu peux utiliser le module HTML::SimpleLinkExtor, et pour uploader le fichier xls, la méthode getstore de LWP::Simple.

    Une manière de faire :
    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
     
    #!/usr/bin/perl
     
    use strict;
    use warnings;
     
    use HTML::SimpleLinkExtor;
    use LWP::Simple qw($ua get getstore);
     
    my $root = "http://www.sanger.ac.uk/genetics/CGP/Census/";
     
    # création d'un analyseur de lien HTML et analyse de l'URL
    my $link_html = HTML::SimpleLinkExtor->new();
    $link_html->parse_url($root);
     
    # récupération du lien désiré
    my ($excel_link) = grep /\.xls$/ , $link_html->links();
     
    # enregistrement du fichier excel
    print "Uploading $root/$excel_link\n";
    getstore("$root/$excel_link", "full.xls");
    Ceci ne correspond pas exactement à la recherche d'un lien caché derrière un texte donné (mais plutôt à la recherche d'un lien vers un fichier avec une extension .xls). Ceci fonctionnera donc seulement si le fichier Excel recherché est le seul de la page. Les modules LinkExtor ne retournent pas le contenu texte de la balise contenant le lien, ce qui ne permet pas de faire l'analyse de ce texte pour répondre exactement à la question posée. Pour se faire, il faudrait utilise un parser plus générique.

  3. #3
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 44
    Par défaut
    Merci beaucoup Philou67430

    J'ai une autre question alors pour récupérer plusieurs fichiers .tsv sur un serveur FTP, je suppose que ce ne sera pas le module HTML::SimpleLinkExtor; qu'il faudra utiliser... un coup de pouce ?

    Encore une autre chose:
    D'après le code que tu m'as donné, j'essaye de l'adapter pour extraire plusieurs fichiers .txt d'un site en javascript (je pense que c'est du javascript) : http://methycancer.psych.ac.cn/Download.do, de plus la page annonce un serveur FTP mais est-ce que c'est vraiment un serveur FTP ? c'est peut-être pourquoi pour le moment mon script ne donne pas grand chose

    Encore merci d'avance à ceux ou celles qui pourront m'aider

  4. #4
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    Citation Envoyé par Saoua83 Voir le message
    J'ai une autre question alors pour récupérer plusieurs fichiers .tsv sur un serveur FTP, je suppose que ce ne sera pas le module HTML::SimpleLinkExtor; qu'il faudra utiliser... un coup de pouce ?
    Tout dépend si les fichiers .tsv sont références en tant que lien dans une page HTML. Si ce n'est pas le cas, tu peux utiliser un aspirateur tel que wget, qui, en utilisant les options de filtre des extensions, devrait faire l'affaire.
    D'après le code que tu m'as donné, j'essaye de l'adapter pour extraire plusieurs fichiers .txt d'un site en javascript (je pense que c'est du javascript) : http://methycancer.psych.ac.cn/Download.do, de plus la page annonce un serveur FTP mais est-ce que c'est vraiment un serveur FTP ? c'est peut-être pourquoi pour le moment mon script ne donne pas grand chose

    Encore merci d'avance à ceux ou celles qui pourront m'aider
    Le site offre semble-t-il une interface http pour accéder à son serveur FTP (qui lui, semble bloqué en accès direct).
    Cela dit, les URL des fichiers du site ne présentent un motif différent du fichier Excel à chercher de tout à l'heure. Une recherche de ce type devrait fonctionner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    my $root = "http://methycancer.psych.ac.cn/";
    my $root_re = quotemeta $root;
    my @fasta_links = grep /${root_re}Getdata.do\?filename=/ , $link_html->links();

  5. #5
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 44
    Par défaut
    Encore une fois merci, le wget fonctionne nikel, je connaissais en plus mais je n'y avais pas pensé...

    Quand au deuxième problème sur le site de MethyCancer c'est une autre histoire...

    Voici mon code :
    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
     
    #!/usr/bin/perl
     
    use strict;
    use warnings;
    use HTML::SimpleLinkExtor;
    use LWP::Simple qw($ua get getstore);
     
    sub MC_Extractor{
    	my $root = "http://methycancer.psych.ac.cn/";
    	my $root_re = quotemeta $root;
    	my $link_html = HTML::SimpleLinkExtor->new();
    	$link_html->parse_url($root);
     
    	#my @a_hrefs = $link_html->a;
    	#for my $element (@a_hrefs) {
    		#print $element;
    		#print "\n";
    		#getstore("$element", "MC_.$element.txt");
    	#}
     
    	my @fasta_links = grep /${root_re}Getdata.do\?filename=/ , $link_html->links();
    	for my $element (@fasta_links) {
    		print "Uploading $root/$element\n";
    		getstore("$root/$element", "MC_.$element.txt");
    	}
    }
    &MC_Extractor()
    Je penses qu'il y a un problème au niveau de la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my @fasta_links = grep /${root_re}Getdata.do\?filename=/ , $link_html->links();
    Il faudrait une déspécialisation du symbole = ou quelquechose comme ça peut-être...

  6. #6
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    Que donne la sortie standard du script ?
    J'aurais tendance à dire qu'il essaye de créer localement des fichiers MC_Getdata.do?filename=...

    Ce qui n'est pas forcément élégant.
    Avec d'écrire le fichier, tu peux peut-être extraire le nom du fichier dernière filename=

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my ($local_name) = $element =~ /filename=([^&]+)/;
    Sinon, je ne comprends pas ta question de déspécialisation de =

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

Discussions similaires

  1. Téléchargement de fichier
    Par casafa dans le forum Web & réseau
    Réponses: 21
    Dernier message: 18/06/2009, 23h34
  2. Réponses: 5
    Dernier message: 08/12/2005, 20h13
  3. Téléchargement de fichiers par HTTP / FTP
    Par Gladiator dans le forum Serveurs (Apache, IIS,...)
    Réponses: 2
    Dernier message: 07/12/2005, 11h28
  4. Réponses: 5
    Dernier message: 05/11/2005, 17h53
  5. [SOAP][XML][C#.NET] Téléchargement de fichiers XML
    Par juniorAl dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 27/06/2005, 09h35

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