シェルスクリプトマガジン

特集2 ChatGPTで手軽に実現(Vol.91記載)

著者:佐藤 秀輔

対話型AIサービス「ChatGPT」が注目を集めています。特に、2023年3月に登場した「GPT-4」という大規模言語モデル(LLM)を利用可能になってからは自然言語の理解力が飛躍的に向上し、指示に基づいて、さまざまな処理を自動化できるようになっています。本特集では、ChatGPTを個人で活用する例として、家計簿レビューをさせる方法と、API(Application Programming Interface)を利用してWebスクレイピングをさせる方法を紹介します。

シェルスクリプトマガジン Vol.91は以下のリンク先でご購入できます。

図1 ランダムな家計簿データを生成するPythonスクリプト

import datetime
import random

itemlist = ['食料品', '外食費', '日用品', '家財道具',
            '交通費', '電気代', '水道代', 'ガス代',
            'ガソリン代', 'その他']

for i in range(366):
  basedate = datetime.datetime(2024, 1, 1)
  date = basedate + datetime.timedelta(days=i)
  item = itemlist[random.randrange(10)]
  amount = random.randrange(100) * 100
  print(f"{date.date()},{date.time()},{item},{amount}")

図10 Webスクレイピング対象となるWebページの例

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>サンプル商品リスト</title>
</head>
<body>
  <h1>商品リスト</h1>
  <div class="product" id="product1">
    <h2>商品名:スニーカー</h2>
    <p>価格:\5000</p>
    <p>評価:4.5 星</p>
  </div>
  <div class="product" id="product2">
    <h2>商品名:バックパック</h2>
    <p>価格:\8000</p>
    <p>評価:4.0 星</p>
  </div>
  <div class="product" id="product3">
    <h2>商品名:水筒</h2>
    <p>価格:\1500</p>
    <p>評価:4.8 星</p>
  </div>
</body>
</html>

図11 Webスクレイピング用のPythonスクリプトの例

import json
from bs4 import BeautifulSoup

# HTMLファイルを開く
with open('sample.html', 'r', encoding='utf-8') as file:
  html_content = file.read()
# BeautifulSoupオブジェクトを作成
soup = BeautifulSoup(html_content, 'lxml')
# 商品情報を抽出
products = soup.find_all('div', class_='product')
product_list = []
for product in products:
  product_name = product.find('h2').text.replace('商品名:', '').strip()
  price = product.find_all('p')[0].text.replace('価格:', '').strip()
  rating = product.find_all('p')[1].text.replace('評価:', '').strip()
  # 各商品情報を辞書として追加
  product_list.append({
    '商品名': product_name,
    '価格': price,
    '評価': rating
  })
# JSON形式で結果を出力
json_output = json.dumps(product_list, ensure_ascii=False, indent=4)
print(json_output)