Herramientas de usuario

Herramientas del sitio


informatica:programacion:python:modulos:beautiful_soup

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
informatica:programacion:python:modulos:beautiful_soup [2021/02/09 22:20] – [Uso] tempwininformatica:programacion:python:modulos:beautiful_soup [2024/06/14 17:24] (actual) – [Recursos] tempwin
Línea 4: Línea 4:
  
   * [[https://www.crummy.com/software/BeautifulSoup/|Web oficial]]   * [[https://www.crummy.com/software/BeautifulSoup/|Web oficial]]
 +  * [[https://www.crummy.com/software/BeautifulSoup/bs4/doc/|Documentación]]
  
  
Línea 110: Línea 111:
  
 amazon() amazon()
 +</code>
 +===== Ejemplo 2: leyendo HTML de una web =====
 +
 +<code python>
 +from bs4 import BeautifulSoup
 +import requests
 +
 +url = "https://direccion.web"
 +
 +result = requests.get(url)
 +
 +# Contenido de la petición
 +# print(result.text)
 +
 +doc = BeautifulSoup(result.text, "html.parser")
 +
 +# Mostrarlo bien sangrado
 +# print(doc.prettify())
 +
 +"""
 +Buscar por un texto (y aprovechar el resultado para obtener el elemento padre)
 +Queremos llegar a un precio que comienza por el signo "$"
 +"""
 +
 +prices = doc.find_all(text="$")
 +parent = prices[0].parent
 +strong = parent.find("strong")
 +print(strong.string)
 +</code>
 +
 +===== Búsquedas =====
 +
 +  * ''find()'': busca el primer elemento que encuentre
 +  * ''find_all()'': busca todos los elementos
 +
 +Podemos buscar más de un elemento a la vez:
 +
 +<code python>
 +doc.find_all(["p", "div", "li"])
 +</code>
 +
 +Podemos buscar un elemento que tenga cierto texto:
 +
 +<code python>
 +doc.find_all(["option"], text="Rojo")
 +</code>
 +
 +Buscar atributos de cierto elemento, por ejemplo el atributo ''value'' de la etiqueta ''option'':
 +
 +<code python>
 +doc.find_all(["option"], value="rojo")
 +</code>
 +
 +Búsqueda por clases CSS:
 +
 +<code python>
 +tag = doc.find_all(class_="btn-item")
 +</code>
 +
 +<WRAP center round info 60%>
 +''class'' es una palabra reservada de Python, así que el argumento para buscar por clases lleva un guion bajo, y así diferenciarlo.
 +</WRAP>
 +
 +Búsqueda por expresión regular:
 +
 +<code python>
 +import re
 +
 +# Buscar un signo de dólar y lo que venga después
 +tags = doc.find_all(text=re.compile("\$.*"))
 +</code>
 +
 +Limitar los resultados de búsqueda:
 +
 +<code python>
 +import re
 +
 +# Buscar un signo de dólar y lo que venga después
 +tags = doc.find_all(text=re.compile("\$.*"), limit=1)
 +</code>
 +
 +Búsqueda por proximidad en la estructura de árbol, por ejemplo, nodos hermanos, padre y descendientes:
 +
 +<code python>
 +from bs4 import BeautifulSoup
 +import requests
 +
 +url = "https://coinmarketcap.com/"
 +result = requests.get(url).text
 +doc = BeautifulSoup(result, "html.parser")
 +
 +tbody = doc.tbody
 +trs = tbody.contents
 +
 +print(trs[1].next_sibling)
 +
 +# Nodo padre:
 +print(trs[0].parent)
 +
 +# Descendientes
 +print(trs[0].descendants)
 +#print(trs[0].children)
 +#print(trs[0].contents)
 +</code>
 +
 +Recorrer una tabla buscando precios:
 +
 +<code python>
 +from bs4 import BeautifulSoup
 +import requests
 +
 +url = "https://coinmarketcap.com/"
 +result = requests.get(url).text
 +doc = BeautifulSoup(result, "html.parser")
 +
 +tbody = doc.tbody
 +trs = tbody.contents
 +
 +prices = {}
 +
 +for tr in trs[:10]:
 +    for td in tr.contents:
 +        name, price = tr.contents[2:4]
 +        fixed_name = name.p.string
 +        fixed_price = price.a.string
 +        
 +        prices[fixed_name] = fixed_price
 +        
 +print(prices)  
 </code> </code>
 ===== Recursos ===== ===== Recursos =====
  
   * [[https://towardsdatascience.com/top-5-beautiful-soup-functions-7bfe5a693482|Top 5 Beautiful Soup Functions That Will Make Your Life Easier]]   * [[https://towardsdatascience.com/top-5-beautiful-soup-functions-7bfe5a693482|Top 5 Beautiful Soup Functions That Will Make Your Life Easier]]
 +  * [[https://www.youtube.com/watch?v=gRLHr664tXA| Beautiful Soup 4 Tutorial #1 - Web Scraping With Python ]]
informatica/programacion/python/modulos/beautiful_soup.1612905657.txt.gz · Última modificación: por tempwin