Запуск нескольких пауков в скрапе

  1. Например, в scrapy, если бы у меня было два URL, которые содержат разные HTML. Теперь я хочу написать двух отдельных пауков каждый за одного и хочу запустить обоих пауков одновременно. В скрапе возможно запустить несколько пауков одновременно.

  2. В 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

Другие вопросы по тегам