Scrapy Shellの自動補完(オートコンプリート)でよく発生するトラブルとその解決方法です。
そもそも自動補完が使えない
IPythonをインストールしましょう。
$ pip install ipython
Scrapy ShellはIPythonがインストールされていれば標準Pythonコンソールの代わりにそちらを使います。
補完しようとするとログが出力されて邪魔だ
Scrapy Shell起動時にログレベルを変更しましょう。
$ scrapy shell -s LOG_LEVEL='INFO' <URL>
デフォルトのログレベルがDEBUGになっています。
そのままだと初めて補完するときや補完しようとして候補がないときなどに以下なログが出力されてしまいます。
# res(ponse)を補完する
In [1]: res2021-02-03 23:29:19 [parso.cache] DEBUG: pickle loaded: /PATH/venv/lib/python3.8/site-packages/jedi/third_party/typeshed/stdlib/2and3/builtins.pyi
2021-02-03 23:29:19 [parso.cache] DEBUG: pickle loaded:/PATH/venv/lib/python3.8/site-packages/jedi/third_party/typeshed/stdlib/3/sys.pyi
In [1]: response
Out[1]: <200 https://www.google.com/>
# hogeを補完する
In [2]: hoge2021-02-03 23:29:34 [parso.python.diff] DEBUG: diff parser start
2021-02-03 23:29:34 [parso.python.diff] DEBUG: line_lengths old: 1; new: 1
2021-02-03 23:29:34 [parso.python.diff] DEBUG: -> code[replace] old[1:1] new[1:1]
2021-02-03 23:29:34 [parso.python.diff] DEBUG: parse_part from 1 to 1 (to 0 in part parser)
2021-02-03 23:29:34 [parso.python.diff] DEBUG: diff parser end
表示内容をもっと減らしたければ以下のようにしてもよいです。
# ログレベルを更に上げる
$ scrapy shell -s LOG_LEVEL='WARNING' <URL>
$ scrapy shell -s LOG_LEVEL='ERROR' <URL>
$ scrapy shell -s LOG_LEVEL='CRITICAL' <URL>
# ログを無効にする
$ scrapy shell -s LOG_ENABLED=False <URL>
Scrapy Shellを起動するときにいちいちログレベルを指定するのが面倒だ
Scrapyプロジェクトのsettings.pyでログレベルを設定しましょう。
settings.pyの場所はプロジェクトルートのscrapy.cfgに書かれています。
scrapy.cfg
[settings]
default = your_project_name.settings
settings.pyに以下のように設定を記述します。
settings.py
LOG_LEVEL = 'INFO'
現在のディレクトリでScrapy Shellを実行したときに適用されるログレベルは、以下のコマンドで確認できます。
$ scrapy settings --get LOG_LEVEL
INFO