2026-01-26 15:26:30 [scrapy.utils.log] INFO: Scrapy 2.14.1 started (bot: grabbers) 2026-01-26 15:26:30 [scrapy.utils.log] INFO: Versions: {'lxml': '6.0.2', 'libxml2': '2.14.6', 'cssselect': '1.3.0', 'parsel': '1.10.0', 'w3lib': '2.3.1', 'Twisted': '25.5.0', 'Python': '3.14.2 (main, Dec 6 2025, 14:00:34) [GCC 11.4.0]', 'pyOpenSSL': '25.3.0 (OpenSSL 3.5.4 30 Sep 2025)', 'cryptography': '46.0.3', 'Platform': 'Linux-6.12.63-84.121.amzn2023.x86_64-x86_64-with-glibc2.35'} 2026-01-26 15:26:30 [scrapy.addons] INFO: Enabled addons: [] 2026-01-26 15:26:30 [py.warnings] WARNING: /layers/paketo-buildpacks_pip-install/packages/lib/python3.14/site-packages/scrapy/extensions/feedexport.py:436: ScrapyDeprecationWarning: The `FEED_URI` and `FEED_FORMAT` settings have been deprecated in favor of the `FEEDS` setting. Please see the `FEEDS` setting docs for more details exporter = cls(crawler) 2026-01-26 15:26:30 [scrapy.middleware] INFO: Enabled extensions: ['scrapy.extensions.corestats.CoreStats', 'scrapy.extensions.logcount.LogCount', 'scrapy.extensions.memusage.MemoryUsage', 'scrapy.extensions.logstats.LogStats', 'grabbers.extensions.custom_fields.ExportCustomFieldsExtension', 'grabbers.extensions.kol_roles.ExportKolRolesExtension', 'grabbers.extensions.exporters.DefaultScrapedItemsExporter'] 2026-01-26 15:26:30 [scrapy.crawler] INFO: Overridden settings: {'BOT_NAME': 'grabbers', 'FEED_EXPORT_FIELDS': ['External Id', 'Parent External Id', 'Name', 'Plain text: Parent Name', 'Start date', 'Start time', 'End date', 'End time', 'Location', 'Plain text: Event Link', 'Plain text: Event Link (Excel)', 'Plain text: Description', 'Plain text: Speaker(s)', 'Plain text: Moderator(s)', 'Filter: Session Type'], 'FEED_FORMAT': 'xlsx', 'LOG_FILE': '/etc/scrapyd/dbs/logs/grabbers/ESGO ' '(events)/608092bafacb11f098a5a2e903adaf8f.log', 'LOG_LEVEL': 'INFO', 'NEWSPIDER_MODULE': 'grabbers.spiders', 'SPIDER_MODULES': ['grabbers.spiders'], 'TELNETCONSOLE_ENABLED': False, 'USER_AGENT': 'Mozilla/5.0 (X11; Linux x86_64; rv:131.0) Gecko/20100101 ' 'Firefox/131.0'} 2026-01-26 15:26:31 [scrapy_fake_useragent.middleware] INFO: Using '' as the User-Agent provider 2026-01-26 15:26:31 [scrapy_fake_useragent.middleware] INFO: Using '' as the User-Agent provider 2026-01-26 15:26:31 [scrapy.middleware] INFO: Enabled downloader middlewares: ['scrapy.downloadermiddlewares.offsite.OffsiteMiddleware', 'scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware', 'scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware', 'scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware', 'scrapy_fake_useragent.middleware.RandomUserAgentMiddleware', 'scrapy_fake_useragent.middleware.RetryUserAgentMiddleware', 'scrapy.downloadermiddlewares.redirect.MetaRefreshMiddleware', 'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware', 'scrapy.downloadermiddlewares.redirect.RedirectMiddleware', 'scrapy.downloadermiddlewares.cookies.CookiesMiddleware', 'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware', 'scrapy.downloadermiddlewares.stats.DownloaderStats'] 2026-01-26 15:26:31 [py.warnings] WARNING: /layers/paketo-buildpacks_pip-install/packages/lib/python3.14/site-packages/scrapy/core/downloader/middleware.py:44: ScrapyDeprecationWarning: RandomUserAgentMiddleware.process_request() requires a spider argument, this is deprecated and the argument will not be passed in future Scrapy versions. If you need to access the spider instance you can save the crawler instance passed to from_crawler() and use its spider attribute. self._check_mw_method_spider_arg(mw.process_request) 2026-01-26 15:26:31 [py.warnings] WARNING: /layers/paketo-buildpacks_pip-install/packages/lib/python3.14/site-packages/scrapy/core/downloader/middleware.py:47: ScrapyDeprecationWarning: RetryUserAgentMiddleware.process_response() requires a spider argument, this is deprecated and the argument will not be passed in future Scrapy versions. If you need to access the spider instance you can save the crawler instance passed to from_crawler() and use its spider attribute. self._check_mw_method_spider_arg(mw.process_response) 2026-01-26 15:26:31 [py.warnings] WARNING: /layers/paketo-buildpacks_pip-install/packages/lib/python3.14/site-packages/scrapy/core/downloader/middleware.py:50: ScrapyDeprecationWarning: RetryUserAgentMiddleware.process_exception() requires a spider argument, this is deprecated and the argument will not be passed in future Scrapy versions. If you need to access the spider instance you can save the crawler instance passed to from_crawler() and use its spider attribute. self._check_mw_method_spider_arg(mw.process_exception) 2026-01-26 15:26:31 [scrapy.middleware] INFO: Enabled spider middlewares: ['scrapy.spidermiddlewares.start.StartSpiderMiddleware', 'scrapy.spidermiddlewares.httperror.HttpErrorMiddleware', 'scrapy.spidermiddlewares.referer.RefererMiddleware', 'scrapy.spidermiddlewares.urllength.UrlLengthMiddleware', 'scrapy.spidermiddlewares.depth.DepthMiddleware'] 2026-01-26 15:26:32 [scrapy.middleware] INFO: Enabled item pipelines: ['grabbers.pipelines.CleanTextPipeline', 'grabbers.pipelines.DateTimeFormatPipeline', 'grabbers.pipelines.BoolFormatPipeline', 'grabbers.pipelines.ValidateEventNamePipeline', 'grabbers.pipelines.CountryCodePipeline', 'grabbers.pipelines.HyperlinkedEventLinkPipeline', 'grabbers.pipelines.ElasticSearchPipeline'] 2026-01-26 15:26:32 [py.warnings] WARNING: /layers/paketo-buildpacks_pip-install/packages/lib/python3.14/site-packages/scrapy/pipelines/__init__.py:47: ScrapyDeprecationWarning: CleanTextPipeline.process_item() requires a spider argument, this is deprecated and the argument will not be passed in future Scrapy versions. If you need to access the spider instance you can save the crawler instance passed to from_crawler() and use its spider attribute. self._check_mw_method_spider_arg(pipe.process_item) 2026-01-26 15:26:32 [py.warnings] WARNING: /layers/paketo-buildpacks_pip-install/packages/lib/python3.14/site-packages/scrapy/pipelines/__init__.py:47: ScrapyDeprecationWarning: DateTimeFormatPipeline.process_item() requires a spider argument, this is deprecated and the argument will not be passed in future Scrapy versions. If you need to access the spider instance you can save the crawler instance passed to from_crawler() and use its spider attribute. self._check_mw_method_spider_arg(pipe.process_item) 2026-01-26 15:26:32 [py.warnings] WARNING: /layers/paketo-buildpacks_pip-install/packages/lib/python3.14/site-packages/scrapy/pipelines/__init__.py:47: ScrapyDeprecationWarning: BoolFormatPipeline.process_item() requires a spider argument, this is deprecated and the argument will not be passed in future Scrapy versions. If you need to access the spider instance you can save the crawler instance passed to from_crawler() and use its spider attribute. self._check_mw_method_spider_arg(pipe.process_item) 2026-01-26 15:26:32 [py.warnings] WARNING: /layers/paketo-buildpacks_pip-install/packages/lib/python3.14/site-packages/scrapy/pipelines/__init__.py:47: ScrapyDeprecationWarning: ValidateEventNamePipeline.process_item() requires a spider argument, this is deprecated and the argument will not be passed in future Scrapy versions. If you need to access the spider instance you can save the crawler instance passed to from_crawler() and use its spider attribute. self._check_mw_method_spider_arg(pipe.process_item) 2026-01-26 15:26:32 [py.warnings] WARNING: /layers/paketo-buildpacks_pip-install/packages/lib/python3.14/site-packages/scrapy/pipelines/__init__.py:47: ScrapyDeprecationWarning: CountryCodePipeline.process_item() requires a spider argument, this is deprecated and the argument will not be passed in future Scrapy versions. If you need to access the spider instance you can save the crawler instance passed to from_crawler() and use its spider attribute. self._check_mw_method_spider_arg(pipe.process_item) 2026-01-26 15:26:32 [py.warnings] WARNING: /layers/paketo-buildpacks_pip-install/packages/lib/python3.14/site-packages/scrapy/pipelines/__init__.py:47: ScrapyDeprecationWarning: HyperlinkedEventLinkPipeline.process_item() requires a spider argument, this is deprecated and the argument will not be passed in future Scrapy versions. If you need to access the spider instance you can save the crawler instance passed to from_crawler() and use its spider attribute. self._check_mw_method_spider_arg(pipe.process_item) 2026-01-26 15:26:32 [py.warnings] WARNING: /layers/paketo-buildpacks_pip-install/packages/lib/python3.14/site-packages/scrapy/pipelines/__init__.py:41: ScrapyDeprecationWarning: ElasticSearchPipeline.open_spider() requires a spider argument, this is deprecated and the argument will not be passed in future Scrapy versions. If you need to access the spider instance you can save the crawler instance passed to from_crawler() and use its spider attribute. self._check_mw_method_spider_arg(pipe.open_spider) 2026-01-26 15:26:32 [py.warnings] WARNING: /layers/paketo-buildpacks_pip-install/packages/lib/python3.14/site-packages/scrapy/pipelines/__init__.py:47: ScrapyDeprecationWarning: ElasticSearchPipeline.process_item() requires a spider argument, this is deprecated and the argument will not be passed in future Scrapy versions. If you need to access the spider instance you can save the crawler instance passed to from_crawler() and use its spider attribute. self._check_mw_method_spider_arg(pipe.process_item) 2026-01-26 15:26:32 [scrapy.core.engine] INFO: Spider opened 2026-01-26 15:26:32 [ESGO (events)] ERROR: ElasticSearch client initialization failed. Make sure ElasticSearch is running and connection settings are correct. 2026-01-26 15:26:32 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min) 2026-01-26 15:27:32 [scrapy.extensions.logstats] INFO: Crawled 96 pages (at 96 pages/min), scraped 733 items (at 733 items/min) 2026-01-26 15:28:32 [scrapy.extensions.logstats] INFO: Crawled 96 pages (at 0 pages/min), scraped 733 items (at 0 items/min) 2026-01-26 15:29:32 [scrapy.extensions.logstats] INFO: Crawled 96 pages (at 0 pages/min), scraped 733 items (at 0 items/min) 2026-01-26 15:29:49 [scrapy.core.scraper] ERROR: Error downloading Traceback (most recent call last): File "/layers/paketo-buildpacks_pip-install/packages/lib/python3.14/site-packages/scrapy/core/downloader/middleware.py", line 153, in download_async result: Response | Request = await process_request(request) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/layers/paketo-buildpacks_pip-install/packages/lib/python3.14/site-packages/scrapy/core/downloader/middleware.py", line 97, in process_request return await download_func(request) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/layers/paketo-buildpacks_pip-install/packages/lib/python3.14/site-packages/scrapy/core/downloader/__init__.py", line 202, in _enqueue_request return await maybe_deferred_to_future(d) # fired in _wait_for_download() ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/layers/paketo-buildpacks_pip-install/packages/lib/python3.14/site-packages/scrapy/core/downloader/__init__.py", line 269, in _wait_for_download response = await self._download(slot, request) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/layers/paketo-buildpacks_pip-install/packages/lib/python3.14/site-packages/scrapy/core/downloader/__init__.py", line 239, in _download response: Response = await self.handlers.download_request_async(request) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/layers/paketo-buildpacks_pip-install/packages/lib/python3.14/site-packages/scrapy/core/downloader/handlers/__init__.py", line 156, in download_request_async return await handler.download_request(request) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/layers/paketo-buildpacks_pip-install/packages/lib/python3.14/site-packages/scrapy/core/downloader/handlers/http11.py", line 113, in download_request return await maybe_deferred_to_future(agent.download_request(request)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/layers/paketo-buildpacks_pip-install/packages/lib/python3.14/site-packages/twisted/internet/defer.py", line 1092, in _runCallbacks current.result = callback( # type: ignore[misc] ~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^ current.result, *args, **kwargs ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File "/layers/paketo-buildpacks_pip-install/packages/lib/python3.14/site-packages/scrapy/core/downloader/handlers/http11.py", line 465, in _cb_timeout raise TxTimeoutError(f"Getting {url} took longer than {timeout} seconds.") twisted.internet.error.TimeoutError: User timeout caused connection failure: Getting https://emma.events/site/api/programme/json_call.asp?a=esgo2026&dataType=speakers_detail&sessionid=5241559 took longer than 180.0 seconds.. During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/layers/paketo-buildpacks_pip-install/packages/lib/python3.14/site-packages/twisted/internet/defer.py", line 1853, in _inlineCallbacks result = context.run( cast(Failure, result).throwExceptionIntoGenerator, gen ) File "/layers/paketo-buildpacks_pip-install/packages/lib/python3.14/site-packages/twisted/python/failure.py", line 467, in throwExceptionIntoGenerator return g.throw(self.value.with_traceback(self.tb)) ~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/layers/paketo-buildpacks_pip-install/packages/lib/python3.14/site-packages/scrapy/core/engine.py", line 490, in _download result = yield self.downloader.fetch(request) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/layers/paketo-buildpacks_pip-install/packages/lib/python3.14/site-packages/twisted/internet/defer.py", line 1853, in _inlineCallbacks result = context.run( cast(Failure, result).throwExceptionIntoGenerator, gen ) File "/layers/paketo-buildpacks_pip-install/packages/lib/python3.14/site-packages/twisted/python/failure.py", line 467, in throwExceptionIntoGenerator return g.throw(self.value.with_traceback(self.tb)) ~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/layers/paketo-buildpacks_pip-install/packages/lib/python3.14/site-packages/scrapy/core/downloader/__init__.py", line 144, in fetch yield deferred_from_coro( self.middleware.download_async(self._enqueue_request, request) ) File "/layers/paketo-buildpacks_pip-install/packages/lib/python3.14/site-packages/twisted/internet/defer.py", line 1257, in adapt extracted: _SelfResultT | Failure = result.result() ~~~~~~~~~~~~~^^ File "/layers/paketo-buildpacks_pip-install/packages/lib/python3.14/site-packages/scrapy/core/downloader/middleware.py", line 158, in download_async result = await process_exception(ex) ^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/layers/paketo-buildpacks_pip-install/packages/lib/python3.14/site-packages/scrapy/core/downloader/middleware.py", line 131, in process_exception method( ~~~~~~^ request=request, exception=exception, spider=self._spider ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ), ^ File "/layers/paketo-buildpacks_pip-install/packages/lib/python3.14/site-packages/scrapy_fake_useragent/middleware.py", line 95, in process_exception if isinstance(exception, self.EXCEPTIONS_TO_RETRY) \ ^^^^^^^^^^^^^^^^^^^^^^^^ AttributeError: 'RetryUserAgentMiddleware' object has no attribute 'EXCEPTIONS_TO_RETRY' 2026-01-26 15:29:49 [scrapy.core.scraper] ERROR: Error downloading Traceback (most recent call last): File "/layers/paketo-buildpacks_pip-install/packages/lib/python3.14/site-packages/scrapy/core/downloader/middleware.py", line 153, in download_async result: Response | Request = await process_request(request) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/layers/paketo-buildpacks_pip-install/packages/lib/python3.14/site-packages/scrapy/core/downloader/middleware.py", line 97, in process_request return await download_func(request) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/layers/paketo-buildpacks_pip-install/packages/lib/python3.14/site-packages/scrapy/core/downloader/__init__.py", line 202, in _enqueue_request return await maybe_deferred_to_future(d) # fired in _wait_for_download() ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/layers/paketo-buildpacks_pip-install/packages/lib/python3.14/site-packages/scrapy/core/downloader/__init__.py", line 269, in _wait_for_download response = await self._download(slot, request) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/layers/paketo-buildpacks_pip-install/packages/lib/python3.14/site-packages/scrapy/core/downloader/__init__.py", line 239, in _download response: Response = await self.handlers.download_request_async(request) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/layers/paketo-buildpacks_pip-install/packages/lib/python3.14/site-packages/scrapy/core/downloader/handlers/__init__.py", line 156, in download_request_async return await handler.download_request(request) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/layers/paketo-buildpacks_pip-install/packages/lib/python3.14/site-packages/scrapy/core/downloader/handlers/http11.py", line 113, in download_request return await maybe_deferred_to_future(agent.download_request(request)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/layers/paketo-buildpacks_pip-install/packages/lib/python3.14/site-packages/twisted/internet/defer.py", line 1092, in _runCallbacks current.result = callback( # type: ignore[misc] ~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^ current.result, *args, **kwargs ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File "/layers/paketo-buildpacks_pip-install/packages/lib/python3.14/site-packages/scrapy/core/downloader/handlers/http11.py", line 465, in _cb_timeout raise TxTimeoutError(f"Getting {url} took longer than {timeout} seconds.") twisted.internet.error.TimeoutError: User timeout caused connection failure: Getting https://emma.events/site/api/programme/json_call.asp?a=esgo2026&dataType=speakers_detail&sessionid=5241558 took longer than 180.0 seconds.. During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/layers/paketo-buildpacks_pip-install/packages/lib/python3.14/site-packages/twisted/internet/defer.py", line 1853, in _inlineCallbacks result = context.run( cast(Failure, result).throwExceptionIntoGenerator, gen ) File "/layers/paketo-buildpacks_pip-install/packages/lib/python3.14/site-packages/twisted/python/failure.py", line 467, in throwExceptionIntoGenerator return g.throw(self.value.with_traceback(self.tb)) ~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/layers/paketo-buildpacks_pip-install/packages/lib/python3.14/site-packages/scrapy/core/engine.py", line 490, in _download result = yield self.downloader.fetch(request) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/layers/paketo-buildpacks_pip-install/packages/lib/python3.14/site-packages/twisted/internet/defer.py", line 1853, in _inlineCallbacks result = context.run( cast(Failure, result).throwExceptionIntoGenerator, gen ) File "/layers/paketo-buildpacks_pip-install/packages/lib/python3.14/site-packages/twisted/python/failure.py", line 467, in throwExceptionIntoGenerator return g.throw(self.value.with_traceback(self.tb)) ~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/layers/paketo-buildpacks_pip-install/packages/lib/python3.14/site-packages/scrapy/core/downloader/__init__.py", line 144, in fetch yield deferred_from_coro( self.middleware.download_async(self._enqueue_request, request) ) File "/layers/paketo-buildpacks_pip-install/packages/lib/python3.14/site-packages/twisted/internet/defer.py", line 1257, in adapt extracted: _SelfResultT | Failure = result.result() ~~~~~~~~~~~~~^^ File "/layers/paketo-buildpacks_pip-install/packages/lib/python3.14/site-packages/scrapy/core/downloader/middleware.py", line 158, in download_async result = await process_exception(ex) ^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/layers/paketo-buildpacks_pip-install/packages/lib/python3.14/site-packages/scrapy/core/downloader/middleware.py", line 131, in process_exception method( ~~~~~~^ request=request, exception=exception, spider=self._spider ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ), ^ File "/layers/paketo-buildpacks_pip-install/packages/lib/python3.14/site-packages/scrapy_fake_useragent/middleware.py", line 95, in process_exception if isinstance(exception, self.EXCEPTIONS_TO_RETRY) \ ^^^^^^^^^^^^^^^^^^^^^^^^ AttributeError: 'RetryUserAgentMiddleware' object has no attribute 'EXCEPTIONS_TO_RETRY' 2026-01-26 15:29:49 [scrapy.core.engine] INFO: Closing spider (finished) 2026-01-26 15:29:49 [ESGO (events)] WARNING: Total fixed duplicated events: 2 2026-01-26 15:29:49 [ESGO (events)] WARNING: You can enable detailed logs for duplicated events, set `ENABLE_DUPLICATION_DETAILED_LOGS` environment variable to `1` 2026-01-26 15:29:49 [ESGO (events)] WARNING: Event time frame was changed to fit sub events: External id: 5241567 end time was changed from 17:15 to 17:35 2026-01-26 15:29:49 [ESGO (events)] WARNING: Please, do not forget to add links to sub events with fixed times to task comments. 2026-01-26 15:29:49 [ESGO (events)] INFO: Save the actual congress fields. 2026-01-26 15:29:49 [scrapy.utils.signal] ERROR: Error caught on signal handler: > Traceback (most recent call last): File "/layers/paketo-buildpacks_pip-install/packages/lib/python3.14/site-packages/scrapy/utils/signal.py", line 192, in handler robustApply( ~~~~~~~~~~~^ receiver, signal=signal, sender=sender, *arguments, **named ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ), ^ File "/layers/paketo-buildpacks_pip-install/packages/lib/python3.14/site-packages/pydispatch/robustapply.py", line 55, in robustApply return receiver(*arguments, **named) File "/workspace/source/app/grabbers/pipelines/store_to_elasticsearch.py", line 161, in spider_closed self.client.add_grabber_fields( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AttributeError: 'NoneType' object has no attribute 'add_grabber_fields' 2026-01-26 15:29:49 [scrapy.extensions.feedexport] INFO: Stored xlsx feed (731 items) in: s3://usummit-prod-grabbers-bucket/ESGO (events)/ESGO (events)-2093_2026-01-26_15-26-25.xlsx 2026-01-26 15:29:49 [scrapy.statscollectors] INFO: Dumping Scrapy stats: {'downloader/exception_count': 2, 'downloader/exception_type_count/twisted.internet.error.TimeoutError': 2, 'downloader/request_bytes': 56276, 'downloader/request_count': 98, 'downloader/request_method_count/GET': 98, 'downloader/response_bytes': 1117197, 'downloader/response_count': 96, 'downloader/response_status_count/200': 96, 'elapsed_time_seconds': 196.875824, 'feedexport/success_count/S3FeedStorage': 1, 'finish_reason': 'finished', 'finish_time': datetime.datetime(2026, 1, 26, 15, 29, 49, 100007, tzinfo=datetime.timezone.utc), 'item_scraped_count': 733, 'items_per_minute': 224.3877551020408, 'log_count/ERROR': 2, 'log_count/INFO': 5, 'memusage/max': 240852992, 'memusage/startup': 229830656, 'request_depth_max': 1, 'response_received_count': 96, 'responses_per_minute': 29.387755102040817, 'scheduler/dequeued': 98, 'scheduler/dequeued/memory': 98, 'scheduler/enqueued': 98, 'scheduler/enqueued/memory': 98, 'start_time': datetime.datetime(2026, 1, 26, 15, 26, 32, 224183, tzinfo=datetime.timezone.utc)} 2026-01-26 15:29:49 [scrapy.core.engine] INFO: Spider closed (finished)