I always get NotImplementedError('{}.parse callback is not defined'.format(self.__class__.__name__))
. however, I tried to follow the example here.
2019-12-27 11:40:40 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://latindancecalendar.com/festivals/> (referer: None)
ERROR:scrapy.core.scraper:Spider error processing <GET https://latindancecalendar.com/festivals/> (referer: None)
Traceback (most recent call last):
File "/Users/Marc/.local/share/virtualenvs/scrapy-Qon0LmmU/lib/python3.7/site-packages/twisted/internet/defer.py", line 654, in _runCallbacks
current.result = callback(current.result, *args, **kw)
File "/Users/Marc/.local/share/virtualenvs/scrapy-Qon0LmmU/lib/python3.7/site-packages/scrapy/spiders/__init__.py", line 80, in parse
raise NotImplementedError('{}.parse callback is not defined'.format(self.__class__.__name__))
NotImplementedError: LatindancecalendarSpider.parse callback is not defined
2019-12-27 11:40:40 [scrapy.core.scraper] ERROR: Spider error processing <GET https://latindancecalendar.com/festivals/> (referer: None)
Traceback (most recent call last):
File "/Users/Marc/.local/share/virtualenvs/scrapy-Qon0LmmU/lib/python3.7/site-packages/twisted/internet/defer.py", line 654, in _runCallbacks
current.result = callback(current.result, *args, **kw)
File "/Users/Marc/.local/share/virtualenvs/scrapy-Qon0LmmU/lib/python3.7/site-packages/scrapy/spiders/__init__.py", line 80, in parse
raise NotImplementedError('{}.parse callback is not defined'.format(self.__class__.__name__))
NotImplementedError: LatindancecalendarSpider.parse callback is not defined
spider.py
class LatindancecalendarSpider(scrapy.Spider):
name = "latindancecalendar"
allowed_domains = ["latindancecalendar.com"]
start_urls = ["https://latindancecalendar.com/festivals/"]
rules = (
Rule(
LinkExtractor(
restrict_xpaths=("//div[@class='eventline event_details']/a")
),
callback="parse_event",
),
)
def xpath_get(self, response, key):
# Get page title: //h1[@class="page-title"]/text()
xpath_ = {
"name": ".//div[@class='eventline event_details']/a/text()",
"event_link": ".//div[@class='eventline event_details']/a/@href",
"date": "//div[@class='vevent']/div/span/b/text()",
"website": "//div[@class='vevent']/div[@class='top_menu_wrapper']/div[@class='top_menu']/a[text()='Website']/@href",
"facebook_event": "//div[@class='vevent']/div[@class='top_menu_wrapper']/div[@class='top_menu']/a[text()='Facebook Event']/@href",
"city_country": "//div[@class='vevent']/div/div[span = 'Location: ']/text()",
}
return response.xpath(xpath_.get(key)).get()
def parse_event(self, response):
event = LatinDanceCalendarItem()
event["name"] = "ABC"
event["date"] = self.xpath_get(response, "date")
event["website"] = self.xpath_get(response, "website")
event["facebook_event"] = self.xpath_get(response, "facebook_event")
yield event # Will go to pipeline