Extrae todas las URL que están anidadas dentro de las etiquetas <li> usando BeautifulSoup

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

  1. Primero importaremos nuestras bibliotecas requeridas.
  2. Realizaremos una solicitud de obtención a la página web deseada de la que queremos todas las URL.
  3. Pasaremos el texto a la función BeautifulSoup y lo convertiremos en un objeto de sopa.
  4. Usando un bucle for buscaremos todas las etiquetas <li> en la página web.
  5. 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.
  6. 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:

Publicación traducida automáticamente

Artículo escrito por hg070401 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *