Delightful Soup es una biblioteca en Python para sacar información de registros HTML y XML. Trabaja con su analizador preferido para dar métodos informales para explorar, mirar y alterar el árbol de análisis. Regularmente ahorra a los ingenieros de software horas o largos períodos de trabajo.
Estas directrices representan todos y cada uno de los elementos significativos de Sopa Excelente 4, con modelos. Te doy para qué sirve la biblioteca, cómo funciona, cómo utilizarla, cómo hacer que haga lo que necesitas, y qué hacer cuando daña tus deseos.
Los modelos de esta documentación deberían funcionar de manera similar en Python 2.7 y Python 3.2.
Puede estar buscando la documentación de Lovely Soup 3. Siempre que esto sea cierto, debe darse cuenta de que la Maravillosa Sopa 3 nunca más se crea y que la Excelente Sopa 4 se prescribe para cada nueva empresa. En el caso de que necesite averiguar los contrastes entre la Excelente Sopa 3 y la Maravillosa Sopa 4, vea el código de adaptación a BS4.
Esta documentación ha sido convertida en diferentes dialectos por los clientes de Wonderful Soup:
Por supuesto, este documento también está disponible en chino.
Esta página está disponible en japonés (enlace externo)
이 문서는 한국어 번역도 가능합니다. (외부 링크)
un documento HTML que se utilizará como ejemplo a lo largo de este documento. Es parte de una historia de Alicia en el País de las Maravillas:
html_doc = “””
< La historia del lirón…
< cuerpo>
< p class=”title”><b>La historia del lirón</b></p>
< p class=”story”>Eran tres hermanas pequeñas; y sus nombres eran
< a href=”http://example.com/elsie” class=”sister” id=”link1″>Elsie</a>,
< a href=”http://example.com/lacie” class=”sister” id=”link2″> Lacie</a> y
< a href=”http://example.com/tillie” class=”sister” id=”link3″>Tillie</a>;
y vivían en el fondo de un pozo.
< p class=”story”>…</p>
“””
Pasar el documento de las “tres hermanas” por Beautiful Soup nos da un objeto BeautifulSoup, que representa el documento como una estructura de datos anidados:
de bs4 import BeautifulSoup
soup = BeautifulSoup(html_doc, ‘html.parser’)
print(soup.prettytify())
# < html>
# < cabeza>
# < título>
# La historia del lirón
# </título>
# </head>
# < cuerpo>
# < p class=”title”>
# < b>
# La historia del lirón
# </b>
# </p>
# < p class=”story”>
# Había una vez tres hermanas pequeñas, y sus nombres eran
# < a class=”sister” href=”http://example.com/elsie” id=”link1″>
# Elsie
# </a>
# ,
# < a class=”sister” href=”http://example.com/lacie” id=”link2″>
# Lacie
# </a>
# y
# < a class=”sister” href=”http://example.com/tillie” id=”link2″>
# Tillie
# </a>
# y vivían en el fondo de un pozo.
# </p>
# < p class=”story”>
# …
# </p>
# </cuerpo>
# </html>
Aquí hay algunas formas sencillas de navegar por esa estructura de datos:
título de la sopa
# < título>La historia del lirón</título>
nombre.del.título.de.la.sopa
# u’title’
cadena.del.título.de.la.sopa
# u’The Dormouse’s story’
título.de.la.sopa nombre.del.padre
# u’head’
sopa.p
# < p class=”title”><b>La historia del lirón</b></p>
soup.p[‘clase’]
# u’title’
sopa.a
# < a class=”sister” href=”http://example.com/elsie” id=”link1″>Elsie</a>
soup.find_all(‘a’)
# [< a class=”sister” href=”http://example.com/elsie” id=”link1″>Elsie</a>,
# < a class=”sister” href=”http://example.com/lacie” id=”link2″> Lacie</a>,
# < a class=”sister” href=”http://example.com/tillie” id=”link3″>Tillie</a>]
soup.find(id=”link3″)
# < a class=”sister” href=”http://example.com/tillie” id=”link3″>Tillie</a>
Una tarea común es extraer todos los URLs encontrados dentro de las etiquetas <a> de una página:
para el enlace en soup.find_all(‘a’):
imprimir(link.get(‘href’))
# http://example.com/elsie
# http://example.com/lacie
# http://example.com/tillie
Otra tarea común es extraer todo el texto de una página:
print(soup.get_text())
# La historia del lirón
#
# La historia del lirón
#
# Había una vez tres hermanas pequeñas, y sus nombres eran
# Elsie,
# Lacie y
# Tillie;
# y vivían en el fondo de un pozo.
#
# …
Instalando una hermosa sopa
Si estás utilizando una forma continua de Debian o Ubuntu Linux, puedes introducir la Sopa Deliciosa con el administrador de paquetes del sistema:
$ puede conseguir introducir python-bs4 (para Python 2)
$ adepto consigue introducir python3-bs4 (para Python 3)
Wonderful Soup 4 se distribuye a través de PyPi, así que en caso de que no puedas introducirlo con el packager del sistema, puedes introducirlo con easy_install o pip. El nombre del paquete es beautifulsoup4, y un paquete similar trata de Python 2 y Python 3. Asegúrate de que utilizas la interpretación correcta de pip o easy_install para tu formulario Python (estos pueden llamarse pip3 y easy_install3 por separado en caso de que estés utilizando Python 3).
$ easy_install beautifulsoup4
$ pip introduce beautifulsoup4
(El paquete BeautifulSoup probablemente no es lo que necesitas. Esa es la última descarga significativa, Excelente Sopa 3. Un montón de programación utiliza BS3, así que todavía es accesible, sin embargo en caso de que estés componiendo un nuevo código deberías introducir beautifulsoup4.)
En caso de que no tengas easy_install o pip introducido, puedes descargar el tarball de fuente de Delightful Soup 4 e introducirlo con setup.py.
$ python setup.py introduce
Como último recurso, el permiso para la Sopa Deliciosa le permite unir toda la biblioteca con su solicitud. Puede descargar el tarball, duplicar su catálogo bs4 en la base de código de su aplicación, y utilizar Delightful Soup sin introducirlo por ningún medio.
Utilizo Python 2.7 y Python 3.2 para crear la Sopa Deliciosa, pero debería funcionar con otras formas en curso.
Cuestiones después del establecimiento
La sopa excelente está incluida en el código de Python 2. En el momento en que se introduce para su uso con Python 3, se cambia consecuentemente a código Python 3. En caso de que no introduzcas el paquete, el código no será cambiado. También ha habido informes en máquinas de Windows de que se ha introducido una adaptación inapropiada.
En la remota posibilidad de que obtengas el ImportError “No module named HTMLParser”, tu preocupación es que estás ejecutando la adaptación a Python 2 del código en Python 3.
En el caso de que obtengas el ImportError “No module named html.parser”, tu preocupación es que estés ejecutando la forma Python 3 del código en Python 2.
En los dos casos, su opción más sólida es expulsar totalmente del sistema el establecimiento de la Lovely Soup (contando cualquier índice hecho al desatar la bola de alquitrán) e intentar el establecimiento una vez más.
En la remota posibilidad de que obtengas el error de sintaxis “Estructura de la sentencia inválida” en espera ROOT_TAG_NAME = u'[document]’, tienes que cambiar el código de Python 2 por el de Python 3. Puedes hacerlo introduciendo el paquete:
$ python3 setup.py introduce
o de nuevo ejecutando físicamente el contenido de la transformación 2to3 de Python en el registro bs4:
$ 2to3-3.2 – w bs4