Buscar..


Observaciones

En esta sección, discutimos qué es Beautiful Soup, para qué se usa y un breve resumen de cómo usarlo.

Beautiful Soup es una biblioteca de Python que utiliza su analizador html / xml preinstalado y convierte la página web / html / xml en un árbol que consta de etiquetas, elementos, atributos y valores. Para ser más exactos, el árbol consta de cuatro tipos de objetos, Tag, NavigableString, BeautifulSoup y Comment. Este árbol se puede "consultar" utilizando los métodos / propiedades del objeto BeautifulSoup que se crea a partir de la biblioteca del analizador.

Su necesidad: a menudo, puede tener una de las siguientes necesidades:

  1. Es posible que desee analizar una página web para determinar, cuántas de las etiquetas se encuentran, cuántos elementos de cada etiqueta se encuentran y sus valores. Es posible que desee cambiarlos.

  2. Es posible que desee determinar los nombres y valores de los elementos, de modo que pueda utilizarlos junto con otras bibliotecas para la automatización de páginas web, como Selenium .

  3. Es posible que desee transferir / extraer los datos que se muestran en una página web a otros formatos, como un archivo CSV o una base de datos relacional como SQLite o mysql. En este caso, la biblioteca lo ayuda con el primer paso, para comprender la estructura de la página web, aunque utilizará otras bibliotecas para realizar la transferencia.

  4. Es posible que desee saber cuántos elementos tienen un estilo de estilo CSS determinado y cuáles.

Secuencia para uso básico típico en su código Python:

  1. Importar la biblioteca de Beautiful Soup

  2. Abra una página web o texto html con la biblioteca BeautifulSoup, mencionando qué analizador se usará. El resultado de este paso es un objeto BeautifulSoup. (Nota: Este nombre de analizador mencionado, ya debe estar instalado como parte de sus paquetes de Python. Por ejemplo, html.parser , es un paquete incorporado con baterías que se incluye con Python. Puede instalar otros analizadores como lxml o html5lib .)

  3. Haga "consulta" o busque el objeto BeautifulSoup utilizando la sintaxis 'object.method' y obtenga el resultado en una colección, como un diccionario Python. Para algunos métodos, la salida será un valor simple.

  4. Usa el resultado del paso anterior para hacer lo que quieras hacer con él, en el resto de tu código de Python. También puede modificar los valores de elemento o los valores de atributo en el objeto de árbol. Las modificaciones no afectan la fuente del código html, pero puede llamar a métodos de formato de salida (como prettify ) para crear una nueva salida del objeto BeautifulSoup.

Métodos de uso común: por lo general, los métodos .find y .find_all se utilizan para buscar en el árbol, dando los argumentos de entrada.

Los argumentos de entrada son: el nombre de la etiqueta que se está buscando, los nombres de los atributos y otros argumentos relacionados. Estos argumentos podrían presentarse como: una cadena, una expresión regular, una lista o incluso una función.

Los usos comunes del objeto BeautifulSoup incluyen:

  1. Buscar por clase CSS
  2. Búsqueda por dirección de hipervínculo
  3. Búsqueda por elemento Id, tag
  4. Búsqueda por nombre de atributo. Valor de atributo.

Si necesita filtrar el árbol con una combinación de los criterios anteriores, también puede escribir una función que se evalúe como verdadera o falsa, y buscar por esa función.

Versiones

Versión Observaciones Nombre del paquete Fecha de lanzamiento
3.x Versión 3.2.1; Solo Python 2 hermoso 2012-02-16
4.x Versión 4.5.0; Python 2 y 3 beautifulsoup4 2016-07-20

Instalación o configuración

pip se puede utilizar para instalar BeautifulSoup. Para instalar la versión 4 de BeautifulSoup, ejecute el comando:

pip install beautifulsoup4

Tenga en cuenta que el nombre del paquete es beautifulsoup4 lugar de beautifulsoup , este último nombre significa versión antigua, vea old beautifulsoup

Un ejemplo de raspado "Hello World" de BeautifulSoup

from bs4 import BeautifulSoup
import requests

main_url = "https://fr.wikipedia.org/wiki/Hello_world"
req = requests.get(main_url)
soup = BeautifulSoup(req.text, "html.parser")

# Finding the main title tag.
title = soup.find("h1", class_ = "firstHeading")
print title.get_text()

# Finding the mid-titles tags and storing them in a list.
mid_titles = [tag.get_text() for tag in soup.find_all("span", class_ = "mw-headline")]

# Now using css selectors to retrieve the article shortcut links
links_tags = soup.select("li.toclevel-1")
for tag in links_tags:
    print tag.a.get("href")

# Retrieving the side page links by "blocks" and storing them in a dictionary
side_page_blocks = soup.find("div",
                            id = "mw-panel").find_all("div",
                                                      class_ = "portal")
blocks_links = {}
for num, block in enumerate(side_page_blocks):
    blocks_links[num] = [link.get("href") for link in block.find_all("a", href = True)]

print blocks_links[0]

Salida:

"Hello, World!" program
#Purpose
#History
#Variations
#See_also
#References
#External_links
[u'/wiki/Main_Page', u'/wiki/Portal:Contents', u'/wiki/Portal:Featured_content', u'/wiki/Portal:Current_events', u'/wiki/Special:Random', u'https://donate.wikimedia.org/wiki/Special:FundraiserRedirector?utm_source=donate&utm_medium=sidebar&utm_campaign=C13_en.wikipedia.org&uselang=en', u'//shop.wikimedia.org']

Al ingresar su analizador preferido al crear una instancia de Beautiful Soup, se evita el habitual Warning que declara que no parser was explicitely specified .

Se pueden utilizar diferentes métodos para encontrar un elemento dentro del árbol de la página web.

Aunque existen otros métodos, las CSS classes y los CSS selectors son dos formas útiles de encontrar elementos en el árbol.

Se debe tener en cuenta que podemos buscar etiquetas estableciendo su valor de atributo en Verdadero al buscarlas.

get_text() nos permite recuperar texto contenido dentro de una etiqueta. Lo devuelve como una sola cadena de Unicode. tag.get("attribute") permite obtener el valor de atributo de una etiqueta.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow