Pages : 1
#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
Pages : 1