Я создал CrawlSpider
, который должен следовать по всем "внутренним" ссылкам до определенного количества элементов / страниц / времени.
Я использую multiprocessing.Pool
для обработки нескольких страниц одновременно (например, 6 рабочих).
Я вызываю CrawlSpider
с командой os.system
из отдельного python сценария:
import os
...
cmd = "scrapy crawl FullPageCrawler -t jsonlines -o "{0}" -a URL={1} -s DOWNLOAD_MAXSIZE=0 -s CLOSESPIDER_TIMEOUT=180 -s CLOSESPIDER_PAGECOUNT=150 -s CLOSESPIDER_ITEMCOUNT=100 -s DEPTH_LIMIT=5 -s DEPTH_PRIORITY=0 --nolog'.format(OUTPUT_FILE, url.strip())"
os.system(cmd)
Это работает довольно хорошо для некоторых из моих страниц, но для определенных c страниц crawler
не соответствует ни одному из моих установленных параметров.
Я попытался определить следующее (с тем, что я думаю, что это делает):
CLOSESPIDER_PAGECOUNT
: сколько страниц он будет следить?
CLOSESPIDER_ITEMCOUNT
: Не уверен насчет этого. В чем разница с PAGECOUNT?
CLOSESPIDER_TIMEOUT
: максимальное время работы сканера.
Сейчас я сталкиваюсь с примером, который уже просканировал более 4000 страниц (или элементов ?!) и работает более 1 часа.
Сталкиваюсь ли я с этим, потому что я все одновременно определил?
Нужно ли мне также определять те же настройки в settings.py
?
Может быть мне достаточно одного из них? (например, максимальное время безотказной работы = 10 минут)
Я пытался использовать subprocess.Popen
вместо os.system
, потому что он имеет функцию wait
, но это не сработало, как ожидалось.
В конце концов использование os.system
- самая стабильная вещь, которую я пробовал, и я хочу придерживаться этого. Единственная проблема - scrapy
Я пытался найти ответ на SO, но не смог найти никакой помощи!
РЕДАКТИРОВАТЬ: приведенный выше пример заканчивался 16.009 удаленными подстраницами и более 333 МБ.