Pythonでpeeweeとrequestsを用いてURLから情報の取得とデータベースへの登録

スポンサーリンク

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というデータベースファイルが生成されていることも確認できました。

コメント

タイトルとURLをコピーしました