2026-07-29 00:01:04 [scrapy.utils.log] INFO: Scrapy 2.8.0 started (bot: modularspiders) 2026-07-29 00:01:04 [scrapy.utils.log] INFO: Versions: lxml 4.9.2.0, libxml2 2.9.14, cssselect 1.2.0, parsel 1.7.0, w3lib 2.1.1, Twisted 22.10.0, Python 3.10.15 (main, Oct 19 2024, 04:00:28) [GCC 12.2.0], pyOpenSSL 23.1.1 (OpenSSL 3.1.0 14 Mar 2023), cryptography 40.0.1, Platform Linux-5.10.0-21-amd64-x86_64-with-glibc2.36 2026-07-29 00:01:04 [scrapy.crawler] INFO: Overridden settings: {'BOT_NAME': 'modularspiders', 'CLOSESPIDER_TIMEOUT': 3600, 'LOG_FILE': 'logs/default/clockface/78c699fa8ae011f197600242ac11000b.log', 'NEWSPIDER_MODULE': 'modularspiders.spiders', 'ROBOTSTXT_OBEY': True, 'SPIDER_MODULES': ['modularspiders.spiders'], 'USER_AGENT': 'Mozilla/5.0 (compatible; Googlebot/2.1; ' '+http://www.google.com/bot.html)'} 2026-07-29 00:01:04 [py.warnings] WARNING: /code/lib/python3.10/site-packages/scrapy/utils/request.py:232: ScrapyDeprecationWarning: '2.6' is a deprecated value for the 'REQUEST_FINGERPRINTER_IMPLEMENTATION' setting. It is also the default value. In other words, it is normal to get this warning if you have not defined a value for the 'REQUEST_FINGERPRINTER_IMPLEMENTATION' setting. This is so for backward compatibility reasons, but it will change in a future version of Scrapy. See the documentation of the 'REQUEST_FINGERPRINTER_IMPLEMENTATION' setting for information on how to handle this deprecation. return cls(crawler) 2026-07-29 00:01:04 [scrapy.utils.log] DEBUG: Using reactor: twisted.internet.epollreactor.EPollReactor 2026-07-29 00:01:04 [scrapy.extensions.telnet] INFO: Telnet Password: 447d74dfa42f272b 2026-07-29 00:01:04 [scrapy.middleware] INFO: Enabled extensions: ['scrapy.extensions.corestats.CoreStats', 'scrapy.extensions.telnet.TelnetConsole', 'scrapy.extensions.memusage.MemoryUsage', 'scrapy.extensions.logstats.LogStats', 'scrapy.extensions.closespider.CloseSpider'] 2026-07-29 00:01:05 [scrapy.middleware] INFO: Enabled downloader middlewares: ['scrapy.downloadermiddlewares.robotstxt.RobotsTxtMiddleware', 'scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware', 'scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware', 'scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware', 'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware', 'scrapy.downloadermiddlewares.retry.RetryMiddleware', '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-07-29 00:01:05 [scrapy.middleware] INFO: Enabled spider middlewares: ['scrapy.spidermiddlewares.httperror.HttpErrorMiddleware', 'scrapy.spidermiddlewares.offsite.OffsiteMiddleware', 'scrapy.spidermiddlewares.referer.RefererMiddleware', 'scrapy.spidermiddlewares.urllength.UrlLengthMiddleware', 'scrapy.spidermiddlewares.depth.DepthMiddleware'] 2026-07-29 00:01:05 [scrapy.middleware] INFO: Enabled item pipelines: ['modularspiders.pipelines.MinimumViableItemPipeline', 'modularspiders.pipelines.RedisExporter', 'modularspiders.pipelines.BulkStoreUpdate'] 2026-07-29 00:01:05 [scrapy.core.engine] INFO: Spider opened 2026-07-29 00:01:05 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min) 2026-07-29 00:01:05 [scrapy.extensions.telnet] INFO: Telnet console listening on 127.0.0.1:6024 2026-07-29 00:01:05 [scrapy.core.engine] DEBUG: Crawled (200) (referer: None) 2026-07-29 00:01:06 [scrapy.downloadermiddlewares.retry] DEBUG: Retrying (failed 1 times): 429 Unknown Status 2026-07-29 00:01:06 [scrapy.downloadermiddlewares.retry] DEBUG: Retrying (failed 1 times): 429 Unknown Status 2026-07-29 00:01:06 [scrapy.downloadermiddlewares.retry] DEBUG: Retrying (failed 1 times): 429 Unknown Status 2026-07-29 00:01:06 [scrapy.downloadermiddlewares.retry] DEBUG: Retrying (failed 1 times): 429 Unknown Status 2026-07-29 00:01:06 [scrapy.downloadermiddlewares.retry] DEBUG: Retrying (failed 1 times): 429 Unknown Status 2026-07-29 00:01:06 [scrapy.downloadermiddlewares.retry] DEBUG: Retrying (failed 1 times): 429 Unknown Status 2026-07-29 00:01:06 [scrapy.core.engine] DEBUG: Crawled (200) (referer: None) 2026-07-29 00:01:06 [scrapy.downloadermiddlewares.retry] DEBUG: Retrying (failed 2 times): 429 Unknown Status 2026-07-29 00:01:06 [scrapy.downloadermiddlewares.retry] DEBUG: Retrying (failed 1 times): 429 Unknown Status 2026-07-29 00:01:06 [scrapy.downloadermiddlewares.retry] DEBUG: Retrying (failed 2 times): 429 Unknown Status 2026-07-29 00:01:06 [scrapy.downloadermiddlewares.retry] DEBUG: Retrying (failed 2 times): 429 Unknown Status 2026-07-29 00:01:06 [scrapy.downloadermiddlewares.retry] DEBUG: Retrying (failed 2 times): 429 Unknown Status 2026-07-29 00:01:06 [scrapy.downloadermiddlewares.retry] DEBUG: Retrying (failed 2 times): 429 Unknown Status 2026-07-29 00:01:06 [scrapy.downloadermiddlewares.retry] DEBUG: Retrying (failed 2 times): 429 Unknown Status 2026-07-29 00:01:06 [scrapy.downloadermiddlewares.retry] ERROR: Gave up retrying (failed 3 times): 429 Unknown Status 2026-07-29 00:01:06 [scrapy.core.engine] DEBUG: Crawled (429) (referer: None) 2026-07-29 00:01:06 [scrapy.downloadermiddlewares.retry] ERROR: Gave up retrying (failed 3 times): 429 Unknown Status 2026-07-29 00:01:06 [scrapy.core.engine] DEBUG: Crawled (429) (referer: None) 2026-07-29 00:01:06 [scrapy.downloadermiddlewares.retry] ERROR: Gave up retrying (failed 3 times): 429 Unknown Status 2026-07-29 00:01:06 [scrapy.core.engine] DEBUG: Crawled (429) (referer: None) 2026-07-29 00:01:06 [scrapy.spidermiddlewares.httperror] INFO: Ignoring response <429 https://en.clockfacemodular.com/products.json?limit=250&page=1>: HTTP status code is not handled or not allowed 2026-07-29 00:01:06 [scrapy.core.engine] DEBUG: Crawled (200) (referer: None) 2026-07-29 00:01:06 [scrapy.downloadermiddlewares.retry] ERROR: Gave up retrying (failed 3 times): 429 Unknown Status 2026-07-29 00:01:06 [scrapy.core.engine] DEBUG: Crawled (429) (referer: None) 2026-07-29 00:01:06 [scrapy.downloadermiddlewares.retry] ERROR: Gave up retrying (failed 3 times): 429 Unknown Status 2026-07-29 00:01:06 [scrapy.core.engine] DEBUG: Crawled (429) (referer: None) 2026-07-29 00:01:06 [scrapy.spidermiddlewares.httperror] INFO: Ignoring response <429 https://en.clockfacemodular.com/products.json?limit=250&page=9>: HTTP status code is not handled or not allowed 2026-07-29 00:01:06 [scrapy.spidermiddlewares.httperror] INFO: Ignoring response <429 https://en.clockfacemodular.com/products.json?limit=250&page=3>: HTTP status code is not handled or not allowed 2026-07-29 00:01:06 [scrapy.spidermiddlewares.httperror] INFO: Ignoring response <429 https://en.clockfacemodular.com/products.json?limit=250&page=5>: HTTP status code is not handled or not allowed 2026-07-29 00:01:06 [scrapy.spidermiddlewares.httperror] INFO: Ignoring response <429 https://en.clockfacemodular.com/products.json?limit=250&page=6>: HTTP status code is not handled or not allowed 2026-07-29 00:01:07 [scrapy.core.engine] DEBUG: Crawled (200) (referer: None) 2026-07-29 00:01:08 [scrapy.core.scraper] ERROR: Spider error processing (referer: None) Traceback (most recent call last): File "/code/lib/python3.10/site-packages/scrapy/utils/defer.py", line 257, in iter_errback yield next(it) File "/code/lib/python3.10/site-packages/scrapy/utils/python.py", line 312, in __next__ return next(self.data) File "/code/lib/python3.10/site-packages/scrapy/utils/python.py", line 312, in __next__ return next(self.data) File "/code/lib/python3.10/site-packages/scrapy/core/spidermw.py", line 104, in process_sync for r in iterable: File "/code/lib/python3.10/site-packages/scrapy/spidermiddlewares/offsite.py", line 28, in return (r for r in result or () if self._filter(r, spider)) File "/code/lib/python3.10/site-packages/scrapy/core/spidermw.py", line 104, in process_sync for r in iterable: File "/code/lib/python3.10/site-packages/scrapy/spidermiddlewares/referer.py", line 353, in return (self._set_referer(r, response) for r in result or ()) File "/code/lib/python3.10/site-packages/scrapy/core/spidermw.py", line 104, in process_sync for r in iterable: File "/code/lib/python3.10/site-packages/scrapy/spidermiddlewares/urllength.py", line 27, in return (r for r in result or () if self._filter(r, spider)) File "/code/lib/python3.10/site-packages/scrapy/core/spidermw.py", line 104, in process_sync for r in iterable: File "/code/lib/python3.10/site-packages/scrapy/spidermiddlewares/depth.py", line 31, in return (r for r in result or () if self._filter(r, response, spider)) File "/code/lib/python3.10/site-packages/scrapy/core/spidermw.py", line 104, in process_sync for r in iterable: File "/code/modularspiders/spiders/clockface.py", line 23, in parse loader = self.get_loader(response) File "/code/modularspiders/spiders/base.py", line 53, in get_loader extruct.extract(response.text, schema_context=schema_context), File "/code/lib/python3.10/site-packages/extruct/_extruct.py", line 108, in extract output[syntax] = list(extract(document, base_url=base_url)) File "/code/lib/python3.10/site-packages/extruct/microformat.py", line 10, in extract_items for obj in mf2py.parse(html, html_parser="lxml", url=base_url)['items']: File "/code/lib/python3.10/site-packages/mf2py/parser.py", line 44, in parse return Parser(doc, url, html_parser, img_with_alt).to_dict() File "/code/lib/python3.10/site-packages/mf2py/parser.py", line 146, in __init__ self.parse() File "/code/lib/python3.10/site-packages/mf2py/parser.py", line 444, in parse parse_el(self.__doc__, ctx) File "/code/lib/python3.10/site-packages/mf2py/parser.py", line 440, in parse_el parse_el(child, ctx) File "/code/lib/python3.10/site-packages/mf2py/parser.py", line 440, in parse_el parse_el(child, ctx) File "/code/lib/python3.10/site-packages/mf2py/parser.py", line 440, in parse_el parse_el(child, ctx) [Previous line repeated 953 more times] File "/code/lib/python3.10/site-packages/mf2py/parser.py", line 433, in parse_el potential_microformats = backcompat.root(classes) File "/code/lib/python3.10/site-packages/mf2py/backcompat.py", line 136, in root return unordered_list([c for c in classes if c in _CLASSIC_MAP]) File "/code/lib/python3.10/site-packages/mf2py/mf_helpers.py", line 29, in unordered_list return sorted(set(l)) RecursionError: maximum recursion depth exceeded while calling a Python object 2026-07-29 00:01:09 [scrapy.core.engine] DEBUG: Crawled (200) (referer: None) 2026-07-29 00:01:14 [scrapy.core.scraper] ERROR: Spider error processing (referer: None) Traceback (most recent call last): File "/code/lib/python3.10/site-packages/scrapy/utils/defer.py", line 257, in iter_errback yield next(it) File "/code/lib/python3.10/site-packages/scrapy/utils/python.py", line 312, in __next__ return next(self.data) File "/code/lib/python3.10/site-packages/scrapy/utils/python.py", line 312, in __next__ return next(self.data) File "/code/lib/python3.10/site-packages/scrapy/core/spidermw.py", line 104, in process_sync for r in iterable: File "/code/lib/python3.10/site-packages/scrapy/spidermiddlewares/offsite.py", line 28, in return (r for r in result or () if self._filter(r, spider)) File "/code/lib/python3.10/site-packages/scrapy/core/spidermw.py", line 104, in process_sync for r in iterable: File "/code/lib/python3.10/site-packages/scrapy/spidermiddlewares/referer.py", line 353, in return (self._set_referer(r, response) for r in result or ()) File "/code/lib/python3.10/site-packages/scrapy/core/spidermw.py", line 104, in process_sync for r in iterable: File "/code/lib/python3.10/site-packages/scrapy/spidermiddlewares/urllength.py", line 27, in return (r for r in result or () if self._filter(r, spider)) File "/code/lib/python3.10/site-packages/scrapy/core/spidermw.py", line 104, in process_sync for r in iterable: File "/code/lib/python3.10/site-packages/scrapy/spidermiddlewares/depth.py", line 31, in return (r for r in result or () if self._filter(r, response, spider)) File "/code/lib/python3.10/site-packages/scrapy/core/spidermw.py", line 104, in process_sync for r in iterable: File "/code/modularspiders/spiders/clockface.py", line 23, in parse loader = self.get_loader(response) File "/code/modularspiders/spiders/base.py", line 53, in get_loader extruct.extract(response.text, schema_context=schema_context), File "/code/lib/python3.10/site-packages/extruct/_extruct.py", line 108, in extract output[syntax] = list(extract(document, base_url=base_url)) File "/code/lib/python3.10/site-packages/extruct/microformat.py", line 10, in extract_items for obj in mf2py.parse(html, html_parser="lxml", url=base_url)['items']: File "/code/lib/python3.10/site-packages/mf2py/parser.py", line 44, in parse return Parser(doc, url, html_parser, img_with_alt).to_dict() File "/code/lib/python3.10/site-packages/mf2py/parser.py", line 146, in __init__ self.parse() File "/code/lib/python3.10/site-packages/mf2py/parser.py", line 444, in parse parse_el(self.__doc__, ctx) File "/code/lib/python3.10/site-packages/mf2py/parser.py", line 440, in parse_el parse_el(child, ctx) File "/code/lib/python3.10/site-packages/mf2py/parser.py", line 440, in parse_el parse_el(child, ctx) File "/code/lib/python3.10/site-packages/mf2py/parser.py", line 440, in parse_el parse_el(child, ctx) [Previous line repeated 953 more times] File "/code/lib/python3.10/site-packages/mf2py/parser.py", line 433, in parse_el potential_microformats = backcompat.root(classes) File "/code/lib/python3.10/site-packages/mf2py/backcompat.py", line 136, in root return unordered_list([c for c in classes if c in _CLASSIC_MAP]) File "/code/lib/python3.10/site-packages/mf2py/mf_helpers.py", line 29, in unordered_list return sorted(set(l)) RecursionError: maximum recursion depth exceeded while calling a Python object 2026-07-29 00:01:14 [scrapy.core.engine] INFO: Closing spider (finished) 2026-07-29 00:01:14 [urllib3.connectionpool] DEBUG: Starting new HTTPS connection (1): wigglehunt.com:443 2026-07-29 00:01:14 [py.warnings] WARNING: /code/lib/python3.10/site-packages/urllib3/connectionpool.py:1045: InsecureRequestWarning: Unverified HTTPS request is being made to host 'wigglehunt.com'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/1.26.x/advanced-usage.html#ssl-warnings warnings.warn( 2026-07-29 00:01:14 [urllib3.connectionpool] DEBUG: https://wigglehunt.com:443 "GET /api/v1/_ingest-complete?store_code=clockface&batch_id=2528 HTTP/1.1" 200 15 2026-07-29 00:01:14 [scrapy.statscollectors] INFO: Dumping Scrapy stats: {'downloader/request_bytes': 11713, 'downloader/request_count': 23, 'downloader/request_method_count/GET': 23, 'downloader/response_bytes': 801771, 'downloader/response_count': 23, 'downloader/response_status_count/200': 5, 'downloader/response_status_count/429': 18, 'elapsed_time_seconds': 9.582031, 'finish_reason': 'finished', 'finish_time': datetime.datetime(2026, 7, 29, 0, 1, 14, 751705), 'httpcompression/response_bytes': 2853827, 'httpcompression/response_count': 5, 'httperror/response_ignored_count': 5, 'httperror/response_ignored_status_count/429': 5, 'log_count/DEBUG': 26, 'log_count/ERROR': 7, 'log_count/INFO': 15, 'log_count/WARNING': 2, 'memusage/max': 77250560, 'memusage/startup': 77250560, 'response_received_count': 10, 'retry/count': 13, 'retry/max_reached': 5, 'retry/reason_count/429 Unknown Status': 13, 'robotstxt/request_count': 1, 'robotstxt/response_count': 1, 'robotstxt/response_status_count/200': 1, 'scheduler/dequeued': 22, 'scheduler/dequeued/memory': 22, 'scheduler/enqueued': 22, 'scheduler/enqueued/memory': 22, 'spider_exceptions/RecursionError': 2, 'start_time': datetime.datetime(2026, 7, 29, 0, 1, 5, 169674)} 2026-07-29 00:01:14 [scrapy.core.engine] INFO: Spider closed (finished)