diff --git a/scrapy/spiders/__init__.py b/scrapy/spiders/__init__.py index 761e2e8e8..2b8c956c1 100644 --- a/scrapy/spiders/__init__.py +++ b/scrapy/spiders/__init__.py @@ -12,6 +12,7 @@ from twisted.internet.defer import Deferred from scrapy import signals from scrapy.http import Request, Response +from scrapy.utils.python import global_object_name from scrapy.utils.trackref import object_ref from scrapy.utils.url import url_is_from_spider @@ -52,6 +53,8 @@ class Spider(object_ref): def __init__(self, name: Optional[str] = None, **kwargs: Any): if name is not None: self.name = name + elif not getattr(self, "name", None): + self.name = global_object_name(self.__class__) self.__dict__.update(kwargs) if not hasattr(self, "start_urls"): self.start_urls: List[str] = [] diff --git a/tests/test_spider.py b/tests/test_spider.py index fbc2a43bb..bbb52612e 100644 --- a/tests/test_spider.py +++ b/tests/test_spider.py @@ -24,6 +24,7 @@ from scrapy.spiders import ( XMLFeedSpider, ) from scrapy.spiders.init import InitSpider +from scrapy.utils.python import global_object_name from scrapy.utils.test import get_crawler from tests import get_testdata @@ -54,8 +55,9 @@ class SpiderTest(unittest.TestCase): self.assertEqual(spider.foo, "bar") def test_spider_without_name(self): + self.assertFalse(hasattr(self.spider_class, "name")) spider = self.spider_class() - self.assertFalse(hasattr(spider, "name")) + self.assertEqual(spider.name, global_object_name(self.spider_class)) def test_from_crawler_crawler_and_settings_population(self): crawler = get_crawler()