「PythonでHTMLを取りたいけれど、requestsとBeautifulSoupの違いが分からない」
「コードを貼ったら403や文字化けが出て止まった」
「スクレイピングしてよいサイトなのか、先に何を確認すればよいか不安」
今回は、requestsとBeautifulSoupでHTMLを取得する最小コードを解説します。なべくんです。スクレイピングは、最初の1ページが取れると理解しやすくなります。ただし、便利だからといって何でも取得してよいわけではありません。
結論から言うと、requestsはHTMLを取りに行く道具、BeautifulSoupは取ってきたHTMLから欲しい部分を探す道具です。まずは1ページだけ取得し、ステータスコード、title、h1を確認しましょう。
先に注意点です。スクレイピング前に、対象サイトの利用規約、robots.txt、アクセス負荷、個人情報の扱いを確認してください。ログインが必要なページ、購入者情報、個人情報、制限回避が必要なページは避けます。
この記事で分かることは次の4つです。
- requestsとBeautifulSoupの役割
- HTMLを取得する最小コード
- titleやh1を抜き出す方法
- エラー時に見る場所
先に確認: 規約・robots.txt・負荷を見ます

コードを書く前に、次の項目を確認します。
| 確認項目 | 見る理由 |
|---|---|
| 利用規約 | 自動取得が禁止されていないか確認する |
| robots.txt | クロール方針の参考にする |
| アクセス負荷 | サーバーへ負担をかけない |
| 個人情報 | 取得してはいけない情報を避ける |
robots.txtは、サイト側のクロール方針を知る手がかりです。ただし、規約の代わりではありません。規約と合わせて確認しましょう。
最初は、公開ページを1回だけ取得する学習用コードから始めます。ループで大量アクセスしない、エラー時に無限リトライしない、APIがある場合はAPIを優先する。この3つを守るだけでも事故を減らせます。
requestsとBeautifulSoupの役割

役割は次の通りです。
| 道具 | 役割 |
|---|---|
| requests | URLへアクセスしてHTMLを取得する |
| BeautifulSoup | HTMLを解析してタグや文字を探す |
インストール例です。Colabならセルで実行します。
!pip install requests beautifulsoup4
ローカルなら、仮想環境を有効化してから実行します。
python -m pip install requests beautifulsoup4
import確認です。
import requests
from bs4 import BeautifulSoup
print("import OK")
ModuleNotFoundError が出たら、ライブラリを入れた環境と実行環境が同じか確認します。
最小コード: 1ページのHTMLを取得します

次のコードで、1ページのHTMLを取得してtitleを表示します。URLは自分で確認した公開ページに差し替えてください。
import requests
from bs4 import BeautifulSoup
url = "https://example.com/"
response = requests.get(url, timeout=10)
print("status:", response.status_code)
response.raise_for_status()
soup = BeautifulSoup(response.text, "html.parser")
title = soup.title.get_text(strip=True) if soup.title else "(titleなし)"
print("title:", title)
成功例です。
status: 200
title: Example Domain
timeout=10 は、応答がないときに処理が止まり続けるのを防ぐためです。raise_for_status() は、404や500などのエラーを例外として扱うために入れています。
欲しい要素を取り出す

h1を取り出すコードです。
h1 = soup.find("h1")
if h1:
print("h1:", h1.get_text(strip=True))
else:
print("h1は見つかりませんでした")
リンクを10件だけ表示するコードです。
links = soup.select("a")
for link in links[:10]:
text = link.get_text(strip=True)
href = link.get("href")
print(text, "=>", href)
よく使う探し方です。
| 書き方 | 意味 |
|---|---|
find("h1") |
最初のh1を探す |
find_all("a") |
すべてのaタグを探す |
select(".class-name") |
クラス名で探す |
select("#main") |
IDで探す |
ブラウザで見える内容が取れない場合は、JavaScriptであとから表示されている可能性があります。まず response.text[:1000] を表示して、目的の文字がHTML内にあるか確認しましょう。

まとめ: まず1ページだけ確認しましょう

requestsとBeautifulSoupの最初のゴールは、1ページを取得し、titleやh1を表示することです。
今回のポイントです。
- requestsはHTMLを取得する
- BeautifulSoupはHTMLから要素を探す
- 最初は1ページだけ試す
- ステータスコードとHTML中身を見る
- 規約、robots.txt、アクセス負荷を先に確認する
403が出たら、制限回避を考える前に、取得してよいページかを確認します。動的サイトやログイン領域は、requestsだけでは適さない場合があります。
FAQ
Q1. requestsだけではスクレイピングできませんか? HTML取得はできます。ただし、タグから文字を取り出すにはBeautifulSoupが便利です。
Q2. ブラウザでは見えるのに取れません。なぜですか? JavaScriptであとから表示されている可能性があります。response.text の中身を確認しましょう。
Q3. 403が出たらUser-Agentを変えればよいですか? まず規約やアクセス許可を確認します。制限回避目的の運用は避けましょう。
Q4. 商用利用できますか? 対象サイトの規約、データの権利、個人情報、利用目的によります。個別確認が必要です。
次に読む記事
- No.2 Pythonスクレイピングを始める前に確認する規約・robots.txt・アクセス負荷
- No.16 HTMLタグの見方入門
- No.23 CSSセレクタ入門
参考URL
- Requests documentation
- Beautiful Soup Documentation
- Google Search Central: robots.txt

- Python urllib.robotparser

