Merge pull request #326 from yunghog/master

Added python script for getting day-to-day horoscope using web scraping
This commit is contained in:
Bartick Maiti 2022-10-10 22:30:14 +05:30 committed by GitHub
commit e9780e61a9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 131 additions and 0 deletions

View File

@ -0,0 +1,70 @@
# Horoscope
> Python script to read day to day horoscope.
## Introduction
Horoscope Reader takes zodiac sign and gives out the horoscope readings for the given day. Information is obtained from [horoscope.com](https://www.horoscope.com/us/horoscopes/general/horoscope-general-daily-today.aspx?sign=1) using web scraping technique.
## Dependencies
Horoscope Reader uses `beautifulsoup` to scrape information from web and `requests` to fetch the webpage of [horoscope.com](https://www.horoscope.com/us/horoscopes/general/horoscope-general-daily-today.aspx?sign=1).
### Install the dependencies
To install dependencies run the command :
```bash
$ pip install -r requirements.txt
```
This will install `beautifulsoup` and `requests` (if you dont have already).
## Usage
Run the script.py
### Input
Input the number that corresponds to the zodiac sign. eg: If the sign is Cancer then input `4`.
```
Enter your Zodiac sign:
[1] Aries
[2] Taurus
[3] Gemini
[4] Cancer
[5] Leo
[6] Virgo
[7] Libra
[8] Scorpio
[9] Sagittarius
[10] Capricorn
[11] Aquarius
[12] Pisces
> 4
```
Input the number corresponding to the day you want to check. eg: If you want to check for yesterday then input `1`
```
Choose Day:
[1] Yesterday [2] Today [3] Tomorrow:
> 1
```
### Output
Outputs the horoscope reading. If you want to continue press `y` or press `n` to quit.
```
Horoscope Reading
---------------------------------------------
Oct 9, 2022 - Compliments are apt to feel like gold to you, Taurus. There's nothing you need more than love and affection on a day like this. Beware that you may end up as putty in the hands of whoever showers you with flattery. You may also resent this need for attention and not be willing to receive it graciously. This isn't the right attitude. Receive accolades with open arms and offer an equal amount of affection in return.
Do you want to read horoscope again [y/n] >
```
## Author : Samartha | [@yunghog](https://github.com/yunghog)

View File

@ -0,0 +1,2 @@
beautifulsoup4
requests

View File

@ -0,0 +1,59 @@
# Python script to get day-to-day horoscope
import os
import requests
import msvcrt
from bs4 import BeautifulSoup
def printBanner():
banner = '''
--------------------Read your Day-to-day horoscope------------------------
'''
print(banner)
def read_horoscope(sign: int, day: int) -> str:
if not isinstance(sign, int) or sign < 1 or sign > 12:
return "Input a valid number the represents the sign from 1 to 12"
if day < 1 or day > 3 or not isinstance(day, int):
return "Input a valid number the represents the day from 1 to 3"
days = ['yesterday', 'today', 'tomorrow']
url = (
f"https://www.horoscope.com/us/horoscopes/general/\
horoscope-general-daily-{days[day-1]}.aspx?sign={sign}"
)
soup = BeautifulSoup(requests.get(url).content, "html.parser")
return soup.find("div", class_="main-horoscope").p.text
def refresh():
os.system('cls')
printBanner()
again = 'y'
while again == 'y':
refresh()
zodiac_sign = int(input(
"Enter your Zodiac sign:\n\
[1] Aries\n[2] Taurus\n[3] Gemini\n[4] Cancer\n\
[5] Leo\n[6] Virgo\n[7] Libra\n[8] Scorpio\n\
[9] Sagittarius\n[10] Capricorn\n[11] Aquarius\n[12] Pisces\n> "
))
refresh()
print("Choose Day:\n[1] Yesterday\t[2] Today\t[3] Tomorrow:\n> ")
day = int(str(msvcrt.getch())[2])
refresh()
print("Horoscope Reading\n---------------------------------------------\n")
result = read_horoscope(zodiac_sign, day)
print(result)
print('\nDo you want to read horoscope again [y/n] > ')
again = str(msvcrt.getch())[2].lower()