Я использую Scrapy, это здорово! так быстро, чтобы построить искатель. с увеличением количества веб-сайтов необходимо создать новых пауков, но эти веб-ситты одного типа,
все эти пауки используют одни и те же элементы, конвейеры, процесс разбора
содержимое каталога проекта:
test/
├── scrapy.cfg
└── test
├── __init__.py
├── items.py
├── mybasespider.py
├── pipelines.py
├── settings.py
├── spider1_settings.py
├── spider2_settings.py
└── spiders
├── __init__.py
├── spider1.py
└── spider2.py
Чтобы уменьшить избыточность исходного кода, mybasespider.py имеет базовый паук MyBaseSpider, в нем есть исходный код 95%, все остальные пауки унаследованы от него, если у паука есть некоторые особые вещи, переопределить некоторые
class methods, обычно нужно добавить несколько строк исходного кода, чтобы создать новый паук
Поместите все общие настройки в settings.py, специальные настройки для паука находятся в [spider name]_settings.py, например:
специальные настройки spider1 в spider1_settings.py:
from settings import *
LOG_FILE = 'spider1.log'
LOG_LEVEL = 'INFO'
JOBDIR = 'spider1-job'
START_URLS = [
'http://test1.com/',
]
специальные настройки spider2 в spider2_settings.py:
from settings import *
LOG_FILE = 'spider2.log'
LOG_LEVEL = 'DEBUG'
JOBDIR = 'spider2-job'
START_URLS = [
'http://test2.com/',
]
Scrapy использует LOG_FILE, LOG_LEVEL, JOBDIR перед запуском паука;
Все URL-адреса в START_URLS заполняются в MyBaseSpider.start_urls, у другого паука разное содержимое, но имя START_URLS, используемое в базовом пауке MyBaseSpider, не изменяется.
содержимое scrapy.cfg:
[settings]
default = test.settings
spider1 = spider1.settings
spider2 = spider2.settings
[deploy]
url = http://localhost:6800/
project = test
Чтобы запустить паук, например spider1:
-
export SCRAPY_PROJECT=spider1 -
scrapy crawl spider1
Но этот способ нельзя использовать для запуска пауков в scrapyd. Команда scrapyd-deploy всегда использует название проекта 'default' в разделе scrapy.cfg 'settings' для создания egg file и развертывает его в scrapyd
У вас есть несколько вопросов:
-
Является ли это способом использования нескольких пауков в одном проекте, если я не создаю проект на одного паука? Есть ли лучшие способы?
-
Как отделить специальные настройки паука, как указано выше, которые могут выполняться в
scrapydи уменьшить избыточность исходного кода -
Если все пауки используют один и тот же
JOBDIR, безопасно ли запускать всех пауков одновременно? Не повреждено ли постоянное состояние паука?
Любые идеи были бы оценены.