Rascando un sitio web dinámico usando Selenium o Beautiful Soup
Estoy intentando hacer web scraping en este sitio web dinámico para obtener los nombres de los cursos y los horarios de las clases ofrecidos durante un semestre: https://www.utsc.utoronto.ca/registrar/timetable
El problema es que cuando ingresas al sitio web por primera vez, aún no se muestran los cursos, solo después de seleccionar las “Sesiones” y hacer clic en “Buscar cursos” comenzarán a aparecer los cursos.
Aquí es donde comienzan los problemas:
1) No puedo usar
html = urlopen(url).read()
con urllib.request, ya que solo mostrará el HTML de la página cuando no haya nada.
2) Hice una búsqueda rápida sobre cómo hacer web scraping en sitios web dinámicos y encontré un código como este:
import requests
url = 'https://www.utsc.utoronto.ca/registrar/timetable'
r= requests.get(url)
data = r.json()
print(data)
sin embargo, cuando lo ejecuto, devuelve “JSONDecodeError: Expecting value” y no tengo idea de por qué ocurre esto cuando ha funcionado en otros sitios web dinámicos.
Realmente no tengo que usar Selenium o Beautiful Soup, así que si hay mejores alternativas, con gusto las probaré. También me preguntaba cuando:
html = urlopen(url).read()
¿Cuál es el formato del HTML que se devuelve? Quiero saber si puedo simplemente copiar el HTML cambiado al inspeccionar el sitio web después de seleccionar las sesiones y hacer clic en buscar.
davy.ai
Solución:
La mejor manera de hacer web scraping en este sitio web dinámico es usar Selenium. Selenium es un marco de automatización web que se puede utilizar para controlar un navegador web y para sacar datos de sitios web dinámicos.
Para usar Selenium, necesitarás instalar el paquete Selenium y un driver web para el navegador que desees usar. Una vez que hayas instalado el paquete Selenium y el driver web, puedes utilizar el siguiente código para hacer web scraping de los nombres de los cursos y los horarios de las clases:
El HTML que devuelve
urlopen(url).read()
es el HTML de la página cuando no se ha seleccionado nada. Para obtener el HTML de la página después de seleccionar la(s) sesión(es) y hacer clic en el botón de Search for Courses, puedes utilizar el atributodriver.page_source
.