Поскольку у вас есть запросы типа A и B на 1 элемент, у вас есть два цепных запроса, чтобы действовать по порядку: сначала сканирование A, а затем сканирование B N раз:
customer -> N order pages -> 1 item
Итак, ваша логика сканирования:
- Получить данные о клиентах
- Получить идентификаторы заказов
2.1 Идентификатор всплывающего заказа
2.2 Идентификатор заказа при сканировании
2.3 Прикрепить детали заказа к # 1 данным клиента - вернуть данные клиента с данными заказа
В скрапе это будет выглядеть примерно так:
def parse_customer(self, response):
# find root customer data
customer = {}
# find order ids
orders = [1,2,3]
# schedule first order request and start order scraping loop
first_order = order_url + orders.pop(0)
yield Request(
first_order,
self.parse_orders,
meta={'orders': orders, 'item': customer},
)
def parse_orders(self, response):
item = response.meta['item']
remaining_orders = response.meta['orders']
# first loop it's [1, 2] but finally it'll be []
if not remaining_orders: # all orders are scraped -> save item
yield item
return
# attach found order details to root customer item we have
found_orders = ...
item['orders'].expand(found_orders)
# scrape next order
next_order = order_url + orders.pop(0),
yield Request(
next_order,
self.parse_orders,
meta={'orders': orders, 'item': item},
)