with tutorial script scraping scrap page from examples beautifulsoup4 python html-parsing beautifulsoup xml-parsing

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 .