Si miras el código fuente de la página anterior, verás que puedes encontrar los nombres de las películas y su puntuación. Afortunadamente para nosotros, RottenTomatoes no carga la lista de películas de forma dinámica, por lo que podemos seguir adelante y extraer la información necesaria.
En primer lugar, inspeccionamos la página y vemos cómo está estructurado el HTML. Para ello, puedes hacer clic con el botón derecho del ratón sobre el título de una película y seleccionar la opción «Inspeccionar elemento». Debería aparecer la siguiente ventana:
He utilizado la línea roja para resaltar la información útil de esta imagen. Puedes ver que la página muestra las películas más populares en una tabla y que hay cuatro celdas en cada fila de la tabla (elemento <tr>).
La primera celda contiene la posición de la película, la segunda tiene información sobre las valoraciones (elemento con la clase tMeterScore), la tercera incluye el título de la película y la última celda nos da el número de reseñas.
Conociendo esta estructura, ya podemos empezar a extraer la información que necesitamos.
import requests
from bs4 import BeautifulSoup
links_base = 'https://www.rottentomatoes.com'
scraped_url = 'https://www.rottentomatoes.com/top/bestofrt/'
page = requests.get(scraped_url)
soup = BeautifulSoup(page.content, 'html.parser')
table = soup.find("table", class_="table") # We extract just the table code from the entire page
rows = table.findAll("tr") # This will extract each table row, in an array
movies = []
for index, row in enumerate(rows):
if index > 0: # We skip the first row since this row only contains the column names
link = row.find("a") # We get the link from the table row
rating = row.find(class_="tMeterScore") # We get the element with the class tMeterScore from the table row
movies.append({
"link": links_base + link.get('href'), # The href attribute of the link
"title": link.string.strip(), # The strip function removes blank spaces at the beginning and the end of a string
"rating": rating.string.strip().replace(" ", ""), # We remove from the string and the blank spaces
})
print(movies)
Al ejecutar este código, deberías obtener un resultado como este:
En este ejemplo, estamos extrayendo el contenido de la tabla y recorriendo las filas de la tabla. Dado que la primera fila solo contiene los nombres de las columnas, la omitiremos.
En el resto de las filas, continuamos el proceso extrayendo el elemento de anclaje (<a>) y el elemento span con la clase «tMeterScore». Una vez que los tenemos, ya podemos recuperar la información necesaria.
El título de la película se encuentra dentro del elemento de ancla, el enlace es el atributo «href» del ancla y la puntuación se encuentra dentro del elemento span con la clase «tMeterScore». Simplemente creamos un nuevo diccionario para cada fila y lo añadimos a nuestra lista de películas.