¿Cómo consultar el horóscopo usando Python?

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:

Aquí tenemos que usar la clase div «horóscopo principal»

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *