やりたいこと
「世界中のプリンをマロが…」
「おほんっ、間違えたでおじゃる」
「Scrapyをステップ実行で解析したいでおじゃる。ブレークポイントを使わせてたも!」
あらすじ
PythonでWebスクレイピングをするなら、とりあえずScrapyです。Scrapyはスクレイピングのためのフレームワークです。ところが、チュートリアルから順に進めていくと、クロールするときのデバッグが難しいことに気が付きます。さて、どうやって解決するのでしょうか?
スクレイピングをしよう
「ぬるっふっふっふっふっふっふっふ、世界中から買い占めるでおじゃる」
「ぬるっふっふっふっふっふっふっふ」
「(なんでしょう?エイリアン?世界侵略??)」
「(!!)」
「おじゃ様!なにをしておられるんですか?」
「プリンの販売情報を自動取得しようと思っての、Webスクレイピングしておるのじゃ」
「(おじゃ様が成長しておられます!プリン如きのためとは言え素晴らしいです!)」
「それは名案にございます!」
「しかし、困っておっての、やはり、まろには、ちと早すぎたのかも知れんの」
「(おじゃ様せっかくの成長のチャンス!ここは引き伸ばさねば!)」
環境
- Pipenv
- WSL2 : Debian
- Python 3.9
- VScode Latest
問題点
「どこで困っておられるのですか?」
「スパイダーにクロールさせるには、CLIで実行オプションを付けるでおじゃるがの」
「はい」
「こんな感じじゃの」
scrapy crawl myspider
「これは順を追って作業するのに便利でございますね」
「そちは良く分かっておるようじゃの」
「光栄にございます」
「しかし、vscodeでPythonを使う時は、とりあえずCurrentFile実行との設定をしておるのじゃ。」
「そちも、こうlaunch.json
に以下の設定を入れておるのではないかの?」
{
"version": "0.2.0",
"configurations": [
{
"name": "Python: Current File",
"type": "python",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal"
}
]
}
「わたくしもそうでございますよ、おじゃ様?何か問題でも?」
「まろも、簡単だとタカを括っておったのでおじゃる。」
「これでは、スパイダーを書いたファイルをデバッグしようとしても」
「『クラスに構文エラーがあるか?』くらいしか分からぬでおじゃる。」
「たしかに難しいでございますね」
解決方法
「それでは、新しくデバッグ構成を追加してみてはいかがでしょう?」
「はて?Debug構成の追加とな」
「デバッグボタンの横のドロップダウンリストからスパイダー専用を選べるようにいたしましょう」
「おじゃ、それは面白そうじゃの」
「こんな感じの見た目を目標に致しましょう」
「これならスパイダーを編集しているときに、『F5』ショートカットキーが使えそうじゃの」
「さすが、おじゃ様、お気付きになられましたか」
「しかし、スパイダーがたくさんいる時はどうするのじゃ?」
「それは、こちらをご覧くださいませ」
{
"version": "0.2.0",
"configurations": [
{
"name": "Python: Current File",
"type": "python",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal"
+ },
+ {
+ "name": "Scrapy: Current Spider",
+ "type": "python",
+ "request": "launch",
+ "program": "crawl.py",
+ "args": [
+ "${fileBasenameNoExtension}"
+ ],
+ "console": "integratedTerminal"
+ }
]
}
「デバッグ構成が1つ増えて…」
「おじゃ!編集中のスパイダーのファイル名をcrawl.py
に引数として渡しておるの。」
「これなら、スパイダーが増えても、名前を変えてもデバッグ構成は1つで済みそうじゃの」
「そうでございます」
「よくお気づきになられました。わたくし感激にございます」
「しかしcrawl.py
とは一体何なのじゃ?」
「それについては、こちらにございます」
from scrapy.cmdline import execute
import sys
args = sys.argv
execute(['scrapy','crawl', args[1]])
「おじゃ、scrapy謹製の実行ツールscrapy.cmdline
じゃの。」
「はい」
「それが鍵にございます」
「さあ、説明も終わったし、やれやれじゃの。」
「そうですね、おじゃ様。本日はおつかれさまでございます。」
「(あれ?これはまずい流れではないでしょうか?)」
「さあ、プリンでおじゃる!プリンじゃプリンじゃー♪」
「(ああ、やはり)」
「なぜ、しょげておるのじゃ?」
「おじゃ様?スクレイピングは?」
「腹が減ってはスクレイピングは出来ぬでおじゃる」
「おぬしにプリンは、やらぬがの」
まとめ
おじゃる。
Excelsior!
「ちなみにScrapyからNocodeへ乗り換えるならOctparseがオススメにございます。」
「そしてScrapyの一般的なデバッグ方法はこちらにございます。」