Quelle technologie pour parser du HTML ?

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonjour,

Je travaille sur un projet universitaire pour lequel j'aurais besoin d'envoyer automatiquement une requête POST à un site web, récupérer la page HTML générée et parser le résultat pour extraire quelques mots ou phrases.

Connaîtriez-vous un outil ou un framework qui soit adapté à ce type d'usage ?

Merci !

“Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning.” – Rich Cook

+0 -0
Staff

Cette réponse a aidé l'auteur du sujet

Salut.

C'est tout à fait dans les cordes de Python. Selon tes contraintes, soit tu peux te permettre d'utiliser des modules tiers :

  • requests pour la requête POST
  • lxml pour parser la réponse

Soit tu peux composer avec la bibliothèque standard (en faisant ta requête avec urllib), mais le parsing sera un peu plus laborieux sans lxml.

Édité par nohar

I was a llama before it was cool

+4 -0
Auteur du sujet

Je n'ai pas de contraintes particulières donc je vais regarder les modules que vous m'avez conseillés.

Merci !

P.S. - Si d'autres personnes ont des suggestions différentes, qu'elles n'hésitent pas, je suis ouvert à tout.

Édité par Ekron

“Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning.” – Rich Cook

+0 -0
Staff

Pour parser du HTML en python je partirais direct sur du BeautifulSoup.

Petit article de presentation (attention, le reste du site est un peu NSFW)

Nodraak

BeautifulSoup n'est qu'une surcouche de lxml. À l'usage je la trouve bien plus laborieuse à utiliser (sans même parler des perfs qui ne nous intéressent pas ici). Du coup j'aurais tendance à la proscrire : elle figure dans mon top 10 des "fausses bonnes idées", avec path.py.

I was a llama before it was cool

+2 -0
Auteur du sujet

Ok, je vais regarder de ce côté aussi.

“Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning.” – Rich Cook

+0 -0

Cette réponse a aidé l'auteur du sujet

Exemple en Groovy, récupérer tous les titres d'articles présents sur la page d'accueil :

1
2
3
4
5
6
7
8
@Grab(group='org.codehaus.groovy.modules.http-builder', module='http-builder', version='0.7.1')
import groovyx.net.http

def html= new HttpBuilder('http://zestedesavoir.com').get([:])

def articles = html."**".findAll { it.name() == 'ARTICLE' }
def titresArticles = articles.collect { it.A[0]?.@title }
println titresArticles

Y'a moyen de faire un "one-liner" mais bon, c'est déjà pas forcément évident à comprendre…

C'est typiquement le genre de trucs (rechercher récursivement dans un document XML) que les langages de script "modernes" fournissent des outils appropriés et généralement pas trop complexes à comprendre.

EDIT : la doc

Édité par Javier

Happiness is a warm puppy

+1 -0
Staff

Cette réponse a aidé l'auteur du sujet

Pour le fun :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
>>> import requests
>>> from lxml.etree import HTML
>>> page = requests.get("https://zestedesavoir.com")
>>> html = HTML(page.text)
>>> for title in html.xpath('//article/div[@class="content-info"]//h3'):
...     print(title.text.strip())
... 
D'Éden à Yggdrasil : l'arbre dans les mythes
Les arbres, sous toutes leurs formes
Cérémonie de la science improbable : présentation des IgNobels 2015
Les injections SQL
Vagrant, connexion SSH
Impression erronée
Appel d'une fonction depuis un autre fichier
Plusieurs ModelForm dans une page
Quelle technologie pour parser du HTML ?
Tablette DualBoot : Remettre à zéro

Après, évidemment, la version one-liner est imbitable :

1
[title.text.strip() for title in HTML(requests.get("https://zestedesavoir.com").text).xpath('//article/div[@class="content-info"]//h3')]

I was a llama before it was cool

+1 -0

Marrant comme les versions Groovy et Python se ressemblent :)

(en même temps les deux reposent sur des XPath, d'ailleurs on pourrait écrire la version XPath également, plutôt que GPath).

PS : GPath c'est le ."**". pour ceux qui se demanderaient.

Édité par Javier

Happiness is a warm puppy

+1 -0

Ekron, dis-moi, tu as déjà codé, si oui, tu connais quoi comme langage(s) ? Il est impératif de le savoir, si tu veux des réponses exploitables.

J'ai l'impression que tu vas te lancer dans l'apprentissage d'un langage, celui qu'on t'aura le mieux vendu, dans le but d'implémenter ton script. Si tu n'as jamais programmé, ça risque d'être long (mais pourquoi pas!).

Édité par Au

+2 -0
Auteur du sujet

Wow, merci pour tous vos messages !

Alors, pour répondre globalement :

  • l'université ne donne pas de contrainte, en réalité, ce petit script est un partie d'un projet un peu plus gros, donc on fait comme on veut ;
  • j'ai déjà codé, et je pense me débrouiller pas trop mal en Java, C# et en web (PHP, Javascript…). J'ai fait un peu de Python aussi et dans la mesure où ce que je cherche à faire n'est pas très compliqué, je pense que je pourrais m'en sortir avec.

En tout cas, merci encore à tout le monde, je vais me pencher sur ces solutions pour voir laquelle m'est le plus accessible ! :)

“Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning.” – Rich Cook

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte