Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 23/08/2013, à 19:30

urustu

Capturer liste sur une série de pages web

Bonjour,

Je recherche une sorte d'aspirateur "intelligent" de pages web qui récupère une liste de données qui se poursuit sur plusieurs pages.
Par exemple :  ici ou ici.


HP Pavilion 17-e027sf | CPU AMD A4-5000 alias Kabini | Graphique Radeon HD 8330 | Wifi Realtek RTL8188EE > 3-boot > Ubuntu 18.04 LTS | Mint | Fedora
Samsung 300E7A nVidia Optimus > Mint

Hors ligne

#2 Le 24/08/2013, à 17:40

Clémentv

Re : Capturer liste sur une série de pages web

C'est trop spécifique pour qu'un aspirateur puisse faire ça pour n'importe quel site.
Mais tu peux faire des scripts pour récupérer les données. Par exemple, pour le premier lien :

#!/bin/bash
for i in $(seq 1 596); do
    wget -q "http://www.tous-les-prenoms.com/recherche/index.php?longueur=&origine=&tendance=&sexe=&commencantpar=&page=$i" -O - | grep '<a class="prenom' -A 1 | grep '</a>' | tr -s '\t' | cut -f 2
done

Tu peux regarder les commandes que tu ne connais pas dans le man, pour pouvoir l'adapter à d'autres tâches.

Il y a peut être mieux pour extraire des données de la page. Le site aurait été en XML, j'aurais utilisé xmllint et de l'xpath mais je sais pas s'il existe un équivalent pour l'HTML.

Edit: En fait, xmllint supporte l'HTML. Donc un autre script pour le premier site :

#!/bin/bash 
for i in $(seq 1 596); do
    wget -q "http://www.tous-les-prenoms.com/recherche/index.php?longueur=&origine=&tendance=&sexe=&commencantpar=&page=$i" -O - | xmllint --html --xpath '//div[@class="prenomsearch"]//a[contains(@class, "prenom sexe")]/text()' - 2> /dev/null | sed -e 's/^\s*//' -e 's/\s*$//' 
done

Pour le second, on peut extraire les noms d'une page avec

xmllint --html --xpath '//font[@size="2"]' - | sed -e 's/<font[^>]*>//g' -e 's/<\/font>/\n/g'

mais les pages sont plus dur à parcourir. Je vois pas de moyen simple de connaitre le nombre de page : les liens vers les pages ne sont pas dans le code mais sont générés par du javascript.

Dernière modification par Clémentv (Le 24/08/2013, à 18:34)

Hors ligne

#3 Le 25/08/2013, à 13:43

urustu

Re : Capturer liste sur une série de pages web

Merci Clémentv pour ces scripts.

Pour le second site, j'ai simplement mis une valeur maximale :

#!/bin/bash 
for i in $(echo -e {a..z}"\n"); do
  for j in $(seq 1 30); do
    wget -q "http://www.aufeminin.com/world/maternite/prenoms/prenomresult__letter=$i&sexe=2&page=$j.html" -O - | xmllint --html --xpath '//font[@size="2"]' - 2> /dev/null | sed -e 's/<font[^>]*>//g' -e 's/<\/font>/\n/g'
  done
done

Mais en fait je recherchais un outil équivalent à un que je connaissais il y a plus d'une dizaine d'années sous Windows et dont je n'ai pas retrouvé son nom qui m'avait permis de récupérer les résultats des élections commune par commune depuis le site du ministère de l'intérieur.


HP Pavilion 17-e027sf | CPU AMD A4-5000 alias Kabini | Graphique Radeon HD 8330 | Wifi Realtek RTL8188EE > 3-boot > Ubuntu 18.04 LTS | Mint | Fedora
Samsung 300E7A nVidia Optimus > Mint

Hors ligne