BeautifulSoup es una de las bibliotecas más comunes en Python que se utiliza para navegar, buscar y extraer datos de páginas web HTML o XML. Los métodos más comunes usados para encontrar cualquier cosa en la página web son find() y find_all() . Sin embargo, hay una ligera diferencia entre estos dos, analicémoslos en detalle.
método buscar()
El método de búsqueda se utiliza para encontrar la primera etiqueta con el nombre o id especificado y devolver un objeto de tipo bs4.
Sintaxis: find_syntax=soup.find(“#Nombre del widget”, {“id”:”#Id nombre del widget en el que desea editar”}).get_text()
Ejemplo:
Por ejemplo, considere esta página web HTML simple que tiene diferentes etiquetas de párrafo.
HTML
<!DOCTYPE html> <html> <head> Geeks For Geeks </head> <body> <div> <p id="vinayak">King</p> <p id="vinayak1">Prince</p> <p id="vinayak2">Queen</p> </div> <p id="vinayak3">Princess</p> </body> </html>
Para obtener el texto King, usamos el método find.
Python
# Find example # Import the libraries BeautifulSoup # and os from bs4 import BeautifulSoup as bs import os # Remove the last segment of the path base=os.path.dirname(os.path.abspath(__file__)) # Open the HTML in which you want to # make changes html=open(os.path.join(base, 'gfg.html')) # Parse HTML file in Beautiful Soup soup=bs(html, 'html.parser') # Obtain the text from the widget after # finding it find_example=soup.find("p", {"id":"vinayak"}).get_text() # Printing the text obtained received # in previous step print(find_example)
Producción:
método find_all()
El método find_all se usa para encontrar todas las etiquetas con el nombre o id de etiqueta especificado y devolverlas como una lista de tipo bs4.
Sintaxis:
para la palabra en sopa.find_all(‘id’):
find_all_syntax=palabra.get_text()
imprimir (find_all_syntax)
Ejemplo:
Por ejemplo, considere esta página web HTML simple que tiene diferentes etiquetas de párrafo.
HTML
<!DOCTYPE html> <html> <head> Geeks For Geeks </head> <body> <div> <p id="vinayak">King</p> <p id="vinayak1">Prince</p> <p id="vinayak2">Queen</p> </div> <p id="vinayak3">Princess</p> </body> </html>
Para obtener todo el texto, es decir, Rey, Príncipe, Reina, Princesa, usamos el método find_all.
Python
# find_all example # Import the libraries BeautifulSoup # and os from bs4 import BeautifulSoup as bs import os # Remove the last segment of the path base=os.path.dirname(os.path.abspath(__file__)) # Open the HTML in which you want to # make changes html=open(os.path.join(base, 'gfg.html')) # Parse HTML file in Beautiful Soup soup=bs(html, 'html.parser') # Construct a loop to find all the # p tags for word in soup.find_all('p'): # Obtain the text from the received # tags find_all_example=word.get_text() # Print the text obtained received # in previous step print(find_all_example)
Producción:
Tabla de diferencias entre find y find_all
S. No. |
encontrar |
encuentra todos |
---|---|---|
1 |
find se utiliza para devolver el resultado cuando el elemento buscado se encuentra en la página. |
find_all se utiliza para devolver todas las coincidencias después de escanear todo el documento. |
2 |
Se utiliza para obtener simplemente la primera etiqueta del objeto HTML entrante cuya condición se cumple. |
Se utiliza para obtener todos los objetos HTML entrantes cuya condición se cumple. |
3 |
El tipo de retorno de búsqueda es <clase ‘bs4.element.Tag’>. |
El tipo de devolución de find_all es <clase ‘bs4.element.ResultSet’> |
4 |
Podemos imprimir solo la primera búsqueda como salida. |
Podemos imprimir cualquier búsqueda, es decir, segunda, tercera, última, etc. o todas las búsquedas como salida. |
5 |
Prototipo: buscar (etiqueta, atributos, recursivo, texto, palabras clave) |
Prototipo: findAll(etiqueta, atributos, recursivo, texto, límite, palabras clave) |