Перехват / доступ к доходности внутри вложенных вызовов - PullRequest
0 голосов
/ 12 июля 2019

Представьте, что у вас есть следующие вызовы методов:

parse() -> parseProductPage() -> parseUser()     (indirectly?) -> process_item()
                              -> parseCategory() (indirectly?) -> process_item()
                              -> parseProduct()  (indirectly?) -> process_item()

process_item () принадлежит к некоторому классу конвейера и отвечает за вставку каждого элемента в базу данных и возврат соответствующего идентификатора (динамически генерируется MongoDB, не присутствует перед вставкой). Все остальные методы принадлежат классу паука и дают рекурсивный результат.

Теперь я хочу получить доступ к каждому идентификатору на обратном пути, но проблема в том, что полученное значение доступно только для первоначального вызывающего (parent? Of parse ()).

Поскольку process_item () имеет доступ к вызывающему пауку, один из способов решения этой проблемы - записать каждый из этих идентификаторов в соответствующую переменную-член, но мне кажется, что это плохая архитектура проектирования, в которой многие вещи могут пойти не так. Есть ли альтернативы?

@ Edit Я думаю, я мог бы перенести логику создания отношений в конвейер, но так ли это на самом деле?

1 Ответ

0 голосов
/ 17 июля 2019

Если parseProduct требует ввода от parseUser или наоборот, вы должны сделать своего клиента MongoDB частью своего паука, что требует некоторых знаний Twisted и, возможно, клиента MongoDB на основе Twisted, чтобы не блокировать Scrapy во время запросов MongoDB ,

В качестве альтернативы может быть проще сгенерировать выходной файл с необработанными данными и написать отдельный скрипт, который анализирует этот файл и отправляет данные в MongoDB по желанию.

...