Как исправить «Паук должен вернуть Request, BaseItem, dict или None, получил« set »в ...» - PullRequest
0 голосов
/ 16 мая 2019

Я пытаюсь создать веб-скребок, который извлекает несколько таблиц с веб-сайта, но почему-то я не могу их извлечь

Я искал решение, но, похоже, мне ничего не подходит :(

def parse(self, response):
        tables=[]
        for table in response.xpath('//table'):
            yield {
                tables.append(self.retrieve_table(table))
            }

        tables[0] = self.extract_table_info(tables[0] + tables[1])
        tables[2] = self.extract_table_info(tables[2], 1)
        tables[3] = self.extract_table_info(tables[3], 2)
        tables[4] = self.extract_table_info(tables[4], 3)

        company = { 'info': tables[0],
                    'oscilations': tables[2]['oscilations'],
                    'fundamentals': tables[2]['fundamentals'],
                    'patrimonial_balance_data': tables[3],
                    'demonstrative_results_data': tables[4] }

        import json
        with open('data.json', 'w') as f:
            json.dump(company, f, ensure_ascii=False)

Возвращаемая ошибка:

ERROR: Spider must return Request, BaseItem, dict or None, got 'set'

1 Ответ

2 голосов
/ 16 мая 2019

Это из-за этого блока:

for table in response.xpath('//table'):
    yield {
        tables.append(self.retrieve_table(table))
    }

Зачем вам нужно yield здесь? Похоже, что простого добавления будет достаточно для ваших целей:

for table in response.xpath('//table'):
    tables.append(self.retrieve_table(table))

Или даже просто:

tables = response.xpath('//table')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...