Python BeautifulSoup no extrae todas las URL.
Estoy tratando de encontrar todas las URLs en esta página: https://courses.students.ubc.ca/cs/courseschedule?pname=subjarea&tname=subj-all-departments
Más específicamente, quiero los enlaces que están hiperenlazados bajo cada “Código de materia”. Sin embargo, cuando ejecuto mi código, apenas se extraen enlaces.
Me gustaría saber por qué está ocurriendo esto y cómo puedo solucionarlo.
from bs4 import BeautifulSoup
import requests
url = "https://courses.students.ubc.ca/cs/courseschedule?pname=subjarea&tname=subj-all-departments"
page = requests.get(url)
soup = BeautifulSoup(page.text, features="lxml")
for link in soup.find_all('a'):
print(link.get('href'))
Este es mi primer intento en web-scraping…
davy.ai
El problema con tu código es que está encontrando todas las etiquetas de anclaje HTML (
<a>
) en la página e imprimiendo sus atributoshref
, sin importar la ubicación o el contexto de la etiqueta de anclaje.Para extraer solo las URL que están hiperenlazadas bajo cada “Código de Asignatura”, debes apuntar a esos elementos HTML específicos. Una forma de hacer esto es encontrar la tabla HTML (
<table>
) que contiene los códigos de asignatura y sus respectivos enlaces, y luego iterar a través de las filas (<tr>
) y celdas (<td>
) de la tabla.Aquí tienes un fragmento de código actualizado que debería lograr esto:
Este código encuentra la tabla HTML con clase
table
, luego itera a través de cada fila en la tabla. Para cada fila, verifica si hay al menos dos celdas (la primera celda es el código de asignatura y la segunda celda debería contener el hiperenlace). Si se encuentran dos celdas, extrae el texto del código de asignatura y la URL del atributohref
de la etiqueta de anclaje en la segunda celda.¡Espero que esto te ayude a extraer las URL que necesitas!