#librerías necesarias para scraping sencillo
import requests
from bs4 import BeautifulSoup
#introducción de datos por parte del usuario para saber que película buscar
print("Indica de qué película quieres ver la nota media:\n")
movie = input()
#creación de la sesión para que gestione las cookies automáticamente
s = requests.Session()
#creación del header de la siguiente requests emulando al navegador
headers = {
'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:99.0) Gecko/20100101 Firefox/99.0',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8',
'Accept-Language': 'en-US,en;q=0.5',
'Connection': 'keep-alive',
'Upgrade-Insecure-Requests': '1',
'Sec-Fetch-Dest': 'document',
'Sec-Fetch-Mode': 'navigate',
'Sec-Fetch-Site': 'none',
'Sec-Fetch-User': '?1',
'If-Modified-Since': 'Tue, 12 Apr 2022 17:21:12 GMT',
'If-None-Match': '"d4d054ccd58680986b3fce9212a093e4-gzip"',
'Cache-Control': 'max-age=0',
}
#request a la main page para conseguir las cookies si hicieran falta
s.get('https://www.filmaffinity.com/es/main.html', headers=headers)
headers = {
'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:99.0) Gecko/20100101 Firefox/99.0',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8',
'Accept-Language': 'en-US,en;q=0.5',
'Connection': 'keep-alive',
'Referer': 'https://www.filmaffinity.com/es/search.php?stext=anime',
'Upgrade-Insecure-Requests': '1',
'Sec-Fetch-Dest': 'document',
'Sec-Fetch-Mode': 'navigate',
'Sec-Fetch-Site': 'same-origin',
'Sec-Fetch-User': '?1',
}
#creación de los params que requiere la request que se deberán pasar
params = {
'stext': movie,
}
# request y extracción de la primera URL que devuelve filmaffinity
response = s.get('https://www.filmaffinity.com/es/search.php', headers=headers, params=params)
soup = BeautifulSoup(response.text, 'html.parser')
movieLink = soup.find('div', {'class': 'mc-poster'}).find('a').get('href')
#requesta a la url extraída para recoger el detalle de la película
response = s.get(movieLink, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')
#recogida de la nota media según tags analizados previamente
avgRating = soup.find('div', {'id': 'movie-rat-avg'}).text
#presentación por pantalla de datos recogidos
print(f'\nLa nota media de {movie.upper()} es {avgRating}')