Запуск нескольких пауков в скрапе
Например, в scrapy, если бы у меня было два URL, которые содержат разные HTML. Теперь я хочу написать двух отдельных пауков каждый за одного и хочу запустить обоих пауков одновременно. В скрапе возможно запустить несколько пауков одновременно.
В scrapy после написания нескольких пауков, как мы можем запланировать их запуск на каждые 6 часов (может быть как работа cron)
Я понятия не имел выше, можете ли вы предложить мне, как выполнить вышеизложенное на примере.
Заранее спасибо.
4 ответа
Вероятно, было бы проще всего запустить сразу два сценария scrapy на уровне операционной системы. Они оба должны быть в состоянии сохранить в одной базе данных. Создайте сценарий оболочки, который будет вызывать оба сценария scrapy одновременно.
scrapy runspider foo &
scrapy runspider bar
Обязательно сделайте этот скрипт исполняемым с chmod +x script_name
Чтобы запланировать cronjob каждые 6 часов, введите crontab -e
в свой терминал и отредактируйте файл следующим образом:
* */6 * * * path/to/shell/script_name >> path/to/file.log
Первый * - минуты, затем часы и т. Д., А звездочка - подстановочный знак. Это говорит о том, что запускайте скрипт в любое время, когда часы делятся на 6 или каждые шесть часов.
Вы можете попробовать использовать CrawlerProcess
from scrapy.utils.project import get_project_settings
from scrapy.crawler import CrawlerProcess
from myproject.spiders import spider1, spider2
1Spider = spider1.1Spider()
2Spider = spider2.2Spider()
process = CrawlerProcess(get_project_settings())
process.crawl(1Spider)
process.crawl(2Spider)
process.start()
Если вы хотите увидеть полный журнал сканирования, установите LOG_FILE
в вашем settings.py
,
LOG_FILE = "logs/mylog.log"
Вот код, позволяющий запускать нескольких пауков в скрапе. Сохраните этот код в том же каталоге с scrapy.cfg (моя версия scrapy 1.3.3, и она работает):
from scrapy.utils.project import get_project_settings
from scrapy.crawler import CrawlerProcess
setting = get_project_settings()
process = CrawlerProcess(setting)
for spider_name in process.spiders.list():
print ("Running spider %s" % (spider_name))
process.crawl(spider_name,query="dvh") #query dvh is custom argument used in your scrapy
process.start()
а затем вы можете запланировать запуск этой программы на Python с помощью cronjob.
Вы должны использовать scrapyd для обработки нескольких гусеничных http://doc.scrapy.org/en/latest/topics/scrapyd.html