【要約】推しグループのブログから予定を取得してGoogle Calendarに自動登録した [Zenn_Python] | Summary by TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
開発者が、推しグループのブログから予定を自動取得する仕組みを運用する中で、HTML構造の変化によりプログラムが動作しなくなる問題に直面した。当初の実装は、サイト側の軽微な変更に対して極めて脆弱な状態であった。具体的には以下の課題があった。
- ・特定のstyle属性やHTMLの階層位置に依存した抽出ロジック。
- ・正規表現を用いた強引なHTMLタグの削除による、予期せぬ文字列の混入。
- ・「1行=1予定」という、改行位置の変化に弱いデータ構造の前提。
// Approach
開発者は、HTMLの形ではなく「人間が情報を読み取る際の手がかり」に着目した抽出ロジックへの刷新を行った。構造ではなく、テキストが持つ意味をトリガーに情報を特定する手法を採用した。
- ・「今後のスケジュール」という文字列を起点に、親要素を遡って予定ブロックを特定。
- ・日付パターン(
\d{1,2}/\d{1,2}\([^)]+)を検出し、次の日付が現れるまでを同一イベントとして結合。 - ・イベント名と日付を組み合わせた複合キーによる、Google Calendarへの重複登録防止。
// Result
開発者は、サイト側のHTML構造やスタイルが変更されても、予定表の内容が維持されている限り動作する堅牢な仕組みを構築した。これにより、以下の成果を得ている。
- ・手動での予定登録作業に伴う工数の削減。
- ・HTML構造の変化によるスクレイピング失敗の劇的な低減。
- ・「意味」に基づいた、より人間に近いデータ抽出ロジックの実現。
Senior Engineer Insight
> 本件は、スクレイピングにおける「構造」から「意味」への転換という本質的な課題を扱っている。DOM構造への依存は、フロントエンドの変更に対して極めて脆弱だ。人間が認識する「見出し」や「日付形式」といったセマンティックな情報をトリガーにすることで、保守性は大幅に向上する。ただし、テキストパターン自体が変更された際の検知策(監視)も併せて検討すべきである。実戦投入においては、抽出失敗を検知するアラート設計が不可欠だ。