Hello,
Je cherche, comme le titre l'indique, à compter les différents TAG d'un fichier HTML que je retrouverai dans un tableau du style :
a 32
p 69
div 211
J'ai commencé à chercher quel langage utilisé, j'ai eu plusieurs pistes dont Python et PHP. En regardant du côté de Python je suis tombé sur beautifulsoup qui m'a l'air super puissant. Mais n'est-ce pas trop overkill ?
Le souci principal est que je n'ai pas de réelle connaissance en python, j'ai donc peur d'être bloqué rapidement même si je pense que le script que je cherche à faire n'est pas très compliqué.
Je suis donc parti sur cette base de code, mais là je bloque un peu
import urllib2
from BeautifulSoup import BeautifulSoup
url = urllib2.urlopen("http://www.lequipe.fr")
content = url.read()
soup = BeautifulSoup(content)
tag = soup.findAll()
Si quelqu'un pouvait me guider, ou m'orienter vers une solution un peu plus facile (pas de grande connaissance en programmation..). Je cherche à apprendre un peu pour me faciliter la vie.
Cordialement,
# outils unix
Posté par Anonyme . Évalué à 3.
C'est pour un exercice ou bien pour un besoin réel ?
parce que, en y passant moins de 5 min, ca se fait en une ligne avec grep, sed, sort et uniq
[^] # Re: outils unix
Posté par bobmoutarde . Évalué à 1.
C'est pour moi, un petit exercice. En fait on est plusieurs amis à se lancer des petits exos pour "monter" en compétence.
J'ai hérité de celui-là. J'avais pensé à ce que tu mentionnes, mais je n'ai pas plus creusé que ça vu que je suis tombé sur beautifulsoup qui m'avait l'air bien.
[^] # Re: outils unix
Posté par Anonyme . Évalué à 2. Dernière modification le 30 juin 2015 à 14:44.
alors je te laisse le plaisir de la découverte :)
mais à mon sens, beautifulsoup semble effectivement de l'artillerie lourde pour ce que tu cherches à obtenir
[^] # Re: outils unix
Posté par bobmoutarde . Évalué à 1.
Ouep merci du conseil, je connais un peu ! J'avais été surpris de la "puissance" quand c'est maitrisé. J'vais donc creuser ça & merci !
[^] # Commentaire supprimé
Posté par Anonyme . Évalué à 2.
Ce commentaire a été supprimé par l’équipe de modération.
[^] # Re: outils unix
Posté par Anonyme . Évalué à 3.
je n'ai jamais dit que ça se faisait uniquement avec grep
[^] # Commentaire supprimé
Posté par Anonyme . Évalué à 2.
Ce commentaire a été supprimé par l’équipe de modération.
[^] # Re: outils unix
Posté par Anonyme . Évalué à 2.
coupe, filtre, trie, et compte
[^] # Re: outils unix
Posté par bobmoutarde . Évalué à 1. Dernière modification le 30 juin 2015 à 15:22.
Ca donnerait quelque chose comme ça (là ça ne marche pas, j'suis en train de voir) :
Suis-je sur la bonne piste ?
[^] # Re: outils unix
Posté par Anonyme . Évalué à 2.
si on oublie les erreurs dans la regexp, ce que tu fais c'est: filtre, trie, compte
donc il te manque une étape
Mais pour aller dans le sens de bruno, le grep que j'ai utilisé est superflu: ça se fait aussi avec sed, sort et uniq, puisqu'un grep peut aussi s'exprimer sous forme d'un sed; mais je n'ai pas cherché plus loin que la solution la plus intuitive pour moi
[^] # Re: outils unix
Posté par bobmoutarde . Évalué à 1.
Donc il me manque le "coupe", je pense essayer de le faire avec le sed puisque je ne vois pas comment le "grep" peut m'aider. Je pense juste que c'est un manque d'expérience pour voir plus loin à ce niveau là.
Concernant ma regex, elle à l'air fonctionnelle sur les différents site de test. Je prend ce qui commence par < suivi d'au moins un caractère à plusieurs qui n'est pas > et le tout se termine par >. Il faut peut être que j'enlève le fait d'avoir une balise fermante peut être non ?
[^] # Re: outils unix
Posté par Anonyme . Évalué à 2.
1/les tags sont limités à certains caractères
2/en regexp standard (et non extended) ton + doit être précédé d'un \ pour indiquer qu'il ne s'agit pas du caractère mais d'une multiplicité
3/si tu as des tags avec des attributs différents tu vas récupérer une ligne par combinaison tag+attributs
je mets ma solution ici
libre à toi de la consulter quand tu le souhaiteras
[^] # Re: outils unix
Posté par bobmoutarde . Évalué à 1.
D'accord, je commence à y voir clair !
Du coup, effectivement je fais des regex "PCRE". La différence n'est pas encore très bien assimilée de ce côté-ci d'où les "petites erreurs".
[^] # Re: outils unix
Posté par Michaël (site web personnel) . Évalué à 4.
Tu n'es quand-même pas en train de recommander d'analyser du HTML avec des expressions rationnelles? :)
[^] # Re: outils unix
Posté par Xavier Verne (site web personnel) . Évalué à 1.
Il est question de comptage et non de parsing complexe. Donc les outils en ligne de commande semblent tout à fait adaptés. Faut il sortir libxml2 et xslt ?
[^] # Re: outils unix
Posté par Michaël (site web personnel) . Évalué à 3. Dernière modification le 01 juillet 2015 à 19:54.
Je suis certainement le premier à utiliser Unix pour résoudre un problème, mais si je veux extraire la ligne de tags de quelque chose comme
avec du sed et bien il va falloir par commencer par nettoyer très soigneusement l'entrée.
Sans aller jusqu'à utiliser (explicitement) une bibliothèque adaptée je pense que le passage par un des outils de onsgmls ou bien par tidy est à recommander.
Exemple de output de
onsgmls
Après si il y a une bonne raison de tout faire n'importe comment, c'est chacun comme il veut.
[^] # Re: outils unix
Posté par Anonyme . Évalué à 2.
c'est vrai qu'avec la solution que je propose, le cas du tag qui s'étale sur 2 lignes ne sera pas pris en compte… mais ça peut se négocier :)
D'un autre coté , l'idée est de "monter en compétence", donc l'utilisation d'un outil tout prêt ne me semble pas être ce que Bobmoutarde demande.
En utilisant les outils UNIX, il peut se former sur UNIX et les regexps.
En utilisant python, comme proposé à l'origine, il peut se forme sur le langage et/ou certaines bibliothèques.
[^] # Re: outils unix
Posté par Michaël (site web personnel) . Évalué à 2.
Oh oui, je pense qu'avec un script sed bien poilu, on pourrait presque à faire onsgmls sur du HTML! :D
Oui bien sûr, mais c'est bien de savoir que certains outils ont leur limites, et l'idée qu'on peut utiliser des expressions rationnelles pour analyser le HTML, c'est comme le chiendent, il vaut mieux s'en débarrasser le plus vite possible. C'est pas comme si analyser du HTML était la seul chose qu'on pouvait faire avec du texte!
Par exemple, on peut extraire des données des pages HTML avec de expressions rationnelles. Si il cherche du texte pour rentrer dans la moulinette, il peut prendre des livres (Gutenberg Project), faire du sqlite3 + shell, etc.
http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454
# sur stackoverflow
Posté par palm123 (site web personnel) . Évalué à 2.
2 exemples
http://stackoverflow.com/questions/27673644/beautifulsoup-counting-tags-without-parsing-deep-inside-them
http://stackoverflow.com/questions/13853025/is-there-a-way-in-beautiful-soup-to-count-the-number-of-tags-in-a-html-page
ウィズコロナ
# XPath ?
Posté par Benoît Sibaud (site web personnel) . Évalué à 4.
XPath, par exemple avec /usr/bin/xpath de libxml-xpath-perl (chez Debian)
# Solution avec onsgmls
Posté par Michaël (site web personnel) . Évalué à 3.
Utilise le programme onsgmls de Jim Clark pour normaliser ton document
Comme écrit plus haut la sortie de onsgmls ressemble à ça:
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.