有給医のライフハック記録

医師の語る人生最適化戦略

サイト更新を検出するためのpythonスクリプト製造

学会サイト更新の検出プログラム

専門医の修行も終わるということで、試験やら何やらが今後に控えているのですけれど。

なんか、当該のwebサイトがなかなか更新されず、試験受験の申し込みができない状況になってます。

主催に問い合わせるも「いつか更新されっから。待っとけ('ω')ノ」みたいな、ものすごく適当な感じであしらわれ、困ってしまいました。

そこで、pythonでちょっとしたスクリプトを作り、サイト更新を検出するプログラムを製造しました。

イメージする挙動

・定期的に該当する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のスリープモードで挙動できるか検討



語郎