※ Scrapyは既にインストール済みの方向けです
ScrapyのCrawlSpiderでの停止処理
CrawlSpiderでクローラーを作成した際、ウェブサイト全体をスクレイピングしていると時間がかかるため、途中で停止させたい。
標準ではDEPTH_LIMITで一定の階層まで探ると停止する設定がついている。
settings.pyでDEPTH_LIMIT=2
のようにすれば最初のページで1回リンクを辿り、次の階層でもう一回リンクを辿るため、2階層辿るような設定になる。
しかし、サイトの構成やサイトマップを拾ったりフッターメニューが用意されている場合はDEPTH_LIMITを設定したとしても想定より多いページ数を拾ってくることになる可能性がある。
CloseSpiderExtention
そこでウェブサイトの構成に関わらず一定の量を取得できるように、取得するページ数やアイテム数で制御できるようにしたい。
それがClose spider extentionというものを使用すると実現できるらしい。
settings.pyのコメントにされているEXTENSIONSにCloseSpiderを追加する。
CLOSESPIDER_TIMEOUT、CLOSESPIDER_ITEMCOUNT、CLOSESPIDER_PAGECOUNT、CLOSESPIDER_ERRORCOUNTが設定できるようになる。(デフォルト値は全て0)
CONCURRENT_REQUESTの設定でダウンロードの予約が行われている。
値が大きいとその分ダウンロードの予約が行われ、停止後もしばらくダウンロードし続ける。
気になる場合は1に設定しておくとよい。
(本来の役割は設定している数値分、複数のサイトのダウンロードを同時進行させるもの。)
CONCURRENT_REQUEST = 1
EXTENSIONS = {
# 'scrapy.extensions.telnet.TelnetConsole': None,
'scrapy.extensions.closespider.CloseSpider': 1,
}
CLOSESPIDER_TIMEOUT = 0
CLOSESPIDER_ITEMCOUNT = 0
CLOSESPIDER_PAGECOUNT = 0
CLOSESPIDER_ERRORCOUNT = 0
参考
https://doc.scrapy.org/en/latest/topics/extensions.html#module-scrapy.contrib.closespider
https://doc.scrapy.org/en/latest/topics/settings.html
[ 検索キーワード ]
scrapy page count limit
scrapy request count limit