スクレイピングのsleep機能等が正しく機能しているか不安です。
特定サイトの特定文字に関する更新有無を知らせるアプリケーションを作成しました。
URLから文字情報をbeautiful soopでスクレイピングし、特定文字の更新があったかを知らせるツールです。
関数 check
URLのスクレイピング > 特定文字のチェック >更新があればメッセージ送信
関数 action
上記 checkを10分に1度実行することを連続して行う
という仕組みです。
スクレイピングのマナーとして、連続したアクセスは避けて閲覧先のサーバーの負担をかけないようにすることは一応は把握しているのですが、自分のコードが迷惑をかけていないか自信がありません。逮捕の事件などもあって心配です。
sleepのかけ方が正しいか、もしくはdef actionの方で10分毎に設定している箇所など、アドバイスいただけないでしょうか。
python
1def check(): 2 for i in range(len(target_url)): 3 data = requests.get(target_url[i], headers = headers) 4 data.encoding = data.apparent_encoding 5 data = data.text 6 soup = BeautifulSoup(data, "html.parser") 7 time.sleep(5) 8 9 detail = soup.find('body').text.encode("UTF-8") 10 11 keyword = 'XXXX' 12 keyword2 = keyword.encode("UTF-8") 13 14 if (keyword2 in detail) == True: 15 (略:メッセージ送付に関わる実行コード) 16 17def action(): 18 schedule.every(10).minutes.do(check) 19 20 while True: 21 schedule.run_pending() 22 time.sleep(5) 23 24action() 25 26
試したこと
def checkのif文が常にTrueになるようにした上で、def actionの部分を1分毎実施に変更して、頻度を確認したところ、正しいと思われる時間間隔でメッセージが来るようになりました。その間スクレイピングがずっと行われていないのであれば良いのですが、、
回答2件
あなたの回答
tips
プレビュー