En este artículo vamos a ver cómo obtener un horóscopo un día antes, tanto ese día como el día siguiente usando Beautifulsoup.
Módulo necesario:
- bs4 : Beautiful Soup (bs4) es una biblioteca de Python para extraer datos de archivos HTML y XML. Este módulo no viene integrado con Python. Para instalar esto, escriba el siguiente comando en la terminal.
pip install bs4
- requests : Request le permite enviar requests HTTP/1.1 de manera extremadamente fácil. Este módulo tampoco viene integrado con Python. Para instalar esto, escriba el siguiente comando en la terminal.
pip install requests
Implementación paso a paso:
Paso 1: Importación de módulos
El módulo de requests le permite enviar requests HTTP usando Python. La solicitud HTTP devuelve un objeto de respuesta con todas las respuestas de la página web mencionada y BeautifulSoup es una biblioteca de Python para extraer datos de archivos HTML y XML.
Python3
import requests from bs4 import BeautifulSoup
Paso 2: Definición de la función “horóscopo”
Esta función tomará dos variables como entrada «zodiac_sign» y «day», que será el signo zodiacal especificado por el usuario y el día en el que el usuario desea conocer su horóscopo. Esto luego se enviará a la URL del sitio web, que en nuestro caso, será www.horoscope.com en las secciones «{day}» y «{zodiac_sign}» respectivamente.
Esto asegurará que los datos que queremos sean del día especificado y el ingreso del signo zodiacal por parte del usuario. Después de eso, se enviará una solicitud HTTP al sitio web y, con la ayuda de Beautiful Soup, extraeremos los datos del archivo HTML del sitio web.
Luego, después de navegar un poco, descubrimos que los datos del horóscopo que necesitamos están presentes en la clase «horóscopo principal», que encontraremos en la función de sopa.buscar() y después de extraer la string de texto del párrafo, simplemente la devolveremos en el formato de string.
Python3
# importing necessary modules import requests from bs4 import BeautifulSoup def horoscope(zodiac_sign: int, day: str) -> str: # website taking the user input variables url = ( "https://www.horoscope.com/us/horoscopes/general/" f"horoscope-general-daily-{day}.aspx?sign={zodiac_sign}" ) # soup will contain all the website's data soup = BeautifulSoup(requests.get(url).content, "html.parser") # print(soup) # we will search for main-horoscope # class and we will simply return it return soup.find("div", class_="main-horoscope").p.text
Producción:
Nota: Esto es solo código HTML o datos sin procesar.
Paso 3: Definición de la función principal
En primer lugar, almacenaremos todas las strings del signo zodiacal como clave y un número específico como su valor en un diccionario. Luego, le pediremos al usuario que ingrese su signo zodiacal, lo que dará un número de nuestro diccionario y lo almacenará como «zodiac_sign» y, de manera similar, almacenaremos el día en nuestra variable «día». Esto luego se enviará a la función de horóscopo, que generará una string que devolveremos al final. Esta string será el horóscopo según lo dicho por el sitio web.
Python3
if __name__ == "__main__": # dictionary for storing all zodiac signs dic={'Aries':1,'Taurus':2,'Gemini':3, 'Cancer':4,'Leo':5,'Virgo':6,'Libra':7, 'Scorpio':8,'Sagittarius':9,'Capricorn':10, 'Aquarius':11,'Pisces':12} # asking for user's input print('Choose your zodiac sign from below list : \n', '[Aries,Taurus,Gemini,Cancer,Leo,Virgo,Libra,\ Scorpio,Sagittarius,Capricorn,Aquarius,Pisces]') zodiac_sign = dic[input("Input your zodiac sign : ")] print("On which day you want to know your horoscope ?\n", "Yesterday\n", "Today\n", "Tomorrow\n") day = input("Input the day : ").lower() # the data will be sent to the horoscope function horoscope_text = horoscope(zodiac_sign, day) # then we will simply print the resulting string print(horoscope_text)
A continuación se muestra la implementación completa:
Python3
import requests from bs4 import BeautifulSoup def horoscope(zodiac_sign: int, day: str) -> str: url = ( "https://www.horoscope.com/us/horoscopes/general/" f"horoscope-general-daily-{day}.aspx?sign={zodiac_sign}" ) soup = BeautifulSoup(requests.get(url).content, "html.parser") # print(soup.find("div", class_="main-horoscope").p.text) return soup.find("div", class_="main-horoscope").p.text if __name__ == "__main__": dic = {'Aries': 1, 'Taurus': 2, 'Gemini': 3, 'Cancer': 4, 'Leo': 5, 'Virgo': 6, 'Libra': 7, 'Scorpio': 8, 'Sagittarius': 9, 'Capricorn': 10, 'Aquarius': 11, 'Pisces': 12} print('Choose your zodiac sign from below list : \n', '[Aries,Taurus,Gemini,Cancer,Leo,Virgo,Libra,\ Scorpio,Sagittarius,Capricorn,Aquarius,Pisces]') zodiac_sign = dic[input("Input your zodiac sign : ")] print("On which day you want to know your horoscope ?\n", "Yesterday\n", "Today\n", "Tomorrow\n") day = input("Input the day : ").lower() horoscope_text = horoscope(zodiac_sign, day) print(horoscope_text)
Producción:
Publicación traducida automáticamente
Artículo escrito por saranshsahgal y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA