見出し画像

Pythonでしいたけ占いを自動で取得する

今回はPythonを使って自分の星座のしいたけ占いを自動で取得するプログラムを作りました。


使用したライブラリ

requests
BeautifulSoup
calendar
datetime

しいたけ占いとは?

しいたけ占い(週間)は毎週月曜更新で、1週間の運勢をオーラカラーと共に診断するサイトです。今の状況と、これからどうすればよいのかを解説しているところが魅力で私自身手軽に見てこれからどうしようかなぁと考える指針にしています。


主な作成法

しいたけ占いは毎週月曜日に占いが更新されます。そのためURLが毎週変更されます。さらにそれぞれの星座を英語表記にした単語が最後尾についています。

https://shiitakeuranai.jp/weekly-horoscope/2024-02-12/aries

しいたけ占い 羊座

この場合執筆日時(2024/02/18)週分である2024-02-12がURLに含まれています。また羊座の英称ariesが最後尾についています。これをプログラムで取得できるようにするのが必要になってきます。

星座を英語表記に変える
Pythonの辞書型を使用してユーザーの入力した星座を英語表記に変えます。

con = { '牡羊座': 'aries', 'おうし座': 'taurus', '双子座': 'gemini', '蟹座': 'cancer', '獅子座': 'leo', '乙女座': 'virgo', '天秤座': 'libra', 'さそり座': 'scorpio', '射手座': 'sagittarius', 'やぎ座': 'capricorn', '水瓶座': 'aquarius', '魚座': 'pisces' }

def serch(x):#辞書から英訳する
    constellaton=con[x]
    return constellaton

辞書名[key名] を入力すると : で繋がれているvalueが出力されていることを利用しています。

その週のしいたけ占いを取得

毎週月曜日に更新されるためURLが毎週変更されてしまいます。そのためcalendarとdatetimeライブラリを使用してその日がどの週に属しているかを探索します。

2024年2月のカレンダー

today_date = datetime.date.today()
year = today_date.year
month1 = today_date.month
day = today_date.day
x=calendar.monthcalendar(year,month1)#xに一週間ごとのリストを作成

for i in x:
    if i[0]<=int(day):#i[0](月曜日)と比べる
        date=i[0]

このコードからもし今日がその週の初め(月曜日)より大きい数字の日付であるならばその初めの日にちがしいたけ占いで使用されているURLであるといえます。

この二つを変数datesに格納し文の足し算を行います。

dates=(str(year)+'-0'+str(month1)+'-'+str(date))
url=('https://shiitakeuranai.jp/weekly-horoscope/'+str(dates)+'/'+serch(x))

これで正しいURLを獲得することができました。

getを使う

正しいURLを獲得できたことでrequests、BeautifulSoupを使いwebを取得できるようになります。

以下のサイトで詳しくrequests、BeautifulSoupが説明されているのでこちらでご確認ください

以下作成したコード

import requests
from bs4 import BeautifulSoup
import calendar
import datetime
today_date = datetime.date.today()
year = today_date.year
month1 = today_date.month
day = today_date.day
x=calendar.monthcalendar(year,month1)
for i in x:
    if i[0]<=int(day):
        date=i[0]

x=str(input('あなたの星座'))
con = {
    '牡羊座': 'aries',
    'おうし座': 'taurus',
    '双子座': 'gemini',
    '蟹座': 'cancer',
    '獅子座': 'leo',
    '乙女座': 'virgo',
    '天秤座': 'libra',
    'さそり座': 'scorpio',
    '射手座': 'sagittarius',
    'やぎ座': 'capricorn',
    '水瓶座': 'aquarius',
    '魚座': 'pisces'
}

def serch(x):#辞書から英訳する
    constellaton=con[x]
    return constellaton


dates=(str(year)+'-0'+str(month1)+'-'+str(date))

url=('https://shiitakeuranai.jp/weekly-horoscope/'+str(dates)+'/'+serch(x))

response=requests.get(url)

soup = BeautifulSoup(response.text, "html.parser")

print(dates)
print('今週のあなたを分析')
print()
for i in soup.select("body > main > section:nth-child(1) > div > div._root_hvc32_1._content_vbk6l_74 > p"):
    print(i.getText())
print()
print('今週どう乗り切る?')
for i in soup.select("body > main > section:nth-child(3) > div > div > p"):
    print(i.getText())

この記事が気に入ったらサポートをしてみませんか?