Я использую 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
, безопасно ли запускать всех пауков одновременно? Не повреждено ли постоянное состояние паука?
Любые идеи были бы оценены.