Запуск Splash-сервера и Scrapy-пауков в одном экземпляре Ec2 - PullRequest
0 голосов
/ 26 апреля 2018

Я развертываю веб-приложение для очистки веб-страниц, состоящее из Scrapy пауков, которые счищают контент с веб-сайтов, а также веб-страницы со скриншотами с помощью службы рендеринга JavaScript Splash . Я хочу развернуть все приложение в одном экземпляре Ec2. Но чтобы приложение работало, я должен запустить заставочный сервер из образа докера, в то же время я запускаю своих пауков. Как я могу запустить несколько процессов на экземпляре Ec2? Любые советы по передовому опыту будут наиболее цениться.

1 Ответ

0 голосов
/ 15 июня 2018

Всего вопросов о нубах. Я нашел лучший способ запустить Splash-сервер и пауки Scrapy на экземпляре Ec2 после настройки с помощью сценария bash, запланированного для выполнения cronjob. Вот скрипт bash, который я придумал:

#!bin/bash
# Change to proper directory to run Scrapy spiders.
cd /home/ec2-user/project_spider/project_spider

# Activate my virtual environment.
source /home/ec2-user/venv/python36/bin/activate # activate my virtual environment

# Create a shell variable to store date at runtime 
LOGDATE=$(date +%Y%m%dT%H%M%S);

# Spin up splash instance from docker image.
sudo docker run -d -p 8050:8050 -p 5023:5023 scrapinghub/splash --max-timeout 3600

# Scrape first site and store dated log file in logs directory.
scrapy crawl anhui --logfile /home/ec2-user/project_spider/project_spider/logs/anhui_spider/anhui_spider_$LOGDATE.log

...

# Spin down splash instance via docker image.
sudo docker rm $(sudo docker stop $(sudo docker ps -a -q --filter ancestor=scrapinghub/splash --format="{{.ID}}"))

# Exit virtual environment.
deactivate

# Send an email to confirm cronjob was successful.
#   Note that sending email from Ec2 is difficult and you can not use 'MAILTO' 
#   in your cronjob without setting up something like postfix or sendmail. 
#   Using Mailgun is an easy way around that. 

curl -s --user 'api:<YOURAPIHERE>' \
    https://api.mailgun.net/v3/<YOURDOMAINHERE>/messages \
        -F from='<YOURDOMAINADDRESS>' \
        -F to=<RECIPIENT> \
        -F subject='Cronjob Run Successfully' \
        -F text='Cronjob completed.'
...