python - tutorial - ¿Cómo obtengo una lista de todas las etiquetas principales en BeautifulSoup?
scrap with python (2)
Aquí está mi puñalada:
>>> from BeautifulSoup import BeautifulSoup
>>> html = """<folder name="folder1">
<folder name="folder2">
<bookmark href="link.html">
</folder>
</folder>
"""
>>> bookmarks = soup.findAll(''bookmark'')
>>> [p.get(''name'') for p in bookmarks[0].findAllPrevious(name = ''folder'')]
[u''folder2'', u''folder1'']
La diferencia clave de la respuesta de @ eumiro es que estoy usando findAllPrevious
lugar de findParents
. Cuando probé la solución de @ eumiro, descubrí que findParents
solo devuelve el primer padre (inmediato) ya que el nombre del padre y el abuelo son los mismos.
>>> [p.get(''name'') for p in bookmarks[0].findParents(''folder'')]
[u''folder2'']
>>> [p.get(''name'') for p in bookmarks[0].findParents()]
[u''folder2'', None]
Devuelve dos generaciones de padres si el padre y el abuelo tienen un nombre diferente.
>>> html = """<folder name="folder1">
<folder_parent name="folder2">
<bookmark href="link.html">
</folder_parent>
</folder>
"""
>>> soup = BeautifulSoup(html)
>>> bookmarks = soup.findAll(''bookmark'')
>>> [p.get(''name'') for p in bookmarks[0].findParents()]
[u''folder2'', u''folder1'', None]
Digamos que tengo una estructura como esta:
<folder name="folder1">
<folder name="folder2">
<bookmark href="link.html">
</folder>
</folder>
Si apunto a marcar, ¿cuál sería el comando para extraer todas las líneas de la carpeta? Por ejemplo,
bookmarks = soup.findAll(''bookmark'')
then beautifulsoupcommand(bookmarks[0])
volvería:
[<folder name="folder1">,<folder name="folder2">]
También me gustaría saber cuándo las etiquetas de finalización también. ¿Algunas ideas?
¡Gracias por adelantado!
bookmarks[0].findParents(''folder'')
le devolverá una lista de todos los nodos principales. A continuación, puede iterar sobre ellos y usar su atributo de name
.