インストール
もし、Anacondaを使っている場合はデフォルトでインストールされている場合もあります。
1 |
pip install requests |
インポート
1 |
import requests |
実装
1 2 3 4 5 6 |
response = requests.get('サイトのURL') if response.status_code == 200: print(response.text) # レスポンスHTMLの出力 else: raise # printなどでログ出力でも良いです。 |
レスポンスコード
200
リクエスト成功です。HTMLが取得できます。
400〜499
クライアント側のエラー(アクセスしようとしている人に問題がある。)
500~599
サーバー側のエラー(アクセス先のサイトに問題があります。)
ヘッダーが要求されるサイトもある。
例えば、Amazonであればリクエスト時にheaderにUser-Agentを指定しないとリクエストを受け付けないようになっています。サイト規約によってこの辺はまちまちです。(ヘッダーがなくてもリクエストを受け付けるサイトもたくさんあります。)
1 2 |
headers = {"User-Agent": "自分自身のユーザーエージェント名"} response = requests.get("https://www.amazon.co.jp/", headers=headers) |
User-AgentはChromeなどの開発者ツールのNetworkタブ→Headerなどをデバッグできるので下の方を確認すれば出てくるのでコピペして使うとよいでしょう。
サイトのURLを一括取得してリクエストするテクニック
変数を埋め込むテクニック
formatを使います。実際のスクレイピングプログラムではforループを使ってページネーションがある複数のページに対して連続してアクセスしていくことになります。
1 2 3 |
url = 'https://xxx/?page={}' target_url = url.format(1) print(target_url) # https://xxx/?page=1 |
複数サイトを取得
例えば、ページネーションがあるようなサイトで1〜3ページ目まで取得するようなサンプルは以下のように記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
from time import sleep from bs4 import BeautifulSoup import requests url = 'https://xxx/?page={}' # 1〜3をループする for i in range(1, 4): # 変数target_urlに、アクセス先のURLを格納する target_url = url.format(i) # print()してtarget_urlを確認する print(target_url) # https://xxx/?page=1 r = requests.get(target_url) sleep(1) # 1秒間待機 soup = BeautifulSoup(r.text) # 以後BeautifulSoupでのHTML解析処理を行う。 |
sleep
1URLをリクエストするたびに必ず1秒間は間隔を開けるようにしましょう。(相手のサーバーへの負荷を低減するため)
BeautifulSoupでのHTML解析
以下の記事で詳しく解説しています。
【Python】「BeautifulSoup」について
この記事へのコメントはありません。