LoginSignup
1

More than 1 year has passed since last update.

有限な無限スクロールページをスクレイピングしたかった

Posted at

あらすじ

今回スクレイピングしたいサイトがスクロールバーを
ある程度下まで下げると、まだ読み込まれていない
コンテンツが出力される無限スクロールページだった。

対象データは約3万件。
最下端まで手動で手動でたどってHTMLから抜き出すのも
良いといえば良いけどそんなにヒマではない……

そんなこんなで、Google先生に伺ったところ
下記がヒットしたので備忘で押さえておきたいと思った次第。

下端が存在する無限スクロールを自動化

有限な無限スクロール対策
def endlessScroll():
    # 対象ページにアクセス
    driver.get(targetURL)

    # アクセスできたらとりあえず、全部スクロール
    sleep(3)
    # 現在のウィンドウの高さを取得
    winHeight = driver.execute_script("return window.innerHeight")

    # スクロール開始位置の初期化
    lastTop = 1

    # 無限スクロールページの最下部までループ
    while True:
        # スクロール前のページの高さを取得
        lastHeight = driver.execute_script("return document.body.scrollHeight")

        # スクロールの開始位置を設定
        top = lastTop

        # 最下部まで徐々にスクロールする
        while top < lastHeight:
            top += int(winHeight * 0.8)
            driver.execute_script("window.scrollTo(0, %d)" % top)
            sleep(1)
        
        # スクロール後のページの高さを取得
        sleep(1)
        newLastHeight = driver.execute_script("return document.body.scrollHeight")

        # スクロール前後で高さに変化がなくなったら終了
        if lastHeight == newLastHeight:
            break

        # ループが終了しなければ現在の高さを再設定して次のループ
        lastTop = lastHeight

流れとしては、

  1. 起動しているブラウザのスクロールバーの長さを取得
  2. 現在の下端付近(サンプルでは80%地点)までスクロールを実施
  3. サイト側で無限スクロールのメソッドが実行される
  4. 1-3を繰り返すと最下端に到達するので、到達した時点で終了

あとはいい感じに情報をいただいてミッションコンプリート……
わざわざ張り付いてENDキーを延々と押し込む作業から解放されました……
良かったよかった( ˘ω˘ )
※ 都度sleepとか入れてるけど、丸コピだと動かないので
  必要なモジュールは都度importしようね。

感謝

見てみて!Python+Selenium で無限スクロールページを自動スクロールする
めっちゃ助かりました。感謝です。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1