68 votes

Analyse HTML de type jquery en Python ?

Existe-t-il une bibliothèque Python qui me permette d'analyser un document HTML de manière similaire à ce qui se fait dans le domaine de la gestion de l'information ? jQuery fait ?

c'est-à-dire que j'aimerais pouvoir utiliser Syntaxe des sélecteurs CSS pour saisir un ensemble arbitraire de nœuds dans le document, lire leur contenu/attributs, etc.

La seule librairie Python d'analyse HTML que j'ai utilisée auparavant était BelleSoupe et, même si tout va bien, je continue à penser que l'analyse syntaxique serait plus rapide si je disposais de la syntaxe jQuery :D

0 votes

64voto

systempuntoout Points 27584

Si vous êtes à l'aise avec BelleSoupe vous pouvez simplement ajouter sélection de soupe à vos librairies.
Soupselect est une extension de sélecteur CSS pour BeautifulSoup.

Utilisation :

from bs4 import BeautifulSoup as Soup
from soupselect import select
import urllib
soup = Soup(urllib.urlopen('http://slashdot.org/'))
select(soup, 'div.title h3')

    [<h3><span><a href='http://stackoverflow.com//science.slashdot.org/'>Science</a>:</span></h3>,
     <h3><a href='http://stackoverflow.com//slashdot.org/articles/07/02/28/0120220.shtml'>Star Trek</h3>,
    ..]

0 votes

Cela semble être la meilleure solution pour moi en ce moment, je vais l'essayer. Merci !

6 votes

C'est maintenant from bs4 pour une belle soupe 4

10 votes

Si vous avez des problèmes pour installer soupselect, vous devriez essayer la version compatible avec pip proposée ici. github.com/syabro/soupselect : sudo pip install https://github.com/syabro/soupselect/archive/master.zip

49voto

Luke Stanley Points 557

Considérons PyQuery :

http://packages.python.org/pyquery/

>>> from pyquery import PyQuery as pq
>>> from lxml import etree
>>> import urllib
>>> d = pq("<html></html>")
>>> d = pq(etree.fromstring("<html></html>"))
>>> d = pq(url='http://google.com/')
>>> d = pq(url='http://google.com/', opener=lambda url: urllib.urlopen(url).read())
>>> d = pq(filename=path_to_html_file)
>>> d("#hello")
[<p#hello.hello>]
>>> p = d("#hello")
>>> p.html()
'Hello world !'
>>> p.html("you know <a href='http://python.org/'>Python</a> rocks")
[<p#hello.hello>]
>>> p.html()
u'you know <a href="http://python.org/">Python</a> rocks'
>>> p.text()
'you know Python rocks'

14voto

Le site lxml supports de bibliothèque Sélecteurs CSS .

7voto

eusoubrasileiro Points 1237

BelleSoupe L'utilisation de l'outil d'aide à la décision de la Commission européenne est désormais possible. css selectors

import requests
from bs4 import BeautifulSoup as Soup
html = requests.get('https://stackoverflow.com/questions/3051295').content
soup = Soup(html)

Titre du ce question

soup.select('h1.grid--cell :first-child')[0].text

Nombre de votes positifs sur la question

# first item 
soup.select_one('[itemprop="upvoteCount"]').text

en utilisant Requêtes Python pour obtenir la page html

1voto

fizzbuzz Points 1235

Vous pouvez également jeter un coup d'œil à pyquery. Trouvez-le ici

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X