スポンサーリンク

【初心者向け】Webスクレイピングの基本|PythonでrequestsとBeautifulSoupを使う方法をやさしく解説

Python入門
  1. 1. はじめに|Webスクレイピングってなに?なぜ使うの?
    1. ■ なんで使うの?
  2. 2. Webスクレイピングで使う2つの便利なライブラリ
    1. 2-1. requestsとは?Webページを取得する方法
      1. ✅ 使い方の例
      2. 💡 ポイント
    2. 2-2. BeautifulSoupとは?HTMLを解析して情報を取り出す
      1. ✅ 使い方の例
      2. 💡 よく使う操作
  3. 3. 実践!Pythonでスクレイピングしてみよう
    1. 3-1. スクレイピングの基本コード例
    2. 🔍 解説
    3. ✅ 実行結果の例
    4. 3-2. タグの取得・クラス指定・属性の扱い
      1. ✅ 例:リンク(<a>タグ)を全部取得する
      2. ✅ 例:特定のclassを持つ要素を取得する
    5. ✅ ちょっと便利なヒント
  4. 4. スクレイピングの注意点とマナー
    1. 4-1. まずは「robots.txt」を確認しよう
    2. 4-2. アクセスはゆっくり!間隔をあけてアクセスしよう
    3. 4-3. 利用規約を読んでおこう
    4. 4-4. User-Agentを設定しよう
    5. ✅ まとめ:安全・安心にスクレイピングを楽しもう!
  5. 5. よくあるエラーとその対処法
    1. 5-1. requests.exceptions.ConnectionError が出た!
      1. ❓ どんなエラー?
      2. 🛠 よくある原因と対策
    2. 5-2. AttributeError: 'NoneType' object has no attribute 'text'
      1. ❓ どんなエラー?
      2. 🛠 よくある原因と対策
      3. ✅ 対策コード例
    3. 5-3. 403 Forbidden が返ってくる
      1. ❓ どんなエラー?
      2. 🛠 よくある原因と対策
    4. 5-4. UnicodeEncodeError や文字化けする
      1. ❓ どんなエラー?
      2. 🛠 対策
  6. 6. まとめ|スクレイピングの第一歩を踏み出そう
    1. 🧠 本記事のふりかえり
    2. 🚀 次のステップは?
  7. よくある質問(Q&A)
    1. 関連投稿:

1. はじめに|Webスクレイピングってなに?なぜ使うの?

こんにちは!Pythonを使った自動化に興味があるみなさん、今回は「Webスクレイピング」というちょっとワクワクする技術を紹介します!

「Webスクレイピング」って聞くと、ちょっと難しそうに感じるかもしれません。でも、実はとってもシンプルな考え方なんです。
一言でいうと、Webサイトに書かれている情報を、プログラムで自動的に取り出す技術のこと。

たとえばこんなことができます👇

  • 天気予報サイトから今日の天気を自動でチェック!
  • ネットショップから商品の価格を集めて一覧にする!
  • ニュースサイトから最新の記事タイトルをまとめて取得!

これを全部、手作業じゃなくてPythonにやってもらえるのが魅力なんです。

■ なんで使うの?

ネットには便利な情報がたくさんありますが、毎回自分で見に行ってコピーするのは大変ですよね。
Webスクレイピングを使えば、その面倒な作業を自動化できます。たとえば:

  • データ分析をしたい人が、情報を集めるために使う
  • 毎日同じ作業を繰り返す必要がある仕事を効率化できる
  • 自分だけの「情報まとめツール」が作れちゃう!

しかも、Pythonの「requests」と「BeautifulSoup」というライブラリを使えば、ほんの数行のコードで実現できるんです。難しい知識がなくても大丈夫!

このあとから、実際にWebページを読み取って情報を取り出す方法を、やさしく解説していきますね😊
それでは、さっそくWebスクレイピングの世界に踏み出してみましょう!




2. Webスクレイピングで使う2つの便利なライブラリ

PythonでWebスクレイピングをするには、「requests(リクエスツ)」と「BeautifulSoup(ビューティフルスープ)」という2つのライブラリがとっても便利なんです。
ここでは、それぞれの役割と使い方をわかりやすく紹介しますね!


2-1. requestsとは?Webページを取得する方法

まずは、Webページの内容を「持ってくる」ための道具がrequestsです。

たとえば、ニュースサイトのURLをrequestsで指定すると、そのページの中身(HTMLというコードの形)をまるごと取得できます。

✅ 使い方の例

import requests

url = "https://example.com"
response = requests.get(url)

print(response.text)

上のコードでは、指定したURLからページの情報をゲットして、それを画面に表示しています。
この.textの中に、WebページのHTMLがそのまま入っているんです!

💡 ポイント

  • requests.get()でWebページにアクセス
  • response.status_codeでうまくアクセスできたかを確認(200なら成功!)
  • response.textにHTMLの中身が入っている

2-2. BeautifulSoupとは?HTMLを解析して情報を取り出す

次に出てくるのが「BeautifulSoup」。
これは、取得したHTMLから必要な部分だけを取り出すための道具です。

HTMLって、人間が読むにはごちゃごちゃしていてわかりづらいですよね?
でもBeautifulSoupを使えば、「タイトルだけほしい」「リンクだけほしい」など、ピンポイントでデータを取り出せるんです。

✅ 使い方の例

from bs4 import BeautifulSoup

soup = BeautifulSoup(response.text, "html.parser")
title = soup.title.string

print(title)

このコードでは、ページのタイトルだけを取り出しています。とっても簡単ですね!

💡 よく使う操作

  • soup.find("h1"):最初のh1タグを探す
  • soup.find_all("a"):すべてのリンク(aタグ)をリストで取得
  • .text:タグの中の文字を取り出す
  • ["href"]:リンク先のURLを取り出す

このように、requestsでWebページをゲットして、BeautifulSoupで必要な情報を取り出す。この2つを組み合わせれば、立派なWebスクレイピングができちゃうんです!

次は、実際にサンプルコードを動かして「どんなふうに情報が取れるか」を体験してみましょう!




3. 実践!Pythonでスクレイピングしてみよう

さぁ、いよいよここからは実際にPythonでWebスクレイピングをやってみましょう!
最初はシンプルなサンプルコードで、「Webページにアクセスして、タイトルを取り出す」ところまでやってみます。

3-1. スクレイピングの基本コード例

まずは、必要なライブラリをインストールしましょう。まだ入れてない方は、以下のコマンドをターミナルで実行してください。

pip install requests
pip install beautifulsoup4

これで準備OK!

では、さっそく以下のコードをPythonファイル(たとえば scrape_sample.py)に書いて実行してみましょう👇

import requests
from bs4 import BeautifulSoup

# スクレイピングしたいURL
url = "https://example.com"

# WebページのHTMLを取得
response = requests.get(url)

# BeautifulSoupで解析
soup = BeautifulSoup(response.text, "html.parser")

# タイトルを取得して表示
print("ページタイトル:", soup.title.string)

🔍 解説

  • requests.get(url):指定したURLにアクセスしてHTMLを取得
  • BeautifulSoup(..., "html.parser"):HTMLをきれいに分解して扱いやすくする
  • soup.title.string:HTMLの中にある <title> タグの中身だけを取り出す

✅ 実行結果の例

ページタイトル: Example Domain

こんなふうに、たった数行のコードでWebページから情報を引っ張ってくることができるんです!


3-2. タグの取得・クラス指定・属性の扱い

「ページタイトル」だけじゃなくて、特定の要素を狙って取ることもできますよ!

✅ 例:リンク(<a>タグ)を全部取得する

links = soup.find_all("a")
for link in links:
print(link.text, "→", link["href"])

このコードでは:

  • <a>タグ(リンク)をすべて取り出す
  • link.textでリンクの表示名を取得
  • link["href"]でリンク先のURLを取得

✅ 例:特定のclassを持つ要素を取得する

HTMLではよく「class属性」でデザインや区別をつけています。これも簡単に狙えます。

headline = soup.find("h2", class_="main-headline")
print(headline.text)

このようにして、ピンポイントで必要なデータを抜き出せるんです!


✅ ちょっと便利なヒント

  • クラス名に「-」や「_」があるときは正確に書くこと!
  • タグが見つからないときは None になるので .text を呼ぶとエラーになります → 事前に if でチェックしよう!

次は、スクレイピングをするときに気をつけたいマナーやルールを解説します。
知らないとトラブルの原因になることもあるので、しっかり学んでいきましょう!




4. スクレイピングの注意点とマナー

Webスクレイピングはとても便利な技術ですが、やり方を間違えると相手のWebサイトに迷惑をかけてしまうこともあります
場合によっては、法律にふれてしまったり、アクセスをブロックされたりすることも…。
だからこそ、マナーを守って正しく使うことがとっても大切なんです!

ここでは、スクレイピングをするときに気をつけたいルールやマナーをやさしく紹介します。


4-1. まずは「robots.txt」を確認しよう

多くのWebサイトには、**robots.txt(ロボッツ・テキスト)**というファイルがあります。

これは、「このページはスクレイピングOKですよ」または「ここはやめてね」といったルールを書いたものです。

たとえば、こんな感じのURLで見られます👇

https://example.com/robots.txt

中を見て、スクレイピングしていいかを確認しましょう。
もしDisallow: /と書かれていたら、そのサイト全体が禁止という意味になります。


4-2. アクセスはゆっくり!間隔をあけてアクセスしよう

短い時間に何回もスクレイピングをすると、相手のサーバーに負担がかかってしまいます。
人間がクリックするペースよりも速いアクセスは、「攻撃」とみなされてしまうことも😨

✅ 対策としては…

import time

# アクセスの間に1秒休憩
time.sleep(1)

このようにtime.sleep()を使って、1〜3秒ほどの休憩を入れるのがマナーです。


4-3. 利用規約を読んでおこう

Webサイトの中には、「自動的な取得を禁止します」と利用規約で明記しているところもあります。

「公開されてるからOK」と思わずに、利用規約(Terms of Service)を読んで確認するクセをつけましょう。


4-4. User-Agentを設定しよう

サイトによっては、requestsを使ってアクセスすると「これはロボットだ!」と判断してアクセスを拒否することがあります。

そんなときは、**User-Agent(ユーザーエージェント)**という設定を使うと通ることがあります。

headers = {
"User-Agent": "Mozilla/5.0"
}
response = requests.get(url, headers=headers)

これで「普通のブラウザから来たよ〜」と伝えることができるんですね。


✅ まとめ:安全・安心にスクレイピングを楽しもう!

スクレイピングはとってもパワフルな技術。でも、そのぶん**「ルールを守って使う」ことがとても大切**です。

  • robots.txtをチェックする
  • アクセス頻度は控えめに
  • 利用規約をちゃんと読む
  • ヘッダー情報を設定する(User-Agent)

これらを意識して、安全にWebの情報を活用していきましょう!




5. よくあるエラーとその対処法

Webスクレイピングをしていると、時々うまく動かないことがあります。
「なんでエラーになるの?」「コードは合ってるのに…」と戸惑うこともあるかもしれません。

でも大丈夫!
ここでは、初心者がよく出会うエラーとその対処法をやさしく解説していきます。
うまくいかないときのチェックポイントとして、ぜひ参考にしてください!


5-1. requests.exceptions.ConnectionError が出た!

❓ どんなエラー?

→ Webサイトにアクセスしようとしたけど、接続できなかったというエラーです。

🛠 よくある原因と対策

  • URLが間違っている → スペルミスがないか確認!
  • インターネットに接続されていない → Wi-Fiやネット回線を確認!
  • アクセスがブロックされている → headersを設定してみよう!
headers = {
"User-Agent": "Mozilla/5.0"
}
requests.get(url, headers=headers)

5-2. AttributeError: 'NoneType' object has no attribute 'text'

❓ どんなエラー?

.find()などで探したタグが見つからなかったのに、.textしようとしてエラーになっています。

🛠 よくある原因と対策

  • 指定したタグやクラスが存在しない(変更されてるかも!)
  • HTMLの構造を確認しよう(ブラウザで「検証」してみて)

✅ 対策コード例

title_tag = soup.find("h1")
if title_tag:
print(title_tag.text)
else:
print("タイトルが見つかりませんでした。")

5-3. 403 Forbidden が返ってくる

❓ どんなエラー?

→ サイトが「このアクセスは許可しません」とブロックしています。

🛠 よくある原因と対策

  • requestsはロボット扱いされやすい → User-Agentを設定しよう!
headers = {
"User-Agent": "Mozilla/5.0"
}
response = requests.get(url, headers=headers)

5-4. UnicodeEncodeError や文字化けする

❓ どんなエラー?

→ 日本語などの文字コードが原因でうまく表示されないときに起きます。

🛠 対策

  • ファイルに保存するときは encoding="utf-8" を指定!
  • BeautifulSoupの読み込み時に response.encoding = response.apparent_encoding を追加してみるのも◎
response.encoding = response.apparent_encoding
soup = BeautifulSoup(response.text, "html.parser")

エラーってこわいものに見えるけど、実はヒントのかたまりです。
一つひとつのエラーメッセージを読んでいけば、「何を直せばいいか」が見えてきます。

慣れてくると、「あ、これはあの対処法だな」とすぐに分かるようになりますよ 😊




6. まとめ|スクレイピングの第一歩を踏み出そう

ここまでお読みいただきありがとうございます!
今回は、Pythonを使ってWebページの情報を自動で取り出す「Webスクレイピング」について、基本から実践までをやさしく解説してきました。


🧠 本記事のふりかえり

Webスクレイピングって?
→ Webサイトにアクセスして、欲しい情報を自動で取得する技術のこと。

使うライブラリは?
requestsでWebページを取得、BeautifulSoupでHTMLを解析!

実際にやってみた!
soup.title.stringでタイトルを取り出したり、find_all("a")でリンクを一覧にしたりできましたね!

注意点は?
robots.txtや利用規約をチェックし、アクセス間隔に気をつけてマナーを守ろう!

エラー対策もばっちり!
→ よくあるエラーとその対処法も紹介しました。落ち着いて読み解けば大丈夫!


🚀 次のステップは?

「スクレイピング楽しいかも!」と思えたら、次のようなステップに進んでみましょう👇

  • スクレイピングで集めたデータをCSVファイルに保存してみる
  • ニュースサイトや天気サイトなど、自分の興味があるサイトを対象に練習
  • さらに一歩進んで、Googleスプレッドシートに自動で書き込みするのもおすすめ!

👉 参考記事:PythonでWebスクレイピングしてスプレッドシートに自動書き込みする方法

スクレイピングは、情報収集や自動化の第一歩にぴったりの技術です。
慣れてくると、**「自分だけの情報収集ツール」や「業務の効率化ツール」**が作れるようになります。

Pythonと一緒に、あなたのやりたいことを少しずつ形にしていきましょう!


よくある質問(Q&A)

Q
Webスクレイピングって違法じゃないの?
A

基本的には違法ではありませんが、注意が必要です。
Webページに公開されている情報であっても、そのサイトの利用規約やrobots.txtでスクレイピングを禁止している場合があります。
マナーとルールを守って、相手に迷惑をかけないようにしましょう。

Q
JavaScriptで表示されるデータは取得できないの?
A

requestsでは取得できません。
JavaScriptで後から読み込まれるデータは、HTMLには最初から含まれていないため、通常のスクレイピングでは見えないのです。

そういうときは、Selenium(セレニウム)やPlaywrightなどのツールを使うことで、ブラウザを自動操作しながらデータを取得することができます。

Q
Python初心者でもできますか?
A

もちろんできます!
今回紹介したコードは10行前後の短いコードで構成されていますし、わからない単語も1つずつ覚えていけば大丈夫です。
まずはこの記事のサンプルコードを真似してみるだけでも、ぐっと理解が深まりますよ

※当サイトはアフィリエイト広告を利用しています。リンクを経由して商品を購入された場合、当サイトに報酬が発生することがあります。

※本記事に記載しているAmazon商品情報(価格、在庫状況、割引、配送条件など)は、執筆時点のAmazon.co.jp上の情報に基づいています。
最新の価格・在庫・配送条件などの詳細は、Amazonの商品ページをご確認ください。

スポンサーリンク