生成AIで架空のポケモンを作るためのデータベースを作るところ。コードのサンプルを元に実際に使えるようカスタマイズしていこう。
入力:
あるwebサイトからテキストデータを引っ張ってきて、データベースとして保存します。
対象のwebサイトは
https://wiki.xn--rckteqa2e.com/wiki/%E3%83%9D%E3%82%B1%E3%83%A2%E3%83%B3%E4%B8%80%E8%A6%A7
の「名前」の列のリンクをクリックした各ページです。
各リンク先のページで、
「ポケモンずかんの説明文」と「種族値」の間の行
かつ
「リンクのついていない行」
にたいし、1行を1データとして格納します。
上記を行えるようなPythonのコードを書いてください。
出力:
以下は、指定されたWebサイトから必要なデータをスクレイピングし、データベースに保存するためのPythonコードのサンプルです。このコードはBeautifulSoupとSQLiteを使用して実装されています。
まず、必要なライブラリをインストールします。
pip install requests beautifulsoup4 sqlite3
次に、Pythonコードを以下に示します。
import requests
from bs4 import BeautifulSoup
import sqlite3
import time
# データベースの設定
conn = sqlite3.connect('pokemon_data.db')
c = conn.cursor()
# テーブル作成
c.execute('''CREATE TABLE IF NOT EXISTS pokemon (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
description TEXT
)''')
# メインのURL
main_url = 'https://wiki.xn--rckteqa2e.com/wiki/%E3%83%9D%E3%82%B1%E3%83%A2%E3%83%B3%E4%B8%80%E8%A6%A7'
# メインページのHTMLを取得
response = requests.get(main_url)
soup = BeautifulSoup(response.text, 'html.parser')
# ポケモンのリンクをすべて取得
pokemon_links = soup.select('table tbody tr td a')
for link in pokemon_links:
pokemon_name = link.text
pokemon_url = 'https://wiki.xn--rckteqa2e.com' + link['href']
# 各ポケモンページのHTMLを取得
pokemon_response = requests.get(pokemon_url)
pokemon_soup = BeautifulSoup(pokemon_response.text, 'html.parser')
# ポケモン図鑑の説明文と種族値の間の行を抽出
description_found = False
for line in pokemon_soup.find_all('li'):
if 'ポケモンずかんの説明文' in line.text:
description_found = True
continue
if description_found:
if '種族値' in line.text:
break
if not line.find('a'):
description = line.text.strip()
if description:
# データベースに保存
c.execute("INSERT INTO pokemon (name, description) VALUES (?, ?)", (pokemon_name, description))
# サーバーへの負担を軽減するために少し待機
time.sleep(1)
# データベースをコミットしてクローズ
conn.commit()
conn.close()
このコードは以下の手順で動作します:
- メインページからポケモンのリンクを取得します。
- 各ポケモンのページにアクセスし、説明文と種族値の間にあるリンクのついていない行を取得します。
- 取得したデータをSQLiteデータベースに保存します。
各ポケモンのページにアクセスする際にサーバーへの負担を軽減するため、1秒間の待機を設けています。これにより、サーバーに過度の負担をかけずにデータを収集できます。
とりあえず動かしてみて、出来たもの見ながら修正していこう。pipがインストールされてない、dbファイルを見るためにDB Browser for SQLiteのインストールが必要などつまづきながら進んで、やっと成果物のdbファイルを閲覧できた。データが無かった。道のりは遠そうだ。
次回に続く