J'essaie d'utiliser BeautifulSoup pour analyser une arborescence DOM et extraire les noms des auteurs. Ci-dessous un extrait de code HTML pour montrer la structure du code que je vais gratter.Analyse des données à l'aide de BeautifulSoup en Python
<html>
<body>
<div class="list-authors">
<span class="descriptor">Authors:</span>
<a href="/find/astro-ph/1/au:+Lin_D/0/1/0/all/0/1">Dacheng Lin</a>,
<a href="/find/astro-ph/1/au:+Remillard_R/0/1/0/all/0/1">Ronald A. Remillard</a>,
<a href="/find/astro-ph/1/au:+Homan_J/0/1/0/all/0/1">Jeroen Homan</a>
</div>
<div class="list-authors">
<span class="descriptor">Authors:</span>
<a href="/find/astro-ph/1/au:+Kosovichev_A/0/1/0/all/0/1">A.G. Kosovichev</a>
</div>
<!--There are many other div tags with this structure-->
</body>
</html>
Mon point de confusion est que quand je fais soup.find, il trouve la première occurrence de la balise div que je recherche. Après cela, je recherche tous les balises de liens 'a'. A ce stade, comment puis-je extraire les noms des auteurs de chacune des balises et les imprimer? Y at-il un moyen de le faire en utilisant BeautifulSoup ou dois-je utiliser Regex? Comment continuer à itérer sur tous les autres balises div et extraire les noms des auteurs?
import re
import urllib2,sys
from BeautifulSoup import BeautifulSoup, NavigableString
html = urllib2.urlopen(address).read()
soup = BeautifulSoup(html)
try:
authordiv = soup.find('div', attrs={'class': 'list-authors'})
links=tds.findAll('a')
for link in links:
print ''.join(link[0].contents)
#Iterate through entire page and print authors
except IOError:
print 'IO error'
Et s'il y a plus de balises div, comment puis-je itérer sur celles-ci? – GobiasKoffi
Si vous effectuez une recherche par classe CSS, vous obtenez alors une liste d'éléments et vous pouvez itérer avec une boucle for (voir: http://www.crummy.com/software/BeautifulSoup/bs4/doc/#searching-by-css- classe). Faites quelque chose comme: 'authordiv = soup.find ('div', class_ = 'liste-auteurs')'. – eNord9