Beautiful Soup es una biblioteca de Python utilizada para extraer archivos html y xml. En este artículo entenderemos cómo podemos extraer todas las URLS de una página web que están anidadas dentro de las etiquetas <li>.
Módulo necesario e instalación:
- BeautifulSoup: nuestro módulo principal contiene un método para acceder a una página web a través de HTTP.
pip install bs4
- Requests: se utiliza para realizar una solicitud GET a la página web y obtener su contenido.
Nota: No necesitas instalarlo por separado ya que se descarga automáticamente con bs4, pero en caso de cualquier problema puedes descargarlo manualmente.
pip install requests
Acercarse
- Primero importaremos nuestras bibliotecas requeridas.
- Realizaremos una solicitud de obtención a la página web deseada de la que queremos todas las URL.
- Pasaremos el texto a la función BeautifulSoup y lo convertiremos en un objeto de sopa.
- Usando un bucle for buscaremos todas las etiquetas <li> en la página web.
- Si una etiqueta <li> tiene una etiqueta ancla, buscaremos el atributo href y almacenaremos su parámetro en una lista. Es la url que estábamos buscando.
- La impresión de la lista que contiene todas las direcciones URL.
Echemos un vistazo al código. Veremos qué sucede en cada paso significativo.
Paso 1: Inicialice el programa Python importando todas las bibliotecas requeridas y configurando la URL de la página web de la que desea que todas las URL estén contenidas en una etiqueta de anclaje.
En el siguiente ejemplo, tomaremos otro artículo geek para geeks sobre la implementación del web scraping usando BeautifulSoup y extraeremos todas las URL almacenadas en etiquetas ancla anidadas dentro de la etiqueta <li>.
El enlace del artículo es: https://www.geeksforgeeks.org/implementing-web-scraping-python-beautiful-soup/
Python3
# Importing libraries import requests from bs4 import BeautifulSoup # setting up the URL URL = 'https://www.geeksforgeeks.org/implementing-web-scraping-python-beautiful-soup/'
Paso 2: realizaremos una solicitud de obtención a la URL deseada y pasaremos todo el texto de ella a BeautifuLSoup y lo convertiremos en un objeto de sopa. Estableceremos el analizador como html.parser. Puede configurarlo de manera diferente según la página web que esté raspando.
Python3
# perform get request to the url reqs = requests.get(URL) # extract all the text that you received # from the GET request content = reqs.text # convert the text to a beautiful soup object soup = BeautifulSoup(content, 'html.parser')
Paso 3: Cree una lista vacía para almacenar todas las URL que recibirá como salida deseada. Ejecute un bucle for que repita todas las etiquetas <li> de la página web. Luego, para cada etiqueta <li>, verifique si tiene una etiqueta de anclaje. Si esa etiqueta de anclaje tiene un atributo href, almacene el parámetro de ese href en la lista que creó.
Python3
# Empty list to store the output urls = [] # For loop that iterates over all the <li> tags for h in soup.findAll('li'): # looking for anchor tag inside the <li>tag a = h.find('a') try: # looking for href inside anchor tag if 'href' in a.attrs: # storing the value of href in a separate # variable url = a.get('href') # appending the url to the output list urls.append(url) # if the list does not has a anchor tag or an anchor # tag does not has a href params we pass except: pass
Paso 4: Imprimimos la salida iterando sobre la lista de la url.
Python3
# print all the urls stored in the urls list for url in urls: print(url)
Código completo:
Python3
# Importing libraries import requests from bs4 import BeautifulSoup # setting up the URL URL = 'https://www.geeksforgeeks.org/implementing-web-scraping-python-beautiful-soup/' # perform get request to the url reqs = requests.get(URL) # extract all the text that you received from # the GET request content = reqs.text # convert the text to a beautiful soup object soup = BeautifulSoup(content, 'html.parser') # Empty list to store the output urls = [] # For loop that iterates over all the <li> tags for h in soup.findAll('li'): # looking for anchor tag inside the <li>tag a = h.find('a') try: # looking for href inside anchor tag if 'href' in a.attrs: # storing the value of href in a separate variable url = a.get('href') # appending the url to the output list urls.append(url) # if the list does not has a anchor tag or an anchor tag # does not has a href params we pass except: pass # print all the urls stored in the urls list for url in urls: print(url)
Producción: