2011-04-28 21 views
105

tengo la siguiente sopa:BeautifulSoup conseguir href

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

De esto quiero extraer el href, "some_url"

puedo hacerlo si sólo tengo una etiqueta, pero aquí hay dos etiquetas . También puedo obtener el texto 'next', pero eso no es lo que quiero.

Además, hay una buena descripción de la API en algún lugar con ejemplos. Estoy usando the standard documentation, pero estoy buscando algo un poco más organizado.

+0

Por favor enviar un código de ejemplo para mostrar cómo se está tratando de hacerlo – seb

+2

Muy bien, lo descubrí: soup.find ('a') ['href'] Lo que me confundió fue que estaba usando django (html) para verlo, lo que realmente elimina el href antes de presentarlo: sopa. find ('a') se convierte en 'n' ext ' – dkgirl

Respuesta

157

Puede utilizar find_all de la siguiente manera para encontrar todos los elementos a que tiene un atributo href, e imprimir cada uno:

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 salida sería:

Found the URL: some_url 
Found the URL: another_url 

Tenga en cuenta que si Está utilizando una versión anterior de BeautifulSoup (antes de la versión 4), el nombre de este método es findAll. En la versión 4, el método de BeautifulSoup nombra were changed to be PEP 8 compliant, por lo que debe usar find_all.


Si desea todas las etiquetas con una href, se puede omitir el parámetro name:

href_tags = soup.find_all(href=True) 
+2

puede obtener el href simple con la clase "class =" class "" – yoshiserry

+2

@yoshiserry soup.find (' a ', {' class ':' class '}) [' href '] – rleelr

+0

¿Cómo se atenúa? falsos positivos y resultados no deseados (es decir, 'javascript: void (0)', '/ en/support/index.html',' # smp-navigationList')? – user3155368