0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PANOS不具合の効率的な解析: ウェブスクレイピングとGPTAPIを活用したツールの開発

Last updated at Posted at 2023-12-31

作成経緯

最近Paloalto 製品のファームアップをすることが多くそのたびに対象のOS を適用して問題ないか、いちいちExcelに転記して翻訳して全部抽出する作業をやってました。

1つのバージョンを調べるだけでも不具合は70件前後あるので、かなり労力がかかり退屈な作業であんまり好きではありませんでした。

というわけで情報収集、翻訳、Excel作成をウェブスクレイピングで自動化してしまおうと思い作成しました。

既知不具合のページ

sc1.png

pan-os10.2.6 Known Issue

不具合番号と内容が書かれてあるものです。
これを一個一個読んで、不具合の対象なのか、対象なら何が起きてどんな対処が必要なのかを調べます。
英語得意な人ならまだしも、苦手な人は蕁麻疹でちゃいますね。

実際に作成したコード

from bs4 import BeautifulSoup
from html.parser import HTMLParser
from urllib.request import urlopen
import os
import openai
import openpyxl
from openai.api_resources.abstract.engine_api_resource import EngineAPIResource
import time


def ChatAIConnect(prompt):
    EngineAPIResource.class_url = lambda a, b, c: ""

    openai.api_type = "azure"
    openai.api_key = OPENAI_API_KEY
    openai.api_base = OPENAI_BASE
    openai.api_version = "2023-05-15"

    chat_completion = openai.ChatCompletion.create(
        deployment_id="",
        model="",
        messages=[
            {"role": "user", "content": "次の文章を翻訳してください。翻訳した内容のみ出力してください。" + prompt},
        ]
    )

    return chat_completion.choices[0].message.content


def main():
    # 現在のUNIX時間を取得
    current_unix_time = int(time.time())

    # ページの取得
    # ex) url = "https://docs.paloaltonetworks.com/pan-os/10-2/pan-os-release-notes/pan-os-10-2-6-known-and-addressed-issues/pan-os-10-2-6-known-issues"

    url = input("\n\nスクレイピングするknown-issuesのURLを入力してください \n>> ")
    if url == "":
        print("URLが入力されていません…処理を終了します。")
        exit()

    html = urlopen(url)
    soup = BeautifulSoup(html, "html.parser")

    # ページ内のテーブル⓪番目を取得。# trタグを取得
    table = soup.findAll("table")[0]
    rows_data = table.findAll("tr")

    # 出力先のExcelファイルを指定、ワークブックを指定
    base_file_path = "format.xlsx"
    workbook = openpyxl.load_workbook(base_file_path)

    # フォーマットをシート名を変更してコピー、先頭に移動させる
    sheet = workbook.copy_worksheet(workbook["format"])
    sheet.title = url[115:]
    workbook.move_sheet(sheet, offset=-1)

    # 取得したデータ
    for i, row_data in enumerate(rows_data):
        issue_id = None
        description = None
        desc_translated = None

        for j, data in enumerate(row_data.find_all(["td", "th"])):
            # 先頭行はヘッダーなので回避
            if i == 0:
                continue

            # td 要素の中から b タグを探す
            if j == 0:
                issue_id = data.find("b").text.strip()

            # DESCRIPTION を取得
            elif j == 1:
                description = data.text.strip()
                # デバッグ用
                print("\n" + "-" * 50)
                print("", issue_id, "", i, "/", int(len(rows_data)) - 1)
                print(description[:100], "...")

                # ChatAIにdescription内容を翻訳させる(翻訳不要ならコメントアウト)
                desc_translated = ChatAIConnect(description)

            # B列(Issue ID列)に書き込み
            sheet.cell(row=i + 2, column=3, value=issue_id)

            # C列(Description列)に書き込み
            sheet.cell(row=i + 2, column=4, value=description)

            # D列(日本語訳列)に書き込み
            sheet.cell(row=i + 2, column=5, value=desc_translated)

    workbook.save(url[115:] + "_" + str(current_unix_time) + ".xlsx")
    print("\nDone !!\n")


if __name__ == "__main__":
    main()

用意したエクセルフォーマットを開き、シートをリネームしてコピー。
f.png

BS4でリンク先のテーブルを取得し、ループでテーブルの中身を取り出して、都度ChatGPT に翻訳させています。

最後にIssue番号、Description、翻訳結果を書き込む処理をして、別ファイル名で出力します。

実行

res1-2.png

res2-2.png

プロンプトで調査対象のリンクを投げるだけでOKです。

実行結果

res3.png
普通に作業したら3,4時間はかかるところ、10分もかからず完了します。

所感

調査したいリンクを投げて、待つだけなので非常に楽になりました。特に複数のバージョンを調査する場合により効果を発揮します。

OS 選定に時間を取られることがなくなり、この作業に対する精神的な辛さの軽減になりました。筆者はおっちょこちょいなので転記ミスが起きないのが良い。

本ツールではChatGPTのAPIキーが必要ですが、持ってない場合は翻訳処理をコメントアウトするか、精度は落ちますがDeepLのAPIに置き換えても使えます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?