【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)
Author And Source
この問題について(【scrapy-selenium】spider作成〜メイン処理を書き始める前に先に修正した方が良いコード), 我々は、より多くの情報をここで見つけました https://qiita.com/takuma-esashika/items/f05ef5493c06163664ce著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .