Pythonでpeeweeとrequestsを用いてURLから情報の取得とデータベースへの登録を行ってみます。
今回はpeewee、requests、BeautifulSoupを用います。これらのライブラリ・モジュールがPythonにインストールされているかを確認しスクリプトを実行してください。
■Python
今回のPythonのバージョンは、「3.8.5」を使用しています。(Windows11)
■peeweeとrequestsを用いてURLから情報の取得とデータベースへの登録
では、早速peeweeとrequestsを用いてURLから情報の取得とデータベースへの登録を行うスクリプトを書いていきます。
■コード
import requests from peewee import * from bs4 import BeautifulSoup # データベースの設定 db = SqliteDatabase('urls.db') # URLモデルの定義 class URL(Model): url = CharField(unique=True) title = CharField(null=True) class Meta: database = db # テーブルの作成 db.create_tables([URL]) # URLのタイトルを取得する関数 def get_title(url): response = requests.get(url) if response.status_code == 200: soup = BeautifulSoup(response.text, 'html.parser') title_tag = soup.find('title') if title_tag: return title_tag.string.strip() return None # URLレコードの作成とタイトルの取得 def add_url(url): title = get_title(url) URL.create(url=url, title=title) # タイトルの出力 def print_titles(): for url in URL.select(): print(f"URL: {url.url}") print(f"Title: {url.title}") print() # 使用例 if __name__ == '__main__': url = 'https://www.yahoo.co.jp/' add_url(url) print_titles()
まずは、必要なモジュールをインポートします。今回は3つのモジュールをインポートします。requestsはHTTPリクエストを行うためのモジュールであり、peeweeはPythonでSQLデータベースを操作するためのORM(Object-Relational Mapping)です。BeautifulSoupはHTMLパースのためのライブラリです。
次にデータベースの設定を行います。urls.dbは作成するデータベースのファイル名です。ここではSQLiteデータベースを使用しています。
設定後、URLモデルの定義を行います。urlとtitleはそれぞれURLとタイトルの情報を保持するフィールドです。unique=Trueはurlフィールドが一意であることを示し、null=TrueはtitleフィールドがNULL(空)であることを許可します。Metaクラスにデータベースの接続情報を指定します。
定義後、テーブルの作成します。create_tablesメソッドを使用して、先ほど定義したモデルに基づいてデータベース内にテーブルを作成します。
作成後、URLのタイトルを取得する関数を定義します。requestsモジュールを使用してURLにGETリクエストを送り、レスポンスを取得します。レスポンスのステータスコードが200(成功)であれば、BeautifulSoupライブラリを使用してHTMLを解析し、<title>タグを見つけます。タイトルが存在する場合、その内容を取得し、余分な空白を削除して返します。タイトルが存在しない場合はNoneを返します。
次にURLレコードの作成とタイトルの取得の設定を行います。add_url関数という関数を定義します。指定されたURLに対してget_title関数を使用してタイトルを取得し、そのURLとタイトルを使用して新しいURLレコードをデータベースに作成します。
URLレコードを作成後、タイトルの出力を行います。print_titles関数という関数を定義。データベース内のすべてのURLレコードを取得し、それぞれのURLとタイトルを表示します。
if __name__ == '__main__': url = 'https://example.com' add_url(url) print_titles()
最後に上記のコードを記述します。__name__変数が’__main__’と等しい場合、つまり直接このスクリプトが実行される場合にのみ、指定したURLに対してadd_url関数を呼び出してURLレコードを作成し、その後print_titles関数を呼び出してタイトルを表示します。
■検証・実行
今回書いたスクリプトを「y_url.py」という名前でPythonが実行されている作業ディレクトリ(カレントディレクトリ)に保存し、コマンドプロンプトから実行してみます。
実行してみると、peeweeとrequestsを用いて指定したURLのタイトルがデータベースに追加され、URLとタイトルが表示されることを確認できました。
確認後、Pythonが実行されている作業ディレクトリ(カレントディレクトリ)内を確認すると、urls.dbというデータベースファイルが生成されていることも確認できました。
コメント