該当のページは、javascript
によって動的にページの内容を変化させています。
このようなページの場合、ページのロードを待つ必要があります。しかし、requests
に代表されるリクエスト方法では、javascript
適用前のまっさらな状態の HTML
しか取得できません。
解決策はいくつかあります。
API を利用する
この場合、まず始めにすることは開発者ツールのネットワークタブを開いて、どのような通信が行われているかを確認します。もしここに、json
データを返す API
等の URL があれば、それのレスポンスを確認します。幸い、今回はそれが見つかりました。
https://api.makuake.com/v2/projects?page=1&per_page=15&type=most-funded
レスポンスの中身は質問者さんが欲しがってる内容です。この URL にリクエストを投げて、返ってきたレスポンスを res.json()
として、辞書型に変換します。あとは、辞書を操作する方法で任意の中身を取り出すだけです。
HTML を解析する
ネットワークタブでこのような URL が見つからなかった場合は、HTML
そのものに json
が埋め込まれているパターンがあります。
まず、script
タグを探します。次に、その属性が application/json
であるものがないか探します。もし、あればその要素を取得して、json.load()
を利用して辞書型に変換して任意の中身を取り出します。
ブラウザ自動操作
どちらの方法でも取得できない場合、ブラウザ自動操作ツールの出番です。selenium
や playwright
等を使って要素が出現するまでページのロードを待機します。
selenium
なら、driver.implicitly_wait(10)
のように待機時間を設定します。playwright
なら、非同期で await
するだけです。
0 コメント