Outils du site

Outils pour utilisateurs

Action disabled: register

Panneau latéral

P2PFR:Wiki

documentation:ddl:wget (lu 2174 fois)

Wget

Wget est un outil de téléchargement très commun sous les systèmes type Linux. Il s'utilise en ligne de commande. L'outil a des paramètres d'utilisation qui le rendent assez puissant, mais dans les cas où il ne se suffit pas à lui-même, on peut écrire des mini scripts en shell ou python si l'on a la chance de connaître un peu ces langages. Wget dispose aussi d'interfaces graphiques (front-end) comme gwget, qui peuvent simplifier l'ajustement de ses options si la ligne de commande vous rebute.

Un peu de documentation:

Cas d'utilisation

Télécharger les fichiers d'un index HTTP

Par exemple, avec les sites mentionnés dans l'article Trouver et écouter de la musique sans P2P.

Tout télécharger sans se prendre la tête:

wget -mc "http://rob1.j92.free.fr/Musique"

Télécharger les fichiers de type .mp3 d'une page web

wget 'http://foetusparty.free.fr/demo%20k7.htm' -A '*.mp3' -r -l 1

Le -A signifie Accept, c'est la liste des extensions de fichiers que l'on conserve.

Le -r signifie récursif, et le -l limite le niveau de récursivité de façon à ce qu'il ne fouine pas tous les autres liens html de la page.

Télécharger les mp3 d'un site web avec wget + script

Admettons qu'on tombe sur un site avec des mp3 dont on peut retrouver les liens mais dont le téléchargement n'est pas évident. On peut utiliser un gestionnaire de téléchargements, un aspirateur de sites web, ou bien wget avec un script.

Le Terrier est un site un peu rigolo avec plein de trucs dedans qu'on prend pas forcément le temps de mater mais où on voit que ça a l'air intéressant, direction sa page «musique».

Matons les sources HTML (CTRL+U), car pour tout site web qui joue de la musique, il y a forcément référence aux fichiers sons quelque part. Ici on a de la chance, le code est plutôt clair à lire. Il n'y a pas les liens mp3 directement dedans, mais ils sont dans un fichier .js à part, on click sur tracks.js.

var tracks = [
	{"url": "http://www.le-terrier.net/albums/arbag/soir1/sons/mp3/donner-le-ton.mp3",
        "title": "Donner le ton",
        "artists": ["L.L. de Mars", "François Coquet"],
        "sections": ["composition", "concert", "poésie"]},	
    {"url": "http://www.le-terrier.net/musique/lldm/sonnets/01.mp3",
        "title": "Sonnet étriqué I",
        "artists": ["L.L. de Mars"], 
        "sections": ["lectures", "poésie", "solo", "expérimentation"]},        
	{"url": "http://www.le-terrier.net/musique/lldm/sonnets/02.mp3",
        "title": "Sonnet étriqué II",
        "artists": ["L.L. de Mars"], 
        "sections": ["lectures", "poésie", "solo", "expérimentation"]},

La liste des fichiers est bien là, mais il faut épurer cette liste pour qu'elle soit exploitable par wget, on va donc écrire un petit script en shell. En fait, ça tiendra en une ligne.

On enregistre la liste complète dans un fichier que l'on a qu'a nommer listejs.txt.

Écriture du script shell

Ça, ça balance dans le terminal le contenu du fichier.

cat listejs.txt

Le caractère '|' indique qu'on passe le flux vers la commande qu'on indique après, plutôt que vers le terminal.

Ici, la commande qui suit le '|' est grep, qui permet de filtrer selon le motif que l'on a indiqué.

cat listejs.txt | grep mp3

Résultat:

	{"url": "http://www.le-terrier.net/albums/arbag/soir1/sons/mp3/donner-le-ton.mp3",
    {"url": "http://www.le-terrier.net/musique/lldm/sonnets/01.mp3",
	{"url": "http://www.le-terrier.net/musique/lldm/sonnets/02.mp3",

A partir de là, on a une ligne par mp3, mais toujours du code javascript qu'on doit nettoyer. Le nettoyage va se faire avec cut, qui permet de tailler une chaîne de caractères en plusieurs champs selon un critère de séparation.

Les 2 options de cut que l'on utilise ici sont: -d, pour préciser quel caractère délimiteur, et -f, pour indiquer le numéro de la section que l'on va conserver.

cat listejs.txt| grep mp3 | cut -d '"' -f 4

Résultat:

http://www.le-terrier.net/albums/arbag/soir1/sons/mp3/donner-le-ton.mp3
http://www.le-terrier.net/musique/lldm/sonnets/01.mp3
http://www.le-terrier.net/musique/lldm/sonnets/02.mp3

Et là, on a fini. Pour chaque ligne, on a le lien http:// du mp3. On va donc enregistrer le résultat dans un fichier. On peut faire cela en redirigeant le résultat avec '>'.

cat listejs.txt| grep mp3 | cut -d '"' -f 4 > mp3terrier.txt

On peut ensuite donner à wget le résultat contenu dans le fichier mp3terrier.txt.

On invoque wget avec -c pour dire “continue”, c'est à dire reprise si l'on a interrompu le téléchargement ; -x demande à wget de recréer l'arborescence de répertoires tels qu'il les trouve dans les liens ; et -i comme “input” sert à indiquer le nom du fichier dont on lira les URLs.

wget -c -x -i mp3terrier.txt

Bon le hic apparemment c'est que sur le terrier ça télécharge à 2 à l'heure… mais c'est pas grave, on aura nos mp3s !

Addendum 1 - sed appliqué à Le Terrier

edmc73 nous fait part d'une commande qui remplace l'usage des cut et grep du script ci-dessus.

sed -e '/url/!d' -e 's/^\s*{"url": "\(.*\)",/\1/' tracks.js

Addendum 2 - sed dans un cas plus général

edmc73 a encore frappé, ce motif devrait convenir à bon nombre de cas d'extration d'URLs de MP3, éventuellement avec des adaptations mineures:

Pour traiter une donnée ayant chaque ligne du type:

dublablacodecode<a href="/chemin/bien/precis/fichier.xyz">OnSenFoutDuNom</a>dublablacode

… et en extraire la partie fichier.xyz, on pourra utiliser:

sed -r 's/.*href=".*[$/](.*)".*/\1/' tonFichier.html

Des explications simples sur sed sur son wiki.

Liens

documentation/ddl/wget.txt · Dernière modification: le 05/09/2019 à 00h07 de 111110101011