как сделать один доход в функции множественного дохода - PullRequest
0 голосов
/ 15 июня 2019

У меня в коде-пауке следующий код, у метода разбора есть два выхода, по-видимому, оба происходят, как я могу сделать так, чтобы, если scrapy.Request... случается, это тоже не yield item

for company in self.companies:
    for i in range(1, 3):
        if item[f"Merchant_{i}"] == company:

            yield scrapy.Request(url=item[f"Merchant_{i}_link"],callback=getattr(self, f"parse_{company.lower()}"),meta={'item': item})

yield item

Ответы [ 2 ]

0 голосов
/ 15 июня 2019

Это должно работать, установите companyFound на уровне класса, а не внутри parse

class MySpider():

    companyFound = False

    def parse(self, response):
        for company in self.companies:
            for i in range(1, 3):
                if item[f"Merchant_{i}"] == company:
                    self.companyFound = True
                    yield scrapy.Request(item[f"Merchant_{i}_link"], getattr(self, f"parse_{company.lower()}"), meta={'item': item})

        if not self.companyFound:
            yield item
0 голосов
/ 15 июня 2019

Сделайте дополнительный флаг, например:

made_request = False
for company in self.companies:
    for i in range(1, 3):
        if item[f"Merchant_{i}"] == company:
            made_request = True
            yield scrapy.Request(item[f"Merchant_{i}_link"], getattr(self, f"parse_{company.lower()}"), meta={'item': item})

if not made_request:
    yield item

Итак, ваш предмет будет сдан только в том случае, если в цикле не было выполнено ни одного запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...