Scrapy показывает notImplementedError и я не знаю почему - PullRequest
0 голосов
/ 04 сентября 2018

Мой код Scrapy не работает, и я не уверен, почему. «Мой паук» - это тест на создание субреддита «Игра трона» в Reddit.

Вот мой код:

import scrapy


class Redditbot2Spider(scrapy.Spider):
    name = 'redditbot2'
    allowed_domains = ['www.reddit.com']
    start_urls = ['https://www.reddit.com/r/gameofthrones/']


def parse(self, response):
    titles = response.selector.xpath('//h2/text()').extract()
    votes = response.selector.xpath('//div[@class="_1rZYMD_4xY3gRcSS3p80D0"]/test()').extract()
    time = response.selector.xpath('//a[@class="_3jOxDPIQ0KaOWpzvSQo-1s"]/text()').extract()
    comments = response.selector.xpath('//span[@class="FHCV02u6Cp2zYL0fhQPsO"])/text()').extract()

    for item in zip(titles, votes, time, comments):
        scraped_info = {
            'title': titles[0],
            'vote': votes[1],
            'time': time[2],
            'comments': comments[3],
        }
        yield scraped_info

А вот журнал ошибок:

Traceback (most recent call last):
  File "/Library/Python/2.7/site-packages/twisted/internet/defer.py", line 654, in _runCallbacks
    current.result = callback(current.result, *args, **kw)
  File "/Library/Python/2.7/site-packages/scrapy/spiders/__init__.py", line 90, in parse
    raise NotImplementedError('{}.parse callback is not defined'.format(self.__class__.__name__))
NotImplementedError: Redditbot2Spider.parse callback is not defined

Существует метод Redditbot2Spider.parse, поэтому я не понимаю, почему он так говорит. Есть идеи?

1 Ответ

0 голосов
/ 04 сентября 2018

Ваш код имеет проблему с отступом, метод parse находится на том же уровне, что и класс, поэтому интерпретатор не понимает, что он является членом класса. Вы должны сделать отступ в методе parse:

class Redditbot2Spider(scrapy.Spider): 
    name = 'redditbot2'
    allowed_domains = ['www.reddit.com']
    start_urls = ['https://www.reddit.com/r/gameofthrones/']
    def parse(self, response): 
        titles = response.selector.xpath('//h2/text()').extract()
        #etc.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...