Python, Scrapy и переменная область видимости - PullRequest
0 голосов
/ 12 июня 2018

Во-первых, я думал, что переменные класса были доступны для всех объектов в классе.Во-вторых, я думал, что переменная, определенная на том же уровне (отступ блока), что и функция def, находится в пределах объема функций, определенных там и во внутренних блоках.Для меня не имеет смысла, что скрапирование изменит это правило.Я просмотрел это перед публикацией, и я не вижу никакой разницы между тем, что я сделал, и тем, что здесь объясняется: https://www.programiz.com/python-programming/global-keyword. Примечание. Я не получаю UnboundLocalError, если это имеет значение.Я был бы очень признателен за объяснение того, что здесь происходит и как это исправить.

объявление класса / паука

    ...
start_urls = [example.com]

def parse(self, response):
    for url in start_urls:
        yield scrapy.Request(url, callback=self.parse_item)

File "/home/malikarumi/Projects/aishah/acquire/
acquire/spiders/local_etl_01.py", line 18, in parse
    for url in start_urls:
        NameError: name 'start_urls' is not defined

объявление класса / паука

    ...
start_urls = [example.com]

def parse(self, response):
    global start_urls
    for url in start_urls:
        yield scrapy.Request(url, callback=self.parse_item)

`File 
"/home/malikarumi/Projects/aishah/acquire/
acquire/spiders/local_etl_01.py", line 18, in parse
    for url in start_urls:
        NameError: name 'start_urls' is not defined`

1 Ответ

0 голосов
/ 13 июня 2018

Это проблема с ООП (ориентированным объектным программированием).Вы должны поставить self.start_urls для указания, что start_urls является классом vairable.

start_urls = [example.com]

def parse(self, response):
    for url in self.start_urls:
        yield scrapy.Request(url, callback=self.parse_item)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...