生成AIで架空のポケモンを作るためのデータベースを作っています。前回はChatGPTに作らせたコードを走らせてデータベースファイルが生成された。が、中身を見たらどうも空っぽい。原因を調べていこう。
入力:
作成したデータベースの中身は空でした。
取得したいテキスト部分のソースを閲覧すると以下ような記述(略)になっていました。
ソースデータがコードで想定した形式と異なっていることでデータが空になった可能性はありますか?
出力:
データベースの中身が空であった理由は、HTMLソースのフォーマットがコードの想定と異なっているためである可能性が高いです。ご提供いただいたソースコードの一部を基に、コードを修正してみましょう。
まず、指定された「ポケモンずかんの説明文」の部分を取得するために、適切なHTMLパーシングロジックを組み込みます。
以下の修正済みのコードをお試しください:(コード略)
変更点の説明
- HTMLソースの構造に基づいた修正:
description_section = pokemon_soup.find_all('span', {'id': 'ポケモンずかんの説明文'})
で「ポケモンずかんの説明文」セクションを見つける。find_next_siblings()
メソッドを使って、説明文が含まれる次の要素を取得する。- 説明文が含まれるタグが見つかるまでループし、次のセクション(
<h2>
タグ)に到達したら終了する。
- 説明文の取得と保存:
- 説明文が見つかった場合にのみ、データベースに保存する。
この修正により、指定された「ポケモンずかんの説明文」セクションのデータを正しく取得し、データベースに保存できるはずです。
相変わらずデータの中身は空。データが空の理由として、
①データの取得ができていない
②取得したデータのデータベースへの書き込みができていない
③データベースは正しく構築されているけど、それを見る方法が悪いため空に見えている
のどれか。まず①から見てみよう。
入力:
相変わらずデータは空でした。原因を特定するため、以下のようにコードを修正しようと思います。
・全国ナンバーの範囲を。0001~0010から0001のみに変更する
・説明文を取得できた場合、取得した説明文をプリントする
出力:
修正点の説明
- 全国ナンバーの範囲を変更:
valid_numbers = ['0001']
に変更し、全国ナンバー0001(フシギダネ)のみを対象とする。
- 説明文を取得できた場合にプリント:
- 説明文が取得できた場合に
print(f"Description for {pokemon_name}: {description}")
を実行して、説明文をプリントする。 - 説明文が取得できなかった場合には
print(f"No description found for {pokemon_name}")
を実行する。
- 説明文が取得できた場合に
これで、特定のポケモン(0001)のみを対象とし、説明文を取得できた場合にその内容をプリントすることで、問題の特定が容易になります。
走らせてみたところ、「No description found for フシギダネ」と返ってきた。この返答をChatGPTにまた投げ…というキャッチボールをして、無事データベースにデータが格納された。されたはいいが、修正家庭やそもそも出来上がったコードが全くわからないので、一旦立ち止まって解読をしよう
次回に続く