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

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

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