【scrapy-selenium】spider作成〜メイン処理を書き始める前に先に修正した方が良いコード


作成したspiderのソースコードを書き始める前に、気をつけて置いた方が良いことの覚書。

例:Amazon(https://www.amazon.co.jp/ のスクレイピングをするとき)

spider作成のコマンド

scrapy genspider [-t crawl] www.amazon.co.jp/
プロトコル名などの部分は要らないので、「https://」の部分は削除しておくこと。
crawlテンプレートを使う場合はオプション-t crawlをつけること。

scrapy-seleniumを使う場合のmiddleware設定

scrapy-seleniumの設定方法の「READEME」の内容を参照

今回はchromeを使ったのでsettings.pyの最後に以下のように追記

SELENIUM_DRIVER_NAME = 'chrome'
SELENIUM_DRIVER_EXECUTABLE_PATH = which('chromedriver')
SELENIUM_DRIVER_ARGUMENTS=['-headless']  # '--headless' if using chrome instead of firefox

また、45行目あたりを以下のように変更

# Enable or disable spider middlewares
# See https://docs.scrapy.org/en/latest/topics/spider-middleware.html
DOWNLOADER_MIDDLEWARES = {
    'scrapy_selenium.SeleniumMiddleware': 800
}

spiderファイルの中身

class KeywordExploreSpider(CrawlSpider):直下
  • spider作成時に入力したものが反映されるので下位ドメインの記述がある場合は削除
    allowed_domains =

(例:
www.amazon.co.jp/ref=nav_logo
→www.amazon.co.jp/)

  • 初期設定だとhttpになるので、httpsにする
    また、行末の「/」は不要なので削除
    start_urls =

(例:
http://www.amazon.co.jp/ref=nav_logo/
https://www.amazon.co.jp/ref=nav_logo

その他覚えておくと便利なコード
  • ブラウザの画面遷移とかの時間待って上げてから次の動作を命令する
    sleep(3)

事前にsleepモジュールをインポートしておくこと
from time import sleep

  • ヘッドレスモード(PC上にブラウザを立ち上げない)で動いてるので、
    所々スクリーンショットを取りながら動作を確認。
    driver.save_screenshot('01_ブラウザ立ち上げ.png')

ターミナルでseleniumとchromedriverをインストールしておくこと

pip3 install selenium
brew install chromedriver

モジュールのインポート方法は以下の通り
from selenium import webdriver

  • スクリーンショットを取ろうにも、画面が一部しか映らなくて、ちゃんとできてるか不安な場合追記
    JavaScriptで画面をフルスクリーンにすることができる。
        w = driver.execute_script('return document.body.scrollWidth')
        h = driver.execute_script('return document.body.scrollHeight')
        driver.set_window_size(w, h)