学会サイト更新の検出プログラム
専門医の修行も終わるということで、試験やら何やらが今後に控えているのですけれど。
なんか、当該のwebサイトがなかなか更新されず、試験受験の申し込みができない状況になってます。
主催に問い合わせるも「いつか更新されっから。待っとけ('ω')ノ」みたいな、ものすごく適当な感じであしらわれ、困ってしまいました。
イメージする挙動
・定期的に該当するwebページを巡回
・申し込みフォームの文言をターゲットにし、変更の有無を検出する。
・変更があれば、メールで送信させる。
・定期的に巡回する際、PCがスリープモードでも実行できるか。
ソースコード(製造中)
import requests import bs4 import time def web_scraping(): res = requests.get('https://www.●●●') page_soup = bs4.BeautifulSoup(res.content,'lxml') print(page_soup('form')) target_word = ["終了"] for element in page_soup('form'): print("********") print(element.text) if element.text in target_word: print(">>>>>空席なし") else: print(">>>>>空席あり") for i in range(5): time.sleep(10) web_scraping()
動作原理
上記コードで想定する挙動の6割ほどは完成しています。
最初の部分で、サイト内をスクレイピングさせる関数を定義しています。ここで使用しているのはrequestsモジュールとbeautiful soupモジュールです。pythonでwebスクレイピングする際に定番で出てくるモジュールとなっています。resにHTMLのデータを丸ごと渡し、さらに渡したデータをHTMLでパースするためにbs4の関数を利用しています。
今回、ターゲットとしているサイトの、問題となっている部分は、formタグ内にありました(このあたりは解析するサイトによって当然異なります。各自でアレンジです)。ですので解析する部分はformタグのテキスト部分を検索しています。基本、その部分は「終了」となっておりますので、if文は真になり、「空席なし」と表示されます。それ以外の文言がどうなるのか分からないので、他の文言が出たらif文はelse節に渡り、「空席あり」と表示させます。
あとは、上記で作った関数を、最後のforループで回すだけです。time.sleepで一定の時間を経過させたあとに関数を実行させます。上記の例では全部でループは5回、間隔は10秒です。あまり詰め過ぎるとサイトの負荷が強いので、気をつけます。
課題
・メール送信部分
・PCのスリープモードで挙動できるか検討
語郎