今回はPythonでスクレイピングをする際に役立つrequestsモジュールの使い方を解説します。
requestsモジュールを使うことで、HTTP通信をPythonのコードから実行できるようになりますので、ぜひ参考にしてみてください。
requestsモジュールとは
requestsはPythonのHTTP通信ライブラリです。WebサイトやAPIからデータを取得したり、POSTリクエストを送信することができます。
HTTP通信とは
HTTP (Hypertext Transfer Protocol) は、WebサーバーとWebクライアントの間でデータをやりとりするためのプロトコルです。HTTPは、主にWebブラウザからWebサーバーへのリクエストやWebサーバーからWebブラウザへのレスポンスを行います。
HTTPリクエストは、次の要素から構成されています。
- メソッド (GET, POST, PUT, DELETEなど)
- URI (Uniform Resource Identifier)
- プロトコルバージョン
- ヘッダー (Accept-Language、User-Agentなど)
- ボディ (リクエストデータ)
HTTPレスポンスは、次の要素から構成されています。
- プロトコルバージョン
- ステータスコード (200 OK、404 Not Foundなど)
- ヘッダー (Content-Type、Content-Lengthなど)
- ボディ (レスポンスデータ)
HTTP通信はWebブラウザからWebサーバーに対して、Webページを要求するためのGETリクエストを送信することができます。Webサーバーはこのリクエストに対して、対応するWebページのHTMLを含んだHTTPレスポンスを返すことができます。
requestsモジュールのインストール
requestsモジュールをインストールするために、コマンドプロンプトで以下のコマンドを実行します。
pip install requests
インストールが完了すると、以下のようにバージョンが表示されます。
Successfully installed charset-normalizer-3.0.1 idna-3.4 requests-2.28.2 urllib3-1.26.14
requestsモジュールの使用例
GETリクエスト
GETリクエストはHTTP (Hypertext Transfer Protocol) プロトコルにおいて、Webサーバーからリソース (例えばWebページ、画像、音声データなど) を取得するためのリクエストの方法の一つです。
GETリクエストはWebブラウザなどのクライアントからWebサーバーに送信されます。GETリクエストには、取得したいリソースのURLが含まれており、WebサーバーはこのURLを解釈して、要求されたリソースを返すことができます。
例えば、ブラウザからGoogleのトップページを表示するためには以下のようなGETリクエストが送信されます。
GET / HTTP/1.1
Host: www.google.com
GETリクエストは最も基本的なHTTPリクエストの一つであり、多くのWebアプリケーションにおいて使用されています。
サンプルコード
GETリクエストは以下のように記述します。
import requests
response = requests.get("https://www.example.com")
print(response.text)
POSTリクエスト
POSTリクエストはHTTP (Hypertext Transfer Protocol) プロトコルにおいて、Webサーバーにデータを送信するためのリクエストの方法の一つです。GETリクエストと異なり、POSTリクエストはデータを含んでいます。このデータは、Webサーバーに対して処理を要求するものです。
例えば、Webフォームを送信する場合、ユーザーが入力した内容がPOSTリクエストとしてWebサーバーに送信されます。Webサーバーはこのデータを解釈して、要求された処理を実行することができます。
POSTリクエストはセキュリティに重要な役割を果たすため、以下のような場合に使用されます。
- ユーザー認証
- データベースにデータを追加または更新する
- ファイルアップロード
以下がPOSTリクエストの例です。
POST /login HTTP/1.1
Host: www.example.com
Content-Type: application/x-www-form-urlencoded
username=example&password=secret
サンプルコード
POSTリクエストは以下のように記述します。
import requests
response = requests.post("https://www.example.com", data={"key": "value"})
print(response.text)
ヘッダーの追加
HTTPリクエストやレスポンスには、リクエストやレスポンスの情報が含まれています。これらの情報には、送信者のブラウザやOS、必要なデータ形式などが含まれています。これらの情報を記述するのがHTTPヘッダーです。
例えば、以下がUser-Agentというヘッダーを含んだHTTPリクエストの例です。
GET / HTTP/1.1
Host: example.com
User-Agent: My-App/1.0
このように、HTTPリクエストやレスポンスには複数のヘッダーが含まれています。リクエストやレスポンスを処理する場合、これらのヘッダーを正しく処理することが重要です。
サンプルコード
ヘッダーの追加は以下のように記述します。
import requests
headers = { "User-Agent": "my-app/0.0.1"}
response = requests.get("https://www.example.com", headers=headers)
print(response.text)
セッションの維持
セッションとは、Webアプリケーションにおいて、ユーザーの情報を一時的に保存するための仕組みのことです。
例えば、Webサイトにアクセスしてログインを行った場合、Webサイトはユーザーの情報 (例えばユーザー名やパスワード) を記録することで、ユーザーがサイト内を移動したり、サイトから離れたりしても、この情報を保持することができます。このような一時的に保持されるユーザー情報をセッションといいます。
セッションは、Webサイトにアクセスした際に、Webブラウザに対して、一意なセッションIDが割り当てられます。このセッションIDは、Webサイト上で保存されたユーザー情報を特定するために使用されます。
セッションは、Webアプリケーションにおいて重要な役割を果たします。ユーザーの情報を保持することで、ユーザーがサイトを離れても情報を引き継ぐことができるため、より便利なWebサイトを提供することができます。
サンプルコード
セッションの維持は以下のように記述します。
import requests
session = requests.Session()
session.get("https://www.example.com")
response = session.get("https://www.example.com/my-page")
print(response.text)
HTMLファイルを読み込むソースコード
今回はPythonのrequestsモジュールを使ってHTMLファイルを読み込むプログラムを作成しました。
WikipediaのPythonのページから文字列データを取得し、ファイルに出力するコードです。
import requests
#URLを指定してGETリクエストを実行
response = requests.get("https://ja.wikipedia.org/wiki/Python")
#取得した文字列をエンコード
response.encoding = response.apparent_encoding
#レスポンスのテキストを取得
text = response.text
#テキストをファイルに出力
with open("python_wikipedia.txt", mode="w", encoding="UTF-8_sig") as file:
file.write(text)
発生したエラー
GETリクエストで取得したデータをファイルに書き出そうとした際に、以下のようなエラーが発生しました。
UnicodeEncodeError: 'cp932' codec can't encode character '\xe9' in position 37943: illegal multibyte sequence
CP932(日本語のエンコード方式)ではエンコードできない文字列が含まれいてる(’\xe9’)ことが原因でエラーが発生しているようです。
対策として、文字列をファイルに書き出す際に文字コードをutf-8に指定してやることで回避できました。
openメソッドのパラメータで以下のように指定します。
open("python_wikipedia.txt", mode="w", encoding="UTF-8_sig")
実行結果
先ほどのプログラムを実行すると、.pyファイルと同じディレクトリにテキストファイルが生成されます。
テキストファイルを開くと、以下のようにWikipediaのページのHTMLのコードが正しく取得できていることが確認できました。
まとめ
今回はPythonでスクレイピングをする際に役立つrequestsモジュールの使い方を解説しました。requestsモジュールは、スクレイピングをするのに必須のライブラリですので、ぜひ活用してみてください。
また、以下の記事で効率的にPythonのプログラミングスキルを学べるプログラミングスクールの選び方について解説しています。最近ではほとんどのスクールがオンラインで授業を受けられるようになり、仕事をしながらでも自宅で自分のペースで学習できるようになりました。
スキルアップや副業にぜひ活用してみてください。
スクールではなく、自分でPythonを習得したい方には、いつでもどこでも学べる動画学習プラットフォームのUdemyがおすすめです。
講座単位で購入できるため、スクールに比べ非常に安価(セール時1200円程度~)に学ぶことができます。私も受講しているおすすめの講座を以下の記事でまとめていますので、ぜひ参考にしてみてください。
それでは、また次の記事でお会いしましょう。
コメント