質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.47%

  • Python 3.x

    6877questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

  • スクレイピング

    357questions

Python スクレイピング スクロールしなければ全ての情報が出てこないサイトのデータ抽出方法

受付中

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,037

RWW

score 5

Pythonを使いスクレイピングのコードを書いています。
https://www.gucci.com/jp/ja/ca/men/mens-ready-to-wear-c-men-readytowear
このサイトの商品ごとのURLを抽出したいのですが、このページは一度「全てを表示」ボタンを押すことで
全ての商品が表示されます。
また、商品のコンテンツが36個毎に分割されており、下にスクロールしていくと
URLの末尾に数字が付与されていき、URLが変わっていきます。

seleniumを使い、「全てを表示」ボタンを押し、抽出したのですが末尾に「2」が付与されるページまでの情報しか
抽出できませんでした。

何かいい方法はあるでしょうか?

url = 'https://www.gucci.com/jp/ja/ca/men/mens-ready-to-wear-c-men-readytowear'
from selenium import webdriver
browser = webdriver.Chrome("/Users/〜/chromedriver")
browser.implicitly_wait(10)
browser.get(url)
links = browser.find_elements_by_css_selector('.ajax-loader-link-container> a')
links[0].click()
new_window = browser.window_handles[0]
browser.switch_to_window(new_window)
item_links = browser.find_elements_by_css_selector('a.product-tiles-grid-item-link')
print(len(item_links))
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

+1

seleniumで画面スクロールを再現するといいのかなと思ったら、ありました。
JavaScriptでSelenium越しにヘッドレスブラウザのスクロールを行う様子ですね。

【Python】Seleniumでページの下部へスクロールさせる方法 | あずみ.net

ですので、browser.switch_to_window(new_window)の下あたりに、以下のコードを追加して実行してみてはどうでしょう?

driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/04/18 11:43

    ご回答ありがとうございます。私もこれは検討したのですがこの方法だと
    https://www.gucci.com/jp/ja/ca/men/mens-ready-to-wear-c-men-readytowear/1
    この末尾に1がついているページの最下部までしかスクロールされません。

    本来はこのままスクロールしていき、末尾が6のURLまであります。

    他にいい方法がありましたら教えていただくと助かります。

    キャンセル

+1

(だいぶ前に質問されたものなので、すでに解決されているかもしれませんが、)
私も質問者さんと同じ壁にぶつかり、試行錯誤した結果、解決したので回答させていただきます。

「ページソースを取得し、その情報量が変化しなくなったら、ページスクロールを止める。」というコードを書いてみました。うまくいきました。
以下、(「全てを表示」ボタンを押した後に行う)スクロール部分だけ書いたコードです。

html01=driver.page_source
while 1:
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    sleep(3)
    html02=driver.page_source
    if html01!=html02:
        html01=html02
    else:
        break

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

関連した質問

同じタグがついた質問を見る

  • Python 3.x

    6877questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

  • スクレイピング

    357questions