Scrapy не находит пользовательских функций - PullRequest
2 голосов
/ 21 июня 2019

Я реализовал свою собственную функцию для исключения URL, которые содержат определенные слова. Однако, когда я вызываю его внутри моего метода синтаксического анализа, Scrapy говорит мне, что функция не определена, хотя она и есть. Я не использовал объект правила, поскольку получил URL-адреса, которые я хочу очистить от API. Вот мои настройки:

class IbmSpiderSpider(scrapy.Spider):
       ...

   def checkUrlForWords(text): 
        ...
        return flag

   def parse(self, response):
        data = json.loads(response.body)
        results = data.get('resultset').get('searchresults').get('searchresultlist')
        for result in results:
            url = result.get('url')
            if (checkUrlForWords(url)==True): continue
        yield scrapy.Request(url, self.parse_content, meta={'title': result.get('title')})

Пожалуйста, помогите

Ответы [ 3 ]

1 голос
/ 21 июня 2019

Используйте self.checkUrlForWords, так как это метод внутри класса.Использование равнины checkUrlForWords приведет к ошибкам.Просто добавьте self к атрибутам метода и вызову.

def checkUrlForWords(self, text): 
        ...
        return flag
1 голос
/ 21 июня 2019

Вы также можете определить свою функцию вне вашего класса в том же файле .py:

def checkUrlForWords(text): 
    ...
    return flag

class IbmSpiderSpider(scrapy.Spider):
       ...
   def parse(self, response):
        data = json.loads(response.body)
        results = data.get('resultset').get('searchresults').get('searchresultlist')
        for result in results:
            url = result.get('url')
            if (checkUrlForWords(url)==True): continue
        ....
1 голос
/ 21 июня 2019

Ваша функция определена внутри вашего класса.Используйте:

IbmSpiderSpider.checkUrlForWords(url)

Ваша функция выглядит как статический метод, вы можете использовать соответствующий декоратор для вызова с помощью self.checkUrlForWords:

class IbmSpiderSpider(scrapy.Spider):
       ...

   @staticmethod
   def checkUrlForWords(text): 
        ...
        return flag

   def parse(self, response):
        data = json.loads(response.body)
        results = data.get('resultset').get('searchresults').get('searchresultlist')
        for result in results:
            url = result.get('url')
            if (self.checkUrlForWords(url)==True): continue
        yield scrapy.Request(url, self.parse_content, meta={'title': result.get('title')})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...