MENU

requestsとBeautifulSoupでHTMLを取得する最小コード

当ページのリンクには広告(PR)が含まれていることがあります。
requestsでHTMLを取得しBeautifulSoupでtitleを抽出する流れ

「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 クロール方針の参考にする
アクセス負荷 サーバーへ負担をかけない
個人情報 取得してはいけない情報を避ける

robots.txtは、サイト側のクロール方針を知る手がかりです。ただし、規約の代わりではありません。規約と合わせて確認しましょう。

最初は、公開ページを1回だけ取得する学習用コードから始めます。ループで大量アクセスしない、エラー時に無限リトライしない、APIがある場合はAPIを優先する。この3つを守るだけでも事故を減らせます。

requestsとBeautifulSoupの役割

requestsでHTML取得しBeautifulSoupで解析する図
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を取得します

URLからHTMLを取得してステータスとtitleを表示する図
最小コード: 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などのエラーを例外として扱うために入れています。

欲しい要素を取り出す

BeautifulSoupで要素を取り出す方法の図
欲しい要素を取り出す

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内にあるか確認しましょう。

requestsとBeautifulSoupでHTML取得する確認順
記事全体

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

HTML取得から要素抽出へ進む流れ
まとめ: まず1ページだけ確認しましょう

requestsとBeautifulSoupの最初のゴールは、1ページを取得し、titleやh1を表示することです。

今回のポイントです。

  1. requestsはHTMLを取得する
  2. BeautifulSoupはHTMLから要素を探す
  3. 最初は1ページだけ試す
  4. ステータスコードとHTML中身を見る
  5. 規約、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
Google for Developers
Robots.txt Introduction and Guide | Google Search Central  |  Documentation  |  Google for Developer... Robots.txt is used to manage crawler traffic. Explore this robots.txt introduction guide to learn what robot.txt files are and how to use them.
  • Python urllib.robotparser
Python documentation
urllib.robotparser — Parser for robots.txt Source code: Lib/urllib/robotparser.py This module provides a single class, RobotFileParser, which answers questions about whether or not a particular user agen...

この記事を書いた人

Watanabeのアバター Watanabe サイト運営者

2020年よりブログ開始。
SEOが思いのほか性にあっていたようで現在に至る。
モットーは「勝率の高い選択をする」
AIは活用するが吉、最後は人間が息を吹き込む。
アートと科学を追求し、日々精進。
―――
収益:6~7桁をウゴウゴ。
サイト:ペラサイト~中規模サイトまで運営中。
案件:1000円以上の案件をメインに取組中。
打ち手:ブラックSEO~ホワイトSEOまで
―――

目次