Запуск нескольких пауков в scrapy
в scrapy, например, если у меня было два URL, которые содержат разные HTML. Теперь я хочу написать два отдельных паука каждый для одного и хочу запустить обоих пауков сразу. В scrapy можно запускать сразу несколько пауков.
в scrapy после написания нескольких пауков, как мы можем запланировать их запуск каждые 6 часов (может быть, как задания cron)
у меня нет идеи выше , что как выполнять выше вещей с примером.
спасибо заранее.
4 ответов
вероятно, было бы проще всего запустить два скрипта сразу с уровня ОС. Они оба должны иметь возможность сохранять данные в одной базе данных. Создать shell-скрипт для вызова скриптов 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 или каждые шесть часов.
вы должны использовать scrapyd для обработки нескольких гусеничных машин http://doc.scrapy.org/en/latest/topics/scrapyd.html
вы можете попробовать использовать 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. Сохраните этот код в том же каталоге с помощью 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.