生成AIで架空のポケモンを作るためのデータベースを作っています。データベースを作成するコードを書かせ、前回から読解していたところ。今回はその続き。
入力:
以下のコメントに記載した、コードの説明文の誤りを直してください
#テーブルの行(row)ごとに
for row in table_rows:
#変数「columns」にその行で見つけたタグをすべて格納する。columnsは配列になる。tdタグを探す意味が分からない
columns = row.find_all(‘td’)
#if条件が差す内容が不明
if columns and columns[0].text.strip() in valid_numbers:
#変数「link」にcolumns配列1番地で見つかったaタグを格納する
link = columns[1].find(‘a’)
こんな感じでわからないものはわからないと述べながらわかる部分だけ書いていく。結果赤ペンがついたのが以下の5点。
出力:
修正点の要約
columns
変数の説明:<td>
タグはテーブルのセルを意味し、各行(<tr>
)の中のセル(列)をリストに格納します。if
条件の説明:columns
が存在し、1列目のテキストがvalid_numbers
に含まれる場合に処理を行う。link
変数の説明:columns
リストの1番目のセル内の<a>
タグを取得します。strip=True
の説明:get_text(strip=True)
はテキストの前後の空白を削除します。c.execute
の説明: SQL文を実行して、特定の条件に一致する行を検索またはデータを挿入します。c.fetchone
の説明: SQLクエリの結果から1行を取得し、結果がなければNone
を返します。
これで、各部分の説明がより明確になりました。
1はHTMLのテーブル構造を知らなかったため。Progateではテーブル扱わなかったな。webデザイン向けの講座だったので、データベース系はノータッチだった。
2はvalid_numbersの変数の意味を忘れていたため。コードの上の方で定義してた。単なるミス。
3は「(テーブルのセル内の)aタグ」というaタグへの限定条件が抜けていた。原因は1と同じ。
4はget_text(strip=True)
を知らなかったのが原因。あとコードのstrip=True
は外した方が良いな。
5,6はSQLを全く触ってないため知らなかった。
こんな感じで、修正された理由をたどり、原因分析できる。今回はHTMLテーブル構造、SQLの知識不足が露呈した。次は先に進むかこの辺勉強するか。
次回に続く