CodeGym /Javaコース /Python SELF JA /JavaScriptコンテンツの扱い方

JavaScriptコンテンツの扱い方

Python SELF JA
レベル 33 , レッスン 1
使用可能

1. 動的ページへのイントロダクション

サイトからデータをスクレイピングしようとしたとき、JavaScriptを使ってリアルタイムでコンテンツを更新するサイトに当たったことがあるなら、これは本当にパズルのように思えることがあるよね。でも、心配しないで!よく言う通り、どんなに複雑なコードでも、設定次第で魔法のように見えるようにできるんだ。では、ライブラリrequests_htmlがこうしたコンテンツとどう付き合うのか見ていこう。

よく知られているように、すべてのウェブページが同じくらい有用ってわけじゃないんだ。一部のページはすぐにコンテンツをロードするけど、他のページはJavaScriptを使って動的に生成したり更新したりすることがある。これがデータを取り出したい人にとっては少しばかり面倒なことになる。というのも、開発者ツールを使って見えるHTMLと、普通のリクエストで取得するHTMLが違うことがあるからなんだ。

動的コンテンツをスクレイピングする際の問題

多くのウェブ用ライブラリ(例えばrequestsみたいなやつね)は、サーバーのレスポンスだけに依存して動作するから、JavaScriptを実行できないんだ。つまり、コンテンツがJavaScriptを使ってロードまたは変更されている場合、普通のリクエストではそれを全く見ることができないことがあるんだ。

2. ライブラリrequests_htmlの使用

ここで登場するのがrequests_htmlだ。これはライブラリrequestsの簡潔さとブラウザのJavaScript実行性能を融合させたものなんだ。これを使えば、まるで本当にブラウザを使っているみたいに動的なウェブページとやりとりすることができるよ。

ライブラリのインストールと設定

まずはじめにrequests_htmlをインストールしよう。お気に入りのターミナルを開いて次のコマンドを実行してみて:

Bash
pip install requests-html

これでライブラリがインストールされたよ!さぁ、これを使ってみよう。

requests_htmlを使ったJavaScriptコンテンツの取得の基本

requests_htmlは私たちの生活をもっと簡単にしてくれるんだ。じゃあ実際にこれがどう動くのか見てみよう。例えば、JavaScriptを通じてデータを生成するページがあるとするよね。

Python

from requests_html import HTMLSession

# HTMLセッションを作成する
session = HTMLSession()

# ウェブページにリクエストを送る
response = session.get('https://example-dynamic-page.com')

# JavaScriptをレンダリングする
response.html.render()

# データを抽出する
data = response.html.find('#dynamic-content', first=True)
print(data.text)

これぞ魔法!普通のrequestsと違って、requests_html.render()メソッドを提供してくれるんだ。これを使うことでページを「実行」し、JavaScriptを処理できるようになる。ページが「動き出す」と、以前学んだセレクターを使って必要なデータを抽出することが簡単にできるんだ。

3. データ抽出の例

それでは、もっと深掘りしていくつかの例を見てみよう。これでrequests_htmlがどんなシチュエーションでも役に立つことが分かるはずだよ。

動的ページからデータを抽出する実践例

例えば、スクロール後に最新ニュースが読み込まれるページを考えてみよう。requests_htmlなら、ユーザーの動作を模倣することができるんだ。

Python

url = 'https://example-news-site.com'

# ページを読み込む
response = session.get(url)

# 必要に応じてタイムアウトを延ばしてレンダリングを実行する
response.html.render(timeout=20)

# ニュース項目を見つける
news_items = response.html.find('.news-item')

for item in news_items:
print(item.text)

こんな感じで、以前は捉えにくかったコンテンツに楽々アクセスできるようになるんだ!

requests_htmlを使ったJavaScriptコンテンツの処理

requests_htmlと、前の講義で学んだCSSセレクターを使えば、ウェブページ上のコンテンツをまるでスクレイピングの達人のように扱えるよ!

Python

# ニュース見出しの最初の要素を選択する
headline = response.html.find('.news-headline', first=True)
print(headline.text)

# 要素からリンクを抽出する
link = headline.find('a', first=True).attrs['href']
print(link)

4. 実践的なアドバイスとテクニック

requests_htmlは強力なツールだけど、それを使う際に覚えておくべきいくつかのことがあるんだ:

  • タイムアウトと遅延: より複雑なページの場合、レンダリングタイムアウトを設定するのを忘れないでね。これで遅いダウンロードによるエラーを避けやすくなるよ。
  • レンダリングのリソース: requests_htmlはJavaScriptをレンダリングするため、多くのリソースを消費することがある。特に大規模なデータや複雑なページの場合、プロセスが遅くなる可能性があるんだ。
  • CAPTCHAとボット防止対策: requests_htmlはアンチボット保護やCAPTCHAを回避する機能を持っていないよ。だから、もっと難しいケースではSeleniumを使ったほうがいいかもね。
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION