カテゴリ: Python 更新日: 2026/06/03

Pythonで動的コンテンツを取得する方法!Ajaxリクエストの解析を完全ガイド

Pythonで動的コンテンツを取得する方法!Ajaxリクエストの解析
Pythonで動的コンテンツを取得する方法!Ajaxリクエストの解析

先生と生徒の会話形式で理解しよう

生徒

「PythonでWebスクレイピングに挑戦しているのですが、ブラウザで見えている文字がプログラムだと取得できないんです。何かコツがあるんでしょうか?」

先生

「それは『動的コンテンツ』が原因かもしれませんね。最近のWebサイトは、ページを開いた後に後からデータを読み込む仕組みが多いんですよ。」

生徒

「後から読み込む……?だから最初のプログラムでは空っぽだったんですね。どうすればその隠れたデータを手に入れられますか?」

先生

「Ajax(エイジャックス)という通信の仕組みを解析するのが近道です。初心者の方でも分かりやすく、その手順を解説していきましょう!」

1. 動的コンテンツとAjaxの基本を知ろう

1. 動的コンテンツとAjaxの基本を知ろう
1. 動的コンテンツとAjaxの基本を知ろう

Webスクレイピングを始めたばかりの人が最初にぶつかる壁、それが「動的コンテンツ」です。これは、私たちがブラウザでページを開いた瞬間にはまだ存在せず、少し遅れて表示される情報のことを指します。

例えば、SNSのタイムラインを下にスクロールしたときに新しい投稿が自動で出てきたり、ボタンを押さなくても株価の数字がリアルタイムで変わったりする仕組みです。この「裏側でこっそりデータをやり取りする魔法」の名前をAjax(エイジャックス)と呼びます。

通常のスクレイピング手法(requestsライブラリだけで取得する方法など)では、この「後から届く魔法のデータ」をキャッチすることができません。なぜなら、データが届く前にプログラムが「はい、読み込み終わり!」と判断してしまうからです。

2. なぜAjaxリクエストの解析が必要なのか?

2. なぜAjaxリクエストの解析が必要なのか?
2. なぜAjaxリクエストの解析が必要なのか?

動的なサイトからデータを取る方法は大きく分けて2つあります。1つは「Selenium(セレニウム)」などのツールを使ってブラウザを自動操作する方法。もう1つが、今回ご紹介する「Ajaxリクエストの直接解析」です。

Ajaxを解析するメリットは、圧倒的なスピードと安定性です。ブラウザをいちいち立ち上げる必要がなく、Webサイトのサーバーが「データ専用の窓口」から送信している純粋なデータ(JSON形式など)を直接受け取ることができるからです。

用語解説:JSON(ジェイソン)

JavaScript Object Notationの略で、データの受け渡しに特化した書き方のルールです。Pythonの「辞書型」によく似ていて、プログラムで非常に扱いやすいのが特徴です。

3. 開発者ツールでデータの「通信路」を見つける

3. 開発者ツールでデータの「通信路」を見つける
3. 開発者ツールでデータの「通信路」を見つける

まずは、パソコンのブラウザ(Google Chromeなど)に標準で搭載されている「開発者ツール」を使って、データの出所を突き止めましょう。これはプログラミング未経験の方でも、マウス操作だけで簡単に行えます。

  1. 調べたいWebページでキーボードの「F12」キーを押します。
  2. 右側(または下側)に出てきた画面の「Network(ネットワーク)」タブをクリックします。
  3. 「Fetch/XHR」というボタンを選択します。これがAjax通信だけを絞り込むフィルターになります。
  4. ページを更新(リロード)すると、裏側で行われている通信が一覧で表示されます。

この一覧の中から、自分が欲しい文字データが含まれている通信を探し出し、その「URL」を特定するのが最初のステップです。

4. requestsライブラリでデータを直接取得する

4. requestsライブラリでデータを直接取得する
4. requestsライブラリでデータを直接取得する

データの送信先(URL)が分かったら、いよいよPythonコードの出番です。ここでは、最も人気のあるrequestsライブラリを使って、データ専用の窓口にアクセスしてみましょう。

次のコードは、仮想のデータ取得窓口から情報を取ってくるシンプルな例です。


import requests

# 開発者ツールで見つけた「データ通信専用のURL」を指定します
api_url = "https://api.example.com/data/items"

# サーバーに対して「データをください」とリクエストを送ります
response = requests.get(api_url)

# 届いたデータ(JSON)をPythonで扱える形式に変換します
data = response.json()

# 中身を表示してみましょう
print(data)

このプログラムを実行すると、HTMLタグに囲まれていない「生データ」が取得できます。まるで魔法のようにスッキリとしたデータが手に入りますよ。

5. 取得したJSONデータを解析して活用する

5. 取得したJSONデータを解析して活用する
5. 取得したJSONデータを解析して活用する

Ajax通信で返ってくるデータの多くは、前述した「JSON形式」です。これは辞書のような構造をしており、「キー(名前)」と「値(中身)」がセットになっています。

例えば、商品のリストが返ってきた場合、そこから「商品名」と「価格」だけを取り出す方法を見てみましょう。プログラミングが初めての方でも、特定の「ラベル」を指定するだけなので難しくありません。


# 取得したデータが以下のようなリスト形式だったと仮定します
items = [
    {"name": "Python入門書", "price": 2500},
    {"name": "スクレイピング講座", "price": 3200}
]

# 1つずつ順番に取り出して表示します
for item in items:
    name = item["name"]   # 「name」というラベルの中身を取り出す
    price = item["price"] # 「price」というラベルの中身を取り出す
    print(f"商品名: {name} / 価格: {price}円")

商品名: Python入門書 / 価格: 2500円
商品名: スクレイピング講座 / 価格: 3200円

6. ヘッダー情報を設定して「人間」になりすます

6. ヘッダー情報を設定して「人間」になりすます
6. ヘッダー情報を設定して「人間」になりすます

Webサイトの中には、プログラムからのアクセスを拒否する設定になっているものがあります。サーバーが「あ、これは機械(Python)からのアクセスだ!」と見破ってしまうのです。

これを回避するために、User-Agent(ユーザーエージェント)という情報を設定します。これは「私はGoogle Chromeを使っている人間ですよ」という自己紹介のようなものです。これを正しく伝えることで、Ajaxリクエストが成功しやすくなります。


import requests

url = "https://example.com/ajax-endpoint"

# 「私はブラウザからアクセスしています」という設定を作ります
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}

# 設定(headers)を添えてリクエストを送ります
response = requests.get(url, headers=headers)

if response.status_code == 200:
    print("データの取得に成功しました!")
else:
    print("アクセスが拒否されたか、エラーが発生しました。")

7. パラメータを使って特定のデータを指定する

7. パラメータを使って特定のデータを指定する
7. パラメータを使って特定のデータを指定する

Ajaxリクエストでは、URLの後ろに「?page=2」や「?category=books」といった細かい条件が付いていることがあります。これをクエリパラメータと呼びます。Pythonでは、この条件を辞書形式でスマートに指定できます。

特定のカテゴリや、何ページ目のデータが欲しいかを指示することで、膨大なデータの中から必要なものだけをピンポイントでスクレイピングできるようになります。


import requests

url = "https://api.example.com/search"

# 検索条件を辞書で用意します
params = {
    "keyword": "プログラミング",
    "limit": 10,
    "sort": "new"
}

# paramsとして条件を渡すと、自動的にURLを組み立ててくれます
response = requests.get(url, params=params)

# 実際にアクセスしたURLを確認してみましょう
print(f"アクセス先: {response.url}")

アクセス先: https://api.example.com/search?keyword=%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0&limit=10&sort=new

8. スクレイピングを行う際の大切なマナー

8. スクレイピングを行う際の大切なマナー
8. スクレイピングを行う際の大切なマナー

Ajaxの解析ができるようになると、驚くほど簡単に大量のデータが取れるようになります。しかし、ここで絶対に忘れてはいけないのが「相手のサーバーに迷惑をかけない」というルールです。

プログラムは人間が手で操作するよりも数万倍速くアクセスできてしまいます。短い時間に何度もアクセスすると、相手のサイトが動かなくなってしまう(攻撃とみなされる)恐れがあります。必ず1回アクセスしたら、数秒間の休憩(time.sleep)を入れるようにしましょう。

法律やサイトの利用規約(robots.txtなど)を守ることも、プログラミングを学ぶ上での大切な一歩です。優しく、正しくデータを活用するスキルを身につけていきましょう。

コメント
コメント投稿は、ログインしてください

まだ口コミはありません。

関連記事:
Python のWebスクレイピングの記事一覧へ
新着記事
New1
PHP
PHPでファイルの存在確認・削除・移動を行う方法!初心者向けにfile_exists・unlink・renameを解説
New2
Python
Pythonでネットワークスキャナーを作る方法!Scapy入門ガイド(初心者向け)
New3
ChatGPT
ChatGPTでPythonのバグを見つける方法!初心者が確認すべきチェックポイント
New4
Python
PythonでICMP(Ping)を送信する方法を徹底解説!subprocessとscapyでネットワーク確認
人気記事
No.1
Java&Spring記事人気No1
PHP
PHPの配列をソートする方法!sort, rsort, asort, ksortの使い方を丁寧に解説します!
No.2
Java&Spring記事人気No2
ChatGPT
ChatGPTでPythonコード作成とは?初心者向けに使い方・メリット・注意点を徹底解説
No.3
Java&Spring記事人気No3
Python
PythonでAPIリクエストを送信する方法を完全解説!requestsライブラリで簡単API通信
No.4
Java&Spring記事人気No4
Python
Pythonのrequestsライブラリ完全入門!HTTPリクエストの送り方を初心者向けにやさしく解説
No.5
Java&Spring記事人気No5
Python
Pythonの非同期HTTPリクエスト(asyncio + aiohttp)完全ガイド!初心者でもわかるネットワークプログラミング
No.6
Java&Spring記事人気No6
Python
Pythonのtimedeltaで日付の加算・減算をしよう!初心者でもわかる時間操作の基本
No.7
Java&Spring記事人気No7
PHP
PHPの変数の命名規則とベストプラクティスをやさしく解説!初心者向け完全ガイド
No.8
Java&Spring記事人気No8
Python
Pythonでzip圧縮・解凍する方法を徹底解説!初心者でもわかるzipfileモジュールの使い方