Моя проблема заключается в следующем:
Чтобы выиграть время, я бы хотел запустить несколько версий одного одиночного паука.Процесс (разбор определений) одинаков, элементы одинаковы, а коллекция в базе данных одинакова.Что меняется, так это переменная start_url.Это выглядит так:
"https://www.website.com/details/{0}-{1}-{2}/{3}/meeting".format(year,month,day,type_of_meeting)
Учитывая, что дата совпадает, например, 2018-10-24, я хотел бы запустить две версии одновременно:
- версия 1
type_of_meeting = pmu
- версия 2 с
type_of_meeting = pmh
Это первая часть моей проблемы.И здесь я задаюсь вопросом, должен ли я создать два разных класса в одном пауке, как class SpiderPmu(scrapy.Spider):
и class SpiderPmh(scrapy.Spider):
в spider.py
.Но если это лучший способ, который, как вы думаете, я должен сделать, я не знаю, как это реализовать, учитывая settings.py, pipelines.py.Я уже читал о CrawlerProcess
из scrapy.crawler
модуля, но я не очень хорошо понимаю, как реализовать это в моем проекте. тема стека , документ Scrapy .Я не уверен, что часть process = CrawlerProcess()
process.crawl(MySpider1)
process.crawl(MySpider2)
process.start()
должна быть в файле spider.py.Прежде всего, я не уверен, что это отвечает на мои проблемы.
Вторая часть, это как запустить несколько версий с учетом разных интервалов дат.
Я уже создал некоторый диапазон интервалов в моем паукекласс как:
year = range(2005,2019)
month = range(1,13)
day = range(1,32)
и поместите его в цикл.Это хорошо работает.
Но чтобы выиграть время, я хотел бы запустить несколько пауков с разными интервалами лет.
- 1-я версия с
year = range(2005,2007)
- 2-я версия с
year = range(2007,2009)
- и т. Д., Пока
year = range(2017,2019)
Семь версий одновременно означают семь раз быстрее.
Я мог бы создать 7разные проекты для каждого диапазона лет, но я думаю, что это не самый умный способ ... и я не уверен, создаст ли он конфликт из-за использования одной и той же базы сбора данных для 7 разных проектов, работающих в одно и то же время.
Я собираюсь сделать что-то вроде открытия 7 команд:
scrapy crawl spiderpmu
для версии type_of_race = pmu
"Enter a range of year":
с raw_input = 2010, 2012
==> range(2010,2012)
- Паук ползет
параллельно, если это обязательно, сделать:
scrapy crawl spiderpmh
для версии type_of_race = pmh
"Enter a range of year":
с raw_input = 2010, 2012
==> range(2010,2012)
- Паук ползет
Возможно использование один-единственный spider, или один единственный проект, если необходимо.
Как я могу это сделать?
PS: я уже договорился с prolipo в качестве прокси, сетью Tor для изменения IP иUSER_AGENT
всегда меняется.Таким образом, я избегаю быть забаненным, сканируя несколько пауков одновременно.И мой паук "вежливый" с AUTOTHROTTLE_ENABLED = True
.Я хочу держать это вежливо, но быстрее.
Версия Scrapy: 1.5.0, версия Python: 2.7.9, версия Mongodb: 3.6.4, версия Pymongo: 3.6.1