web-dev-qa-db-fra.com

BeautifulSoup obtenir href

J'ai la soupe suivante:

<a href="some_url">next</a>
<span class="class">...</span>

De cela, je veux extraire le href, "some_url"

Je peux le faire si je n'ai qu'un seul tag, mais ici il y a deux tags. Je peux aussi obtenir le texte 'next' mais ce n'est pas ce que je veux.

En outre, existe-t-il une bonne description de l'API quelque part avec des exemples? J'utilise la documentation standard , mais je cherche quelque chose d'un peu plus organisé.

166
dkgirl

Vous pouvez utiliser find_all de la manière suivante pour rechercher tous les éléments a dotés d'un attribut href et les imprimer:

from BeautifulSoup import BeautifulSoup

html = '''<a href="some_url">next</a>
<span class="class"><a href="another_url">later</a></span>'''

soup = BeautifulSoup(html)

for a in soup.find_all('a', href=True):
    print "Found the URL:", a['href']

La sortie serait:

Found the URL: some_url
Found the URL: another_url

Notez que si vous utilisez une version plus ancienne de BeautifulSoup (avant la version 4), le nom de cette méthode est findAll. Dans la version 4, les noms de méthode de BeautifulSoup ont été modifiés pour être conformes à PEP 8 , vous devez donc utiliser find_all à la place.


Si vous voulez toutes les balises avec un href, vous pouvez omettre le paramètre name:

href_tags = soup.find_all(href=True)
260
Mark Longair