3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

スクレイピングで無限スクロールするときのTips

Posted at

#機械学習するときのデータ収集
機械学習をやっていて、欲しい画像をえるためにスクレイピングで、googleエンジンなどを使うとぶち当たるのは無限スクロールの壁。
ページネーションされていればいいけど・・・
マウスでのスクロールを機械的にする方法はいろいろとあるようですが、
その中で自分の環境でうまくいった方法をお教えします。
多分これが一番早いと思います・・・

##実行させるJavescript
まずはスクロール
多くのサイトで挙げられているのが
driver. window.scrollTo(0, window.innerHeight)
ですが、自分は
document.getElementById('b_footer').scrollIntoView(true)
を採用して、フッターのところまでスクロールさせてます。
サイトによってはフッターがなかったり、代わりにToastsがあったりしますが、基本的に一番下のタグを選択できればOKかと

##読み込み終了まで待機する
下までスクロールしたら画像が表示するまで待機する必要がありますが、
Seleniumには暗黙的に待つimplicitly_wait()メソッドが用意されていますが、これではうまくいきませんでした。
な、の、で、
time.sleep()でプログラム自体を待機させてます。とあるサイトでは御法度とされてますが・・・

##プログラミングコード例
Bing画像検索で画像サムネイルを得るためのコードです。

from selenium import webdriver
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC 
from selenium.webdriver.common.keys import Keys
from time import sleep

keyword="牛丼"

driver = webdriver.Firefox()

url="https://www.bing.com/?scope=images&FORM=Z9LH1"
driver.get(url)

form = driver.find_element_by_name("q")
form.send_keys(Keys.ENTER,keyword,Keys.ENTER)
WebDriverWait(driver,10).until(
EC.presence_of_element_located((By.CLASS_NAME,"mimg"))
)
imgset=set()
for i in range(20):
    print(i)
    #driver.execute_script("window.scrollTo(0,100 );")
    driver.execute_script("document.getElementById('b_footer').scrollIntoView(true)")
    driver.implicitly_wait
    sleep(2)
    img = [ele.get_attribute("src") for ele in driver.find_elements_by_class_name("mimg")]
    imgset |= set(img)

重複を防ぐために画像のurlをセットに格納しています。

###最後に
もしいい案があれば教えて下さい。

3
5
0

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
3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?