Pythonでdatasetとrequestsを使用しURLからレスポンスを取得してみます。
なお、今回はdataset、requests、beautifulsoup4を用いますので、事前にこの3つのライブラリがインストールされているかを確認しスクリプトを実行してください。
■Python
今回のPythonのバージョンは、「3.8.5」を使用しています。(Windows11)
■datasetとrequestsを使用しURLからレスポンスを取得する
では、早速datasetとrequestsを使用しURLからレスポンスを取得するスクリプトを書いていきます。
■コード
import dataset import requests from bs4 import BeautifulSoup # データベースに接続 db = dataset.connect('sqlite:///:memory:') # タイトルを保存するテーブルを作成 table = db['titles'] # 取得するWebサイトのURL url = 'https://www.yahoo.co.jp/' # Webサイトにリクエストを送信 response = requests.get(url) # レスポンスのHTMLを解析 soup = BeautifulSoup(response.text, 'html.parser') # タイトル要素を取得 title_element = soup.find('title') # タイトルを取得 if title_element: title = title_element.text else: title = 'No title' # タイトルをデータベースに保存 table.insert(dict(url=url, title=title)) # データベースの内容を表示 for data in table.all(): print(data)
まずはimport文で必要なモジュール(dataset、requests、beautifulsoup4)をインポートします。
次に、dataset.connect()関数を使用してSQLiteデータベースに接続します。データベースのURLとして「sqlite:///:memory:」を指定しているため、メモリ上に一時的なデータベースが作成されます。
datasetモジュールを使用して、db[‘titles’]という名前のテーブルを作成します。このテーブルは、WebサイトのURLとタイトルを保存するために使用されます。
次に、取得するWebサイトのURLを指定します。今回は「Yahoo! Japanのトップページ(’https://www.yahoo.co.jp/’)」を使用しています。
requests.get()関数を使用して、指定したURLにHTTP GETリクエストを送信し、レスポンスを取得します。
取得後、レスポンスのHTMLをBeautifulSoupを使って解析します。BeautifulSoup(response.text, ‘html.parser’)というコードは、HTML文書のテキストを解析し、解析済みのオブジェクトを作成します。
解析したHTMLから、soup.find(‘title’)を使用してタイトル要素を取得します。このコードは、HTML内で最初に見つかった<title>タグを取得します。
取得したタイトル要素から「.text」を使用してタイトル文字列を取得します。タイトル要素が存在しない場合は、’No title’という文字列が使用されます。
その後、table.insert(dict(url=url, title=title))を使用して、データベースのテーブルにURLとタイトルを保存します。保存後、for文でのループ処理を行い、table.all()を使用してテーブル内のすべてのデータを取得し、それぞれのデータを表示します。
■検証・実行
今回書いたスクリプトを「data_url.py」という名前でPythonが実行されている作業ディレクトリ(カレントディレクトリ)に保存し、コマンドプロンプトから実行してみます。
実行してみると、モジュールを使用しWebサイトのタイトルを取得し、インメモリのSQLiteデータベースに保存し、保存したタイトルなどを表示させることができました。
コメント