Nexposeで出力されるHTMLを含むJSONデータのテキスト抽出方法


Nexposeで脆弱性の結果を閲覧していたところ、HTMLタグを含むJSONデータが出現しました。こうしたデータはそのままでは読みづらく、必要な情報のみを抽出するためにテキスト変換が必要となります。本記事では、PythonのBeautifulSoupライブラリを利用して、JSON内のHTMLデータをテキストのみ抽出する方法を解説します。
背景と課題
Nexposeのレポート出力には、セキュリティ検査の詳細情報や結果がHTML形式で記述されている場合があります。これにより、JSONデータ内にHTMLタグが混在するため、解析やログの閲覧、レポート作成時に不要なタグ情報を除去し、テキストデータのみを扱いたいというニーズが発生します。
以下は一例
data = { "resource": [ {"results": [ {"proof": "<div>これは <strong>aaa</strong> です</div>"} ]}, {"results": [ {"proof": "こちらは bbb です"} ]} ] }
解決策:BeautifulSoupでのテキスト抽出
PythonのBeautifulSoupライブラリを利用すると、HTMLコンテンツから簡単にテキストのみを抽出することができます。以下に、具体的なコード例を示します。
# JSONデータ内の各 proof のHTMLからテキストを抽出し、更新する処理 for item in data["resource"]: for result in item.get("results", []): if "proof" not in result: continue # proof キーがない場合はスキップ result["proof"] = BeautifulSoup(result["proof"], 'html.parser').get_text()
このコードでは、まずJSONデータ内の各resultsリストをループし、proofキーが存在するかをチェックしています。存在する場合は、BeautifulSoupでHTMLをパースし、get_text()を使ってテキスト部分のみを抽出。その後、抽出したテキストにproofの値を上書きしています。
応用と注意点
- エラー処理: JSONデータが期待通りの構造になっていない場合に備え、例外処理やキーの存在チェックを行っています。
- 大規模データへの対応: データ量が多い場合は、処理速度やメモリ使用量に注意しながら、バッチ処理や並列処理を検討してください。
- セキュリティ対策: 入力されるHTMLが予期しない内容を含む可能性もあるため、信頼できるデータソースからのみ実行することが望ましいです。
おわりに
Nexposeから得られるHTMLを含むJSONデータは、正しく処理することで読みやすくかつ実用的な情報に変換できます。今回ご紹介したBeautifulSoupを利用した方法を参考に、より効率的なデータ処理やレポート作成にお役立てください。