【要約】119自治体の議会議事録を一括スクレイピングする : kensakusystem.jp攻略ガイド [Zenn_Python] | Summary by TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
開発者は、全国の自治体に分散する議会議事録を横断的に収集しようとした際、システムの仕様差や環境依存の不具合に直面した。具体的には以下の課題が発生した。
- ・macOS環境におけるPythonのSSL接続タイムアウト問題。
- ・Shift_JISでは対応できない外字による文字化け問題。
- ・自治体ごとに異なるURLパラメータ(startPos=-1)への対応不足。
- ・直列処理では全自治体の取得に162時間を要するスループット不足。
// Approach
開発者は、システムの共通性を活かし、個別の差異を吸収する堅牢なパイプラインを構築した。以下の手法を用いて課題を解決した。
- ・subprocessとcurlを組み合わせ、macOSのSSL問題を回避。
- ・エンコーディングにcp932を指定し、外字の文字化けを防止。
- ・正規表現によるsystem_codeの自動検出と、負の値に対応したURLパース。
- ・ThreadPoolExecutorを用い、自治体間は並列、自治体内は直列で処理。
- ・BigQueryへのロードは、DELETE + INSERTによる冪等な設計を採用。
// Result
開発者は、119自治体から計174,000件超の発言データを取得することに成功した。これにより以下の成果を得た。
- ・処理時間を直列の162時間から、4並列時の40時間へと大幅に短縮。
- ・7,543件のセッション、5,129件のQAペアを構造化して抽出。
- ・「検討します」等のフレーズ含有率を定量的に分析可能な状態を実現。
Senior Engineer Insight
> レガシーなCGIシステムを対象とした、極めて実戦的な設計である。特に、環境依存のSSL問題やエンコーディングの罠を、curlの利用やcp932の指定で回避する判断は、現場の泥臭いトラブルシューティングを反映している。また、自治体間並列・自治体内直列という設計は、スループット向上とサーバー負荷軽減のバランスを考慮した、スケーラビリティへの深い理解が伺える。大規模データ収集における、堅牢なパイプライン構築の好例と言える。