У меня есть два паука, которые работают в последовательном порядке в соответствии с https://docs.scrapy.org/en/latest/topics/practices.html#running-multiple-spiders-in-the-same-process. Теперь я хочу передать некоторую информацию от первого паука второму (веб-драйверу селена или информации о его сеансе).
Я довольно новичок в scrapy, но в другом посте было предложено сохранить данные в БД и извлечь их оттуда. Кажется, это слишком много для передачи одной переменной, другого пути нет? (Я знаю, что в этом примере я мог бы просто превратить это в одного длинного паука, но позже я хотел бы запустить первого паука один раз, а второго паука несколько раз.)
class Spider1(scrapy.Spider):
# Open a webdriver and get session_id
class Spider2(scrapy.Spider):
# Get the session_id and run spider2 code
def __init__(self, session_id):
...
configure_logging()
runner = CrawlerRunner()
@defer.inlineCallbacks
def crawl():
yield runner.crawl(Spider1)
# TODO How to get the session_id?
# session_id = yield runner.crawl(Spider1) returns None
# Or adding return statement in Spider 1, actually breaks
# sequential processing and program sleeps before running Spider1
time.sleep(2)
yield runner.crawl(Spider2(session_id))
reactor.stop()
crawl()
reactor.run() # the script will block here until the last crawl call is finished
Я хотел бы передатьпеременная в конструктор второго паука, но я не могу получить данные из первого. Если я просто запустил первый сканер, чтобы вернуть переменную, он, очевидно, нарушает последовательную структуру. Если я попытаюсь получить доход, результат будет Нет.
Я полностью слепой? Я не могу поверить, что это должно быть такой сложной задачей.