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



コメント