• LogParser v0.8.2, last updated at 2026-03-16 12:05:12, http://scrapyd-0:6800/logs/sourcing_v2/carwow.gb/2026-03-16T11_58_59.json

PROJECT (sourcing_v2), SPIDER (carwow.gb)

  • Log analysis
  • Log categorization
  • Progress visualization
  • View log
  • projectsourcing_v2
    spidercarwow.gb
    job2026-03-16T11_58_59
    first_log_time2026-03-16 11:59:04
    latest_log_time2026-03-16 12:05:12
    runtime0:06:08
    crawled_pages 886
    scraped_items 78
    shutdown_reasonReceived SIGTERM twice
    finish_reasonN/A
    log_critical_count0
    log_error_count16
    log_warning_count56
    log_redirect_count0
    log_retry_count0
    log_ignore_count0
    latest_crawl
    latest_scrape
    latest_log
    current_time
    latest_itemN/A
    • WARNING+

    • error_logs
      last 10 of 16

      2026-03-16 12:02:14 [crawlers.middlewares.monitoring_spider_middleware] ERROR: 'NoneType' object has no attribute 'lower'
      Traceback (most recent call last):
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 118, in process_async
          async for r in iterable:
        File "/usr/local/lib/python3.11/dist-packages/scrapy/spidermiddlewares/referer.py", line 355, in process_spider_output_async
          async for r in result or ():
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 121, in process_async
          exception_result = self._process_spider_exception(
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 150, in _process_spider_exception
          result = method(response=response, exception=exception, spider=spider)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/src/app/crawlers/middlewares/monitoring_spider_middleware.py", line 73, in process_spider_exception
          raise exception
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 118, in process_async
          async for r in iterable:
        File "/usr/local/lib/python3.11/dist-packages/scrapy/spidermiddlewares/urllength.py", line 30, in process_spider_output_async
          async for r in result or ():
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 121, in process_async
          exception_result = self._process_spider_exception(
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 150, in _process_spider_exception
          result = method(response=response, exception=exception, spider=spider)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/src/app/crawlers/middlewares/monitoring_spider_middleware.py", line 73, in process_spider_exception
          raise exception
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 118, in process_async
          async for r in iterable:
        File "/usr/local/lib/python3.11/dist-packages/scrapy/spidermiddlewares/depth.py", line 35, in process_spider_output_async
          async for r in result or ():
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 121, in process_async
          exception_result = self._process_spider_exception(
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 150, in _process_spider_exception
          result = method(response=response, exception=exception, spider=spider)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/src/app/crawlers/middlewares/monitoring_spider_middleware.py", line 73, in process_spider_exception
          raise exception
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 118, in process_async
          async for r in iterable:
        File "/usr/src/app/crawlers/middlewares/photo_download_middleware.py", line 42, in process_spider_output
          async for item in result:
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 121, in process_async
          exception_result = self._process_spider_exception(
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 150, in _process_spider_exception
          result = method(response=response, exception=exception, spider=spider)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/src/app/crawlers/middlewares/monitoring_spider_middleware.py", line 73, in process_spider_exception
          raise exception
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 118, in process_async
          async for r in iterable:
        File "/usr/src/app/crawlers/middlewares/report_download_middleware.py", line 32, in process_spider_output
          async for item in result:
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 121, in process_async
          exception_result = self._process_spider_exception(
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 150, in _process_spider_exception
          result = method(response=response, exception=exception, spider=spider)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/src/app/crawlers/middlewares/monitoring_spider_middleware.py", line 73, in process_spider_exception
          raise exception
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 118, in process_async
          async for r in iterable:
        File "/usr/src/app/crawlers/middlewares/id_gen_middleware.py", line 20, in process_spider_output
          async for item in result:
        File "/usr/local/lib/python3.11/dist-packages/scrapy/utils/asyncgen.py", line 17, in as_async_generator
          for r in it:
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 109, in process_sync
          exception_result = self._process_spider_exception(
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 150, in _process_spider_exception
          result = method(response=response, exception=exception, spider=spider)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/src/app/crawlers/middlewares/monitoring_spider_middleware.py", line 73, in process_spider_exception
          raise exception
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 106, in process_sync
          for r in iterable:
        File "/usr/src/app/crawlers/spiders/carwow.py", line 157, in parse_detail
          item = self._parse_listing_from_html(response.text, listing_id)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/src/app/crawlers/spiders/carwow.py", line 305, in _parse_listing_from_html
          raw_transmission = dl_data.get("transmission", "").lower()
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      AttributeError: 'NoneType' object has no attribute 'lower'
      2026-03-16 12:02:14 [scrapy.core.scraper] ERROR: Spider error processing <GET https://dealers.carwow.co.uk/dealers/listings/12154910> (referer: https://dealers.carwow.co.uk/dealers/listings/load_page?active_tab=stock&listing_type=all&pagination%5Bcurrent_page%5D=27)
      Traceback (most recent call last):
        File "/usr/local/lib/python3.11/dist-packages/scrapy/utils/defer.py", line 295, in aiter_errback
          yield await it.__anext__()
                ^^^^^^^^^^^^^^^^^^^^
        File "/usr/local/lib/python3.11/dist-packages/scrapy/utils/python.py", line 374, in __anext__
          return await self.data.__anext__()
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/local/lib/python3.11/dist-packages/scrapy/utils/python.py", line 355, in _async_chain
          async for o in as_async_generator(it):
        File "/usr/local/lib/python3.11/dist-packages/scrapy/utils/asyncgen.py", line 14, in as_async_generator
          async for r in it:
        File "/usr/local/lib/python3.11/dist-packages/scrapy/utils/python.py", line 374, in __anext__
          return await self.data.__anext__()
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/local/lib/python3.11/dist-packages/scrapy/utils/python.py", line 355, in _async_chain
          async for o in as_async_generator(it):
        File "/usr/local/lib/python3.11/dist-packages/scrapy/utils/asyncgen.py", line 14, in as_async_generator
          async for r in it:
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 118, in process_async
          async for r in iterable:
        File "/usr/local/lib/python3.11/dist-packages/scrapy_zyte_api/_middlewares.py", line 206, in process_spider_output_async
          async for item_or_request in result:
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 118, in process_async
          async for r in iterable:
        File "/usr/src/app/crawlers/middlewares/monitoring_spider_middleware.py", line 42, in process_spider_output
          async for item in result:
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 121, in process_async
          exception_result = self._process_spider_exception(
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 150, in _process_spider_exception
          result = method(response=response, exception=exception, spider=spider)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/src/app/crawlers/middlewares/monitoring_spider_middleware.py", line 73, in process_spider_exception
          raise exception
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 118, in process_async
          async for r in iterable:
        File "/usr/local/lib/python3.11/dist-packages/scrapy/spidermiddlewares/referer.py", line 355, in process_spider_output_async
          async for r in result or ():
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 121, in process_async
          exception_result = self._process_spider_exception(
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 150, in _process_spider_exception
          result = method(response=response, exception=exception, spider=spider)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/src/app/crawlers/middlewares/monitoring_spider_middleware.py", line 73, in process_spider_exception
          raise exception
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 118, in process_async
          async for r in iterable:
        File "/usr/local/lib/python3.11/dist-packages/scrapy/spidermiddlewares/urllength.py", line 30, in process_spider_output_async
          async for r in result or ():
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 121, in process_async
          exception_result = self._process_spider_exception(
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 150, in _process_spider_exception
          result = method(response=response, exception=exception, spider=spider)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/src/app/crawlers/middlewares/monitoring_spider_middleware.py", line 73, in process_spider_exception
          raise exception
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 118, in process_async
          async for r in iterable:
        File "/usr/local/lib/python3.11/dist-packages/scrapy/spidermiddlewares/depth.py", line 35, in process_spider_output_async
          async for r in result or ():
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 121, in process_async
          exception_result = self._process_spider_exception(
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 150, in _process_spider_exception
          result = method(response=response, exception=exception, spider=spider)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/src/app/crawlers/middlewares/monitoring_spider_middleware.py", line 73, in process_spider_exception
          raise exception
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 118, in process_async
          async for r in iterable:
        File "/usr/src/app/crawlers/middlewares/photo_download_middleware.py", line 42, in process_spider_output
          async for item in result:
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 121, in process_async
          exception_result = self._process_spider_exception(
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 150, in _process_spider_exception
          result = method(response=response, exception=exception, spider=spider)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/src/app/crawlers/middlewares/monitoring_spider_middleware.py", line 73, in process_spider_exception
          raise exception
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 118, in process_async
          async for r in iterable:
        File "/usr/src/app/crawlers/middlewares/report_download_middleware.py", line 32, in process_spider_output
          async for item in result:
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 121, in process_async
          exception_result = self._process_spider_exception(
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 150, in _process_spider_exception
          result = method(response=response, exception=exception, spider=spider)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/src/app/crawlers/middlewares/monitoring_spider_middleware.py", line 73, in process_spider_exception
          raise exception
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 118, in process_async
          async for r in iterable:
        File "/usr/src/app/crawlers/middlewares/id_gen_middleware.py", line 20, in process_spider_output
          async for item in result:
        File "/usr/local/lib/python3.11/dist-packages/scrapy/utils/asyncgen.py", line 17, in as_async_generator
          for r in it:
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 109, in process_sync
          exception_result = self._process_spider_exception(
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 150, in _process_spider_exception
          result = method(response=response, exception=exception, spider=spider)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/src/app/crawlers/middlewares/monitoring_spider_middleware.py", line 73, in process_spider_exception
          raise exception
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 106, in process_sync
          for r in iterable:
        File "/usr/src/app/crawlers/spiders/carwow.py", line 157, in parse_detail
          item = self._parse_listing_from_html(response.text, listing_id)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/src/app/crawlers/spiders/carwow.py", line 305, in _parse_listing_from_html
          raw_transmission = dl_data.get("transmission", "").lower()
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      AttributeError: 'NoneType' object has no attribute 'lower'
      2026-03-16 12:03:24 [crawlers.middlewares.monitoring_spider_middleware] ERROR: expected string or bytes-like object, got 'NoneType'
      Traceback (most recent call last):
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 106, in process_sync
          for r in iterable:
        File "/usr/src/app/crawlers/spiders/carwow.py", line 157, in parse_detail
          item = self._parse_listing_from_html(response.text, listing_id)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/src/app/crawlers/spiders/carwow.py", line 299, in _parse_listing_from_html
          slug_match = re.search(r"(\d{4})$", slug)
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/lib/python3.11/re/__init__.py", line 176, in search
          return _compile(pattern, flags).search(string)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      TypeError: expected string or bytes-like object, got 'NoneType'
      2026-03-16 12:03:24 [crawlers.middlewares.monitoring_spider_middleware] ERROR: expected string or bytes-like object, got 'NoneType'
      Traceback (most recent call last):
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 118, in process_async
          async for r in iterable:
        File "/usr/src/app/crawlers/middlewares/id_gen_middleware.py", line 20, in process_spider_output
          async for item in result:
        File "/usr/local/lib/python3.11/dist-packages/scrapy/utils/asyncgen.py", line 17, in as_async_generator
          for r in it:
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 109, in process_sync
          exception_result = self._process_spider_exception(
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 150, in _process_spider_exception
          result = method(response=response, exception=exception, spider=spider)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/src/app/crawlers/middlewares/monitoring_spider_middleware.py", line 73, in process_spider_exception
          raise exception
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 106, in process_sync
          for r in iterable:
        File "/usr/src/app/crawlers/spiders/carwow.py", line 157, in parse_detail
          item = self._parse_listing_from_html(response.text, listing_id)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/src/app/crawlers/spiders/carwow.py", line 299, in _parse_listing_from_html
          slug_match = re.search(r"(\d{4})$", slug)
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/lib/python3.11/re/__init__.py", line 176, in search
          return _compile(pattern, flags).search(string)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      TypeError: expected string or bytes-like object, got 'NoneType'
      2026-03-16 12:03:24 [crawlers.middlewares.monitoring_spider_middleware] ERROR: expected string or bytes-like object, got 'NoneType'
      Traceback (most recent call last):
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 118, in process_async
          async for r in iterable:
        File "/usr/src/app/crawlers/middlewares/report_download_middleware.py", line 32, in process_spider_output
          async for item in result:
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 121, in process_async
          exception_result = self._process_spider_exception(
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 150, in _process_spider_exception
          result = method(response=response, exception=exception, spider=spider)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/src/app/crawlers/middlewares/monitoring_spider_middleware.py", line 73, in process_spider_exception
          raise exception
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 118, in process_async
          async for r in iterable:
        File "/usr/src/app/crawlers/middlewares/id_gen_middleware.py", line 20, in process_spider_output
          async for item in result:
        File "/usr/local/lib/python3.11/dist-packages/scrapy/utils/asyncgen.py", line 17, in as_async_generator
          for r in it:
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 109, in process_sync
          exception_result = self._process_spider_exception(
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 150, in _process_spider_exception
          result = method(response=response, exception=exception, spider=spider)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/src/app/crawlers/middlewares/monitoring_spider_middleware.py", line 73, in process_spider_exception
          raise exception
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 106, in process_sync
          for r in iterable:
        File "/usr/src/app/crawlers/spiders/carwow.py", line 157, in parse_detail
          item = self._parse_listing_from_html(response.text, listing_id)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/src/app/crawlers/spiders/carwow.py", line 299, in _parse_listing_from_html
          slug_match = re.search(r"(\d{4})$", slug)
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/lib/python3.11/re/__init__.py", line 176, in search
          return _compile(pattern, flags).search(string)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      TypeError: expected string or bytes-like object, got 'NoneType'
      2026-03-16 12:03:24 [crawlers.middlewares.monitoring_spider_middleware] ERROR: expected string or bytes-like object, got 'NoneType'
      Traceback (most recent call last):
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 118, in process_async
          async for r in iterable:
        File "/usr/src/app/crawlers/middlewares/photo_download_middleware.py", line 42, in process_spider_output
          async for item in result:
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 121, in process_async
          exception_result = self._process_spider_exception(
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 150, in _process_spider_exception
          result = method(response=response, exception=exception, spider=spider)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/src/app/crawlers/middlewares/monitoring_spider_middleware.py", line 73, in process_spider_exception
          raise exception
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 118, in process_async
          async for r in iterable:
        File "/usr/src/app/crawlers/middlewares/report_download_middleware.py", line 32, in process_spider_output
          async for item in result:
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 121, in process_async
          exception_result = self._process_spider_exception(
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 150, in _process_spider_exception
          result = method(response=response, exception=exception, spider=spider)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/src/app/crawlers/middlewares/monitoring_spider_middleware.py", line 73, in process_spider_exception
          raise exception
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 118, in process_async
          async for r in iterable:
        File "/usr/src/app/crawlers/middlewares/id_gen_middleware.py", line 20, in process_spider_output
          async for item in result:
        File "/usr/local/lib/python3.11/dist-packages/scrapy/utils/asyncgen.py", line 17, in as_async_generator
          for r in it:
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 109, in process_sync
          exception_result = self._process_spider_exception(
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 150, in _process_spider_exception
          result = method(response=response, exception=exception, spider=spider)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/src/app/crawlers/middlewares/monitoring_spider_middleware.py", line 73, in process_spider_exception
          raise exception
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 106, in process_sync
          for r in iterable:
        File "/usr/src/app/crawlers/spiders/carwow.py", line 157, in parse_detail
          item = self._parse_listing_from_html(response.text, listing_id)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/src/app/crawlers/spiders/carwow.py", line 299, in _parse_listing_from_html
          slug_match = re.search(r"(\d{4})$", slug)
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/lib/python3.11/re/__init__.py", line 176, in search
          return _compile(pattern, flags).search(string)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      TypeError: expected string or bytes-like object, got 'NoneType'
      2026-03-16 12:03:24 [crawlers.middlewares.monitoring_spider_middleware] ERROR: expected string or bytes-like object, got 'NoneType'
      Traceback (most recent call last):
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 118, in process_async
          async for r in iterable:
        File "/usr/local/lib/python3.11/dist-packages/scrapy/spidermiddlewares/depth.py", line 35, in process_spider_output_async
          async for r in result or ():
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 121, in process_async
          exception_result = self._process_spider_exception(
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 150, in _process_spider_exception
          result = method(response=response, exception=exception, spider=spider)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/src/app/crawlers/middlewares/monitoring_spider_middleware.py", line 73, in process_spider_exception
          raise exception
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 118, in process_async
          async for r in iterable:
        File "/usr/src/app/crawlers/middlewares/photo_download_middleware.py", line 42, in process_spider_output
          async for item in result:
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 121, in process_async
          exception_result = self._process_spider_exception(
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 150, in _process_spider_exception
          result = method(response=response, exception=exception, spider=spider)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/src/app/crawlers/middlewares/monitoring_spider_middleware.py", line 73, in process_spider_exception
          raise exception
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 118, in process_async
          async for r in iterable:
        File "/usr/src/app/crawlers/middlewares/report_download_middleware.py", line 32, in process_spider_output
          async for item in result:
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 121, in process_async
          exception_result = self._process_spider_exception(
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 150, in _process_spider_exception
          result = method(response=response, exception=exception, spider=spider)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/src/app/crawlers/middlewares/monitoring_spider_middleware.py", line 73, in process_spider_exception
          raise exception
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 118, in process_async
          async for r in iterable:
        File "/usr/src/app/crawlers/middlewares/id_gen_middleware.py", line 20, in process_spider_output
          async for item in result:
        File "/usr/local/lib/python3.11/dist-packages/scrapy/utils/asyncgen.py", line 17, in as_async_generator
          for r in it:
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 109, in process_sync
          exception_result = self._process_spider_exception(
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 150, in _process_spider_exception
          result = method(response=response, exception=exception, spider=spider)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/src/app/crawlers/middlewares/monitoring_spider_middleware.py", line 73, in process_spider_exception
          raise exception
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 106, in process_sync
          for r in iterable:
        File "/usr/src/app/crawlers/spiders/carwow.py", line 157, in parse_detail
          item = self._parse_listing_from_html(response.text, listing_id)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/src/app/crawlers/spiders/carwow.py", line 299, in _parse_listing_from_html
          slug_match = re.search(r"(\d{4})$", slug)
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/lib/python3.11/re/__init__.py", line 176, in search
          return _compile(pattern, flags).search(string)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      TypeError: expected string or bytes-like object, got 'NoneType'
      2026-03-16 12:03:25 [crawlers.middlewares.monitoring_spider_middleware] ERROR: expected string or bytes-like object, got 'NoneType'
      Traceback (most recent call last):
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 118, in process_async
          async for r in iterable:
        File "/usr/local/lib/python3.11/dist-packages/scrapy/spidermiddlewares/urllength.py", line 30, in process_spider_output_async
          async for r in result or ():
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 121, in process_async
          exception_result = self._process_spider_exception(
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 150, in _process_spider_exception
          result = method(response=response, exception=exception, spider=spider)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/src/app/crawlers/middlewares/monitoring_spider_middleware.py", line 73, in process_spider_exception
          raise exception
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 118, in process_async
          async for r in iterable:
        File "/usr/local/lib/python3.11/dist-packages/scrapy/spidermiddlewares/depth.py", line 35, in process_spider_output_async
          async for r in result or ():
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 121, in process_async
          exception_result = self._process_spider_exception(
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 150, in _process_spider_exception
          result = method(response=response, exception=exception, spider=spider)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/src/app/crawlers/middlewares/monitoring_spider_middleware.py", line 73, in process_spider_exception
          raise exception
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 118, in process_async
          async for r in iterable:
        File "/usr/src/app/crawlers/middlewares/photo_download_middleware.py", line 42, in process_spider_output
          async for item in result:
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 121, in process_async
          exception_result = self._process_spider_exception(
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 150, in _process_spider_exception
          result = method(response=response, exception=exception, spider=spider)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/src/app/crawlers/middlewares/monitoring_spider_middleware.py", line 73, in process_spider_exception
          raise exception
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 118, in process_async
          async for r in iterable:
        File "/usr/src/app/crawlers/middlewares/report_download_middleware.py", line 32, in process_spider_output
          async for item in result:
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 121, in process_async
          exception_result = self._process_spider_exception(
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 150, in _process_spider_exception
          result = method(response=response, exception=exception, spider=spider)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/src/app/crawlers/middlewares/monitoring_spider_middleware.py", line 73, in process_spider_exception
          raise exception
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 118, in process_async
          async for r in iterable:
        File "/usr/src/app/crawlers/middlewares/id_gen_middleware.py", line 20, in process_spider_output
          async for item in result:
        File "/usr/local/lib/python3.11/dist-packages/scrapy/utils/asyncgen.py", line 17, in as_async_generator
          for r in it:
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 109, in process_sync
          exception_result = self._process_spider_exception(
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 150, in _process_spider_exception
          result = method(response=response, exception=exception, spider=spider)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/src/app/crawlers/middlewares/monitoring_spider_middleware.py", line 73, in process_spider_exception
          raise exception
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 106, in process_sync
          for r in iterable:
        File "/usr/src/app/crawlers/spiders/carwow.py", line 157, in parse_detail
          item = self._parse_listing_from_html(response.text, listing_id)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/src/app/crawlers/spiders/carwow.py", line 299, in _parse_listing_from_html
          slug_match = re.search(r"(\d{4})$", slug)
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/lib/python3.11/re/__init__.py", line 176, in search
          return _compile(pattern, flags).search(string)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      TypeError: expected string or bytes-like object, got 'NoneType'
      2026-03-16 12:03:25 [crawlers.middlewares.monitoring_spider_middleware] ERROR: expected string or bytes-like object, got 'NoneType'
      Traceback (most recent call last):
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 118, in process_async
          async for r in iterable:
        File "/usr/local/lib/python3.11/dist-packages/scrapy/spidermiddlewares/referer.py", line 355, in process_spider_output_async
          async for r in result or ():
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 121, in process_async
          exception_result = self._process_spider_exception(
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 150, in _process_spider_exception
          result = method(response=response, exception=exception, spider=spider)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/src/app/crawlers/middlewares/monitoring_spider_middleware.py", line 73, in process_spider_exception
          raise exception
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 118, in process_async
          async for r in iterable:
        File "/usr/local/lib/python3.11/dist-packages/scrapy/spidermiddlewares/urllength.py", line 30, in process_spider_output_async
          async for r in result or ():
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 121, in process_async
          exception_result = self._process_spider_exception(
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 150, in _process_spider_exception
          result = method(response=response, exception=exception, spider=spider)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/src/app/crawlers/middlewares/monitoring_spider_middleware.py", line 73, in process_spider_exception
          raise exception
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 118, in process_async
          async for r in iterable:
        File "/usr/local/lib/python3.11/dist-packages/scrapy/spidermiddlewares/depth.py", line 35, in process_spider_output_async
          async for r in result or ():
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 121, in process_async
          exception_result = self._process_spider_exception(
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 150, in _process_spider_exception
          result = method(response=response, exception=exception, spider=spider)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/src/app/crawlers/middlewares/monitoring_spider_middleware.py", line 73, in process_spider_exception
          raise exception
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 118, in process_async
          async for r in iterable:
        File "/usr/src/app/crawlers/middlewares/photo_download_middleware.py", line 42, in process_spider_output
          async for item in result:
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 121, in process_async
          exception_result = self._process_spider_exception(
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 150, in _process_spider_exception
          result = method(response=response, exception=exception, spider=spider)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/src/app/crawlers/middlewares/monitoring_spider_middleware.py", line 73, in process_spider_exception
          raise exception
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 118, in process_async
          async for r in iterable:
        File "/usr/src/app/crawlers/middlewares/report_download_middleware.py", line 32, in process_spider_output
          async for item in result:
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 121, in process_async
          exception_result = self._process_spider_exception(
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 150, in _process_spider_exception
          result = method(response=response, exception=exception, spider=spider)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/src/app/crawlers/middlewares/monitoring_spider_middleware.py", line 73, in process_spider_exception
          raise exception
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 118, in process_async
          async for r in iterable:
        File "/usr/src/app/crawlers/middlewares/id_gen_middleware.py", line 20, in process_spider_output
          async for item in result:
        File "/usr/local/lib/python3.11/dist-packages/scrapy/utils/asyncgen.py", line 17, in as_async_generator
          for r in it:
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 109, in process_sync
          exception_result = self._process_spider_exception(
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 150, in _process_spider_exception
          result = method(response=response, exception=exception, spider=spider)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/src/app/crawlers/middlewares/monitoring_spider_middleware.py", line 73, in process_spider_exception
          raise exception
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 106, in process_sync
          for r in iterable:
        File "/usr/src/app/crawlers/spiders/carwow.py", line 157, in parse_detail
          item = self._parse_listing_from_html(response.text, listing_id)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/src/app/crawlers/spiders/carwow.py", line 299, in _parse_listing_from_html
          slug_match = re.search(r"(\d{4})$", slug)
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/lib/python3.11/re/__init__.py", line 176, in search
          return _compile(pattern, flags).search(string)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      TypeError: expected string or bytes-like object, got 'NoneType'
      2026-03-16 12:03:25 [scrapy.core.scraper] ERROR: Spider error processing <GET https://dealers.carwow.co.uk/dealers/listings/12268739> (referer: https://dealers.carwow.co.uk/dealers/listings/load_page?active_tab=stock&listing_type=all&pagination%5Bcurrent_page%5D=43)
      Traceback (most recent call last):
        File "/usr/local/lib/python3.11/dist-packages/scrapy/utils/defer.py", line 295, in aiter_errback
          yield await it.__anext__()
                ^^^^^^^^^^^^^^^^^^^^
        File "/usr/local/lib/python3.11/dist-packages/scrapy/utils/python.py", line 374, in __anext__
          return await self.data.__anext__()
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/local/lib/python3.11/dist-packages/scrapy/utils/python.py", line 355, in _async_chain
          async for o in as_async_generator(it):
        File "/usr/local/lib/python3.11/dist-packages/scrapy/utils/asyncgen.py", line 14, in as_async_generator
          async for r in it:
        File "/usr/local/lib/python3.11/dist-packages/scrapy/utils/python.py", line 374, in __anext__
          return await self.data.__anext__()
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/local/lib/python3.11/dist-packages/scrapy/utils/python.py", line 355, in _async_chain
          async for o in as_async_generator(it):
        File "/usr/local/lib/python3.11/dist-packages/scrapy/utils/asyncgen.py", line 14, in as_async_generator
          async for r in it:
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 118, in process_async
          async for r in iterable:
        File "/usr/local/lib/python3.11/dist-packages/scrapy_zyte_api/_middlewares.py", line 206, in process_spider_output_async
          async for item_or_request in result:
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 118, in process_async
          async for r in iterable:
        File "/usr/src/app/crawlers/middlewares/monitoring_spider_middleware.py", line 42, in process_spider_output
          async for item in result:
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 121, in process_async
          exception_result = self._process_spider_exception(
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 150, in _process_spider_exception
          result = method(response=response, exception=exception, spider=spider)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/src/app/crawlers/middlewares/monitoring_spider_middleware.py", line 73, in process_spider_exception
          raise exception
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 118, in process_async
          async for r in iterable:
        File "/usr/local/lib/python3.11/dist-packages/scrapy/spidermiddlewares/referer.py", line 355, in process_spider_output_async
          async for r in result or ():
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 121, in process_async
          exception_result = self._process_spider_exception(
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 150, in _process_spider_exception
          result = method(response=response, exception=exception, spider=spider)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/src/app/crawlers/middlewares/monitoring_spider_middleware.py", line 73, in process_spider_exception
          raise exception
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 118, in process_async
          async for r in iterable:
        File "/usr/local/lib/python3.11/dist-packages/scrapy/spidermiddlewares/urllength.py", line 30, in process_spider_output_async
          async for r in result or ():
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 121, in process_async
          exception_result = self._process_spider_exception(
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 150, in _process_spider_exception
          result = method(response=response, exception=exception, spider=spider)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/src/app/crawlers/middlewares/monitoring_spider_middleware.py", line 73, in process_spider_exception
          raise exception
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 118, in process_async
          async for r in iterable:
        File "/usr/local/lib/python3.11/dist-packages/scrapy/spidermiddlewares/depth.py", line 35, in process_spider_output_async
          async for r in result or ():
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 121, in process_async
          exception_result = self._process_spider_exception(
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 150, in _process_spider_exception
          result = method(response=response, exception=exception, spider=spider)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/src/app/crawlers/middlewares/monitoring_spider_middleware.py", line 73, in process_spider_exception
          raise exception
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 118, in process_async
          async for r in iterable:
        File "/usr/src/app/crawlers/middlewares/photo_download_middleware.py", line 42, in process_spider_output
          async for item in result:
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 121, in process_async
          exception_result = self._process_spider_exception(
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 150, in _process_spider_exception
          result = method(response=response, exception=exception, spider=spider)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/src/app/crawlers/middlewares/monitoring_spider_middleware.py", line 73, in process_spider_exception
          raise exception
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 118, in process_async
          async for r in iterable:
        File "/usr/src/app/crawlers/middlewares/report_download_middleware.py", line 32, in process_spider_output
          async for item in result:
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 121, in process_async
          exception_result = self._process_spider_exception(
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 150, in _process_spider_exception
          result = method(response=response, exception=exception, spider=spider)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/src/app/crawlers/middlewares/monitoring_spider_middleware.py", line 73, in process_spider_exception
          raise exception
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 118, in process_async
          async for r in iterable:
        File "/usr/src/app/crawlers/middlewares/id_gen_middleware.py", line 20, in process_spider_output
          async for item in result:
        File "/usr/local/lib/python3.11/dist-packages/scrapy/utils/asyncgen.py", line 17, in as_async_generator
          for r in it:
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 109, in process_sync
          exception_result = self._process_spider_exception(
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 150, in _process_spider_exception
          result = method(response=response, exception=exception, spider=spider)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/src/app/crawlers/middlewares/monitoring_spider_middleware.py", line 73, in process_spider_exception
          raise exception
        File "/usr/local/lib/python3.11/dist-packages/scrapy/core/spidermw.py", line 106, in process_sync
          for r in iterable:
        File "/usr/src/app/crawlers/spiders/carwow.py", line 157, in parse_detail
          item = self._parse_listing_from_html(response.text, listing_id)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/src/app/crawlers/spiders/carwow.py", line 299, in _parse_listing_from_html
          slug_match = re.search(r"(\d{4})$", slug)
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/lib/python3.11/re/__init__.py", line 176, in search
          return _compile(pattern, flags).search(string)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      TypeError: expected string or bytes-like object, got 'NoneType'
    • warning_logs
      last 10 of 56

      2026-03-16 12:03:16 [carwow.gb] WARNING: Skipping listing 12261676: missing year/registration_date
      2026-03-16 12:03:16 [carwow.gb] WARNING: Failed to parse item for listing 12261676
      2026-03-16 12:03:27 [carwow.gb] WARNING: Skipping listing 12283097: missing year/registration_date
      2026-03-16 12:03:27 [carwow.gb] WARNING: Failed to parse item for listing 12283097
      2026-03-16 12:03:49 [carwow.gb] WARNING: Skipping listing 12214651: missing year/registration_date
      2026-03-16 12:03:49 [carwow.gb] WARNING: Failed to parse item for listing 12214651
      2026-03-16 12:04:06 [carwow.gb] WARNING: Skipping listing 12268548: missing year/registration_date
      2026-03-16 12:04:06 [carwow.gb] WARNING: Failed to parse item for listing 12268548
      2026-03-16 12:04:11 [carwow.gb] WARNING: Skipping listing 12122759: missing year/registration_date
      2026-03-16 12:04:11 [carwow.gb] WARNING: Failed to parse item for listing 12122759

      INFO

      DEBUG

    • scrapy_version

      2.11.2
    • telnet_console

      127.0.0.1:6023
    • telnet_password

      4c3026f5ab4d9f2b
    • latest_crawl

      2026-03-16 12:05:11 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://carwow-sell-my-car.imgix.net/xd2lci6xie9an8bzhqsz4op61eqv> (referer: https://dealers.carwow.co.uk/)
    • latest_scrape

      2026-03-16 12:05:12 [scrapy.core.scraper] DEBUG: Scraped from <200 https://carwow-sell-my-car.imgix.net/xd2lci6xie9an8bzhqsz4op61eqv>
    • latest_stat

      2026-03-16 12:05:04 [scrapy.extensions.logstats] INFO: Crawled 886 pages (at 122 pages/min), scraped 78 items (at 32 items/min)
    • Head

      2026-03-16 11:59:04 [scrapy.utils.log] INFO: Scrapy 2.11.2 started (bot: SourcingV2)
      2026-03-16 11:59:04 [scrapy.utils.log] INFO: Versions: lxml 5.2.2.0, libxml2 2.12.6, cssselect 1.2.0, parsel 1.9.1, w3lib 2.1.2, Twisted 24.3.0, Python 3.11.2 (main, Mar 13 2023, 12:18:29) [GCC 12.2.0], pyOpenSSL 24.1.0 (OpenSSL 3.2.1 30 Jan 2024), cryptography 42.0.7, Platform Linux-5.15.0-1098-azure-x86_64-with-glibc2.36
      2026-03-16 11:59:04 [carwow.gb] INFO: Starting spider carwow.gb
      2026-03-16 11:59:04 [scrapy.addons] INFO: Enabled addons:
      []
      2026-03-16 11:59:04 [asyncio] DEBUG: Using selector: EpollSelector
      2026-03-16 11:59:04 [scrapy.utils.log] DEBUG: Using reactor: twisted.internet.asyncioreactor.AsyncioSelectorReactor
      2026-03-16 11:59:04 [scrapy.utils.log] DEBUG: Using asyncio event loop: asyncio.unix_events._UnixSelectorEventLoop
      2026-03-16 11:59:04 [scrapy.extensions.telnet] INFO: Telnet Password: 4c3026f5ab4d9f2b
      2026-03-16 11:59:04 [scrapy.middleware] INFO: Enabled extensions:
      ['scrapy.extensions.corestats.CoreStats',
       'scrapy.extensions.telnet.TelnetConsole',
       'scrapy.extensions.memusage.MemoryUsage',
       'scrapy.extensions.feedexport.FeedExporter',
       'scrapy.extensions.logstats.LogStats',
       'scrapy.extensions.closespider.CloseSpider']
      2026-03-16 11:59:04 [scrapy.crawler] INFO: Overridden settings:
      {'BOT_NAME': 'SourcingV2',
       'CLOSESPIDER_TIMEOUT': 7200,
       'CONCURRENT_REQUESTS': 8,
       'DOWNLOAD_MAXSIZE': 52428800,
       'DOWNLOAD_WARNSIZE': 10485760,
       'FEED_EXPORT_ENCODING': 'utf-8',
       'LOG_FILE': '/var/log/scrapyd/logs/sourcing_v2/carwow.gb/2026-03-16T11_58_59.log',
       'LOG_FORMATTER': 'crawlers.log_formatter.SourcingLogFormatter',
       'MEMUSAGE_LIMIT_MB': 2048,
       'MEMUSAGE_WARNING_MB': 1536,
       'NEWSPIDER_MODULE': 'spiders',
       'REQUEST_FINGERPRINTER_CLASS': 'scrapy_zyte_api.ScrapyZyteAPIRequestFingerprinter',
       'REQUEST_FINGERPRINTER_IMPLEMENTATION': '2.7',
       'SPIDER_MODULES': ['spiders', 'auth_check'],
       'TWISTED_REACTOR': 'twisted.internet.asyncioreactor.AsyncioSelectorReactor',
       'USER_AGENT': ''}
      2026-03-16 11:59:04 [scrapy_zyte_api.handler] INFO: Using a Zyte API key starting with '5857011'
      2026-03-16 11:59:04 [scrapy_zyte_api.handler] INFO: Using a Zyte API key starting with '5857011'
      2026-03-16 11:59:04 [scrapy.middleware] INFO: Enabled downloader middlewares:
      ['scrapy.downloadermiddlewares.offsite.OffsiteMiddleware',
       'scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware',
       'scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware',
       'scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware',
       'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware',
       'scrapy_zyte_api.ScrapyZyteAPIDownloaderMiddleware',
       '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-03-16 11:59:04 [crawlers.middlewares.id_gen_middleware] INFO: Setting up IdGenerationMiddleware
      2026-03-16 11:59:04 [scrapy.middleware] INFO: Enabled spider middlewares:
      ['scrapy.spidermiddlewares.httperror.HttpErrorMiddleware',
       'scrapy_zyte_api.ScrapyZyteAPISpiderMiddleware',
       'crawlers.middlewares.monitoring_spider_middleware.MonitoringSpiderMiddleware',
       'scrapy.spidermiddlewares.referer.RefererMiddleware',
       'scrapy.spidermiddlewares.urllength.UrlLengthMiddleware',
       'scrapy.spidermiddlewares.depth.DepthMiddleware',
       'crawlers.middlewares.photo_download_middleware.PhotoDownloadMiddleware',
       'crawlers.middlewares.report_download_middleware.ReportDownloadMiddleware',
       'crawlers.middlewares.id_gen_middleware.IdGenMiddleware']
      2026-03-16 11:59:04 [azure.identity._credentials.environment] INFO: Incomplete environment configuration for EnvironmentCredential. These variables are set: AZURE_CLIENT_ID, AZURE_TENANT_ID
      2026-03-16 11:59:04 [urllib3.connectionpool] DEBUG: Starting new HTTPS connection (1): login.microsoftonline.com:443
      2026-03-16 11:59:04 [urllib3.connectionpool] DEBUG: https://login.microsoftonline.com:443 "POST /8ea908c1-4e85-4692-bc3f-3646b9b40891/oauth2/v2.0/token HTTP/1.1" 200 2105
      2026-03-16 11:59:04 [azure.identity._credentials.chained] INFO: DefaultAzureCredential acquired a token from WorkloadIdentityCredential
      2026-03-16 11:59:04 [crawlers.pipelines.translation_pipeline] INFO: Loading translations for language: auto
      2026-03-16 11:59:04 [crawlers.pipelines.item_rules_pipeline] INFO: Setting up ItemRules Pipeline
      2026-03-16 11:59:04 [crawlers.filter_rules.rules_loader] INFO: Loaded rule: invalid_location_for_country.json
      2026-03-16 11:59:04 [crawlers.filter_rules.rules_loader] INFO: Loaded rule: damaged_cars_from_auction_title.json
      2026-03-16 11:59:04 [crawlers.filter_rules.rules_loader] INFO: Loaded rule: puretech_for_country.json
      2026-03-16 11:59:04 [crawlers.filter_rules.rules_loader] INFO: Loaded rule: puretech_for_fr.json
      2026-03-16 11:59:04 [crawlers.filter_rules.rules_loader] INFO: Loaded rule: missing_photos.json
      2026-03-16 11:59:04 [crawlers.filter_rules.rules_loader] INFO: Loaded rule: damaged_from_info.json
      2026-03-16 11:59:04 [crawlers.filter_rules.rules_loader] INFO: Loaded rule: makes_not_allowed.json
      2026-03-16 11:59:04 [crawlers.filter_rules.rules_loader] INFO: Loaded rule: not_operable_from_info.json
      2026-03-16 11:59:04 [crawlers.filter_rules.rules_loader] INFO: Loaded rule: makes_models_not_allowed.json
      2026-03-16 11:59:04 [crawlers.filter_rules.rules_loader] INFO: Loaded rule: keywords_from_title.json
      2026-03-16 11:59:04 [crawlers.filter_rules.rules_loader] INFO: Loaded rule: imported_cars.json
      2026-03-16 11:59:04 [crawlers.filter_rules.rules_loader] INFO: Loaded rule: invalid_currency.json
      2026-03-16 11:59:04 [crawlers.filter_rules.rules_loader] INFO: Loaded rule: missing_mileage.json
      2026-03-16 11:59:04 [crawlers.filter_rules.rules_loader] INFO: Loaded rule: keywords_from_auction_title.json
      2026-03-16 11:59:04 [crawlers.filter_rules.rules_loader] INFO: Loaded rule: invalid_country_of_origin.json
      2026-03-16 11:59:04 [crawlers.filter_rules.rules_loader] INFO: Loaded rule: puretech_for_pt.json
      2026-03-16 11:59:04 [crawlers.filter_rules.rules_loader] INFO: Loaded rule: electric_cars.json
      2026-03-16 11:59:04 [crawlers.filter_rules.rules_loader] INFO: Loaded rule: missing_color.json
      2026-03-16 11:59:04 [crawlers.pipelines.post_to_api] INFO: Setting up PostToApi Pipeline pointing to https://api.alx.dev-cluster.alx.tech/api/command/Alx.Cars.Contracts.Internal.Sourcing.AddListing
      2026-03-16 11:59:04 [scrapy.middleware] INFO: Enabled item pipelines:
      ['crawlers.pipelines.translation_pipeline.TranslationPipeline',
       'crawlers.pipelines.item_rules_pipeline.ItemRulesPipeline',
       'crawlers.pipelines.post_to_api.PostToApiPipeline']
      2026-03-16 11:59:04 [scrapy.core.engine] INFO: Spider opened
      2026-03-16 11:59:04 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
      2026-03-16 11:59:04 [scrapy.extensions.telnet] INFO: Telnet console listening on 127.0.0.1:6023
      2026-03-16 11:59:04 [scrapy.extensions.memusage] INFO: Peak memory usage is 142MiB
      2026-03-16 11:59:04 [scrapy-playwright] INFO: Starting download handler
      2026-03-16 11:59:04 [scrapy-playwright] INFO: Starting download handler
      2026-03-16 11:59:09 [scrapy-playwright] INFO: Launching browser chromium
      2026-03-16 11:59:10 [scrapy-playwright] INFO: Browser chromium launched
      2026-03-16 11:59:10 [scrapy-playwright] DEBUG: Browser context started: 'default' (persistent=False, remote=False)
      2026-03-16 11:59:10 [scrapy-playwright] DEBUG: [Context=default] New page created, page count is 1 (1 for all contexts)
      2026-03-16 11:59:10 [scrapy-playwright] DEBUG: [Context=default] Request: <GET https://quotes.carwow.co.uk/stock_cars> (resource type: document)
    • Tail

       'model': '-Benz E-Class (2013 - 2016)',
       'odometer': 154500,
       'odometer_reading_unit': 'mi',
       'origin_country_code': 'GB',
       'original_photo_count': 16,
       'photos': [{'BlobStorageUrl': 'https://alxdev.blob.core.windows.net/top-deal-listing/listing_4cd63b86-d370-5159-ba7d-7b21f126ca5b/4cd63b86-d370-5159-ba7d-7b21f126ca5b_image_0.jpg',
                   'Extension': 'jpg',
                   'FileSizeInBytes': 2112585,
                   'Height': 6112,
                   'OriginUrl': 'https://carwow-sell-my-car.imgix.net/iirghdxtxrux3cass3f4rntb01gm',
                   'Width': 6112},
                  {'BlobStorageUrl': 'https://alxdev.blob.core.windows.net/top-deal-listing/listing_4cd63b86-d370-5159-ba7d-7b21f126ca5b/4cd63b86-d370-5159-ba7d-7b21f126ca5b_image_1.jpg',
                   'Extension': 'jpg',
                   'FileSizeInBytes': 3250274,
                   'Height': 6112,
                   'OriginUrl': 'https://carwow-sell-my-car.imgix.net/76saaoin53y92pp1w0dlcrdtw1iu',
                   'Width': 6112},
                  {'BlobStorageUrl': 'https://alxdev.blob.core.windows.net/top-deal-listing/listing_4cd63b86-d370-5159-ba7d-7b21f126ca5b/4cd63b86-d370-5159-ba7d-7b21f126ca5b_image_2.jpg',
                   'Extension': 'jpg',
                   'FileSizeInBytes': 3858251,
                   'Height': 6112,
                   'OriginUrl': 'https://carwow-sell-my-car.imgix.net/njunhr0jmrinc9q01vuwt68zww20',
                   'Width': 6112},
                  {'BlobStorageUrl': 'https://alxdev.blob.core.windows.net/top-deal-listing/listing_4cd63b86-d370-5159-ba7d-7b21f126ca5b/4cd63b86-d370-5159-ba7d-7b21f126ca5b_image_3.jpg',
                   'Extension': 'jpg',
                   'FileSizeInBytes': 2165780,
                   'Height': 6112,
                   'OriginUrl': 'https://carwow-sell-my-car.imgix.net/g9nytiu4tw6z80mywgblivo9ey4x',
                   'Width': 6112},
                  {'BlobStorageUrl': 'https://alxdev.blob.core.windows.net/top-deal-listing/listing_4cd63b86-d370-5159-ba7d-7b21f126ca5b/4cd63b86-d370-5159-ba7d-7b21f126ca5b_image_4.jpg',
                   'Extension': 'jpg',
                   'FileSizeInBytes': 3328963,
                   'Height': 6112,
                   'OriginUrl': 'https://carwow-sell-my-car.imgix.net/lm7hl52qqw6j6ip7n2ieyd8bxw3n',
                   'Width': 6112},
                  {'BlobStorageUrl': 'https://alxdev.blob.core.windows.net/top-deal-listing/listing_4cd63b86-d370-5159-ba7d-7b21f126ca5b/4cd63b86-d370-5159-ba7d-7b21f126ca5b_image_5.jpg',
                   'Extension': 'jpg',
                   'FileSizeInBytes': 2554520,
                   'Height': 6112,
                   'OriginUrl': 'https://carwow-sell-my-car.imgix.net/yxb0xbfo2fi0a3affvdpoid06s41',
                   'Width': 6112},
                  {'BlobStorageUrl': 'https://alxdev.blob.core.windows.net/top-deal-listing/listing_4cd63b86-d370-5159-ba7d-7b21f126ca5b/4cd63b86-d370-5159-ba7d-7b21f126ca5b_image_6.jpg',
                   'Extension': 'jpg',
                   'FileSizeInBytes': 3176805,
                   'Height': 6112,
                   'OriginUrl': 'https://carwow-sell-my-car.imgix.net/4wrgeun56t1x7x8rlemx3syxov0r',
                   'Width': 6112},
                  {'BlobStorageUrl': 'https://alxdev.blob.core.windows.net/top-deal-listing/listing_4cd63b86-d370-5159-ba7d-7b21f126ca5b/4cd63b86-d370-5159-ba7d-7b21f126ca5b_image_7.jpg',
                   'Extension': 'jpg',
                   'FileSizeInBytes': 3798287,
                   'Height': 6112,
                   'OriginUrl': 'https://carwow-sell-my-car.imgix.net/auv2jzk2k9pxm0ycxtbyagnchehe',
                   'Width': 6112},
                  {'BlobStorageUrl': 'https://alxdev.blob.core.windows.net/top-deal-listing/listing_4cd63b86-d370-5159-ba7d-7b21f126ca5b/4cd63b86-d370-5159-ba7d-7b21f126ca5b_image_8.jpg',
                   'Extension': 'jpg',
                   'FileSizeInBytes': 1884206,
                   'Height': 6112,
                   'OriginUrl': 'https://carwow-sell-my-car.imgix.net/zcwwqyq7tbmfm5g0cc7evzc4c40x',
                   'Width': 6112},
                  {'BlobStorageUrl': 'https://alxdev.blob.core.windows.net/top-deal-listing/listing_4cd63b86-d370-5159-ba7d-7b21f126ca5b/4cd63b86-d370-5159-ba7d-7b21f126ca5b_image_9.jpg',
                   'Extension': 'jpg',
                   'FileSizeInBytes': 3520465,
                   'Height': 6112,
                   'OriginUrl': 'https://carwow-sell-my-car.imgix.net/l1kliy7d0j7xsgc1lpn4jj0tnbxr',
                   'Width': 6112}],
       'price': 700.0,
       'price_includes_vat': True,
       'registration_date': '2004-03-29',
       'seats_number': 5,
       'seller_name': None,
       'title': 'Mercedes-Benz E-Class (2013 - 2016) E240 Avantgarde 4dr Tip Auto '
                '[2.6]',
       'transmission': 'automatic',
       'trim': 'E240 Avantgarde 4dr Tip Auto [2.6]',
       'vin': 'WDB2110612A549255',
       'year': 2004}
      2026-03-16 12:05:11 [carwow.gb] INFO: Saving data for 12277566: {'created_time': 1773662711.756976, 'last_price_update_time': 1773662711.756988, 'auction_closing_time': 1773675000.0}
      2026-03-16 12:05:11 [scrapy.core.engine] INFO: Closing spider (shutdown)
      2026-03-16 12:05:11 [common.azure_blobstore] INFO: Creating container client for top-deal-listing
      2026-03-16 12:05:11 [common.azure_blobstore] INFO: Container_client: <azure.storage.blob._container_client.ContainerClient object at 0x7f4707e99a50>
      2026-03-16 12:05:11 [common.azure_blobstore] INFO: Creating container if not exists
      2026-03-16 12:05:11 [urllib3.connectionpool] DEBUG: https://alxdev.blob.core.windows.net:443 "PUT /top-deal-listing?restype=container HTTP/1.1" 409 230
      2026-03-16 12:05:11 [common.azure_blobstore] INFO: Container already exists, skipping creation
      2026-03-16 12:05:11 [urllib3.connectionpool] DEBUG: https://alxdev.blob.core.windows.net:443 "PUT /top-deal-listing/listing_746b9f47-0e3d-562f-aeff-1b64859abaaa/746b9f47-0e3d-562f-aeff-1b64859abaaa_image_4.jpg HTTP/1.1" 201 0
      2026-03-16 12:05:11 [crawlers.middlewares.photo_download_middleware] INFO: Image https://carwow-sell-my-car.imgix.net/cpwm8qxu4zjlc2uh647kfaptjj5d saved to cache
      2026-03-16 12:05:11 [crawlers.middlewares.photo_download_middleware] INFO: Downloaded image 4 for item 746b9f47-0e3d-562f-aeff-1b64859abaaa
      2026-03-16 12:05:11 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://carwow-sell-my-car.imgix.net/bohu8j9g2wrzuyck26owe23osd7w> (referer: https://dealers.carwow.co.uk/)
      2026-03-16 12:05:11 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://carwow-sell-my-car.imgix.net/xd2lci6xie9an8bzhqsz4op61eqv> (referer: https://dealers.carwow.co.uk/)
      2026-03-16 12:05:11 [common.azure_blobstore] INFO: Creating container client for top-deal-listing
      2026-03-16 12:05:11 [common.azure_blobstore] INFO: Container_client: <azure.storage.blob._container_client.ContainerClient object at 0x7f47064f1250>
      2026-03-16 12:05:11 [common.azure_blobstore] INFO: Creating container if not exists
      2026-03-16 12:05:11 [urllib3.connectionpool] DEBUG: https://alxdev.blob.core.windows.net:443 "PUT /top-deal-listing?restype=container HTTP/1.1" 409 230
      2026-03-16 12:05:11 [common.azure_blobstore] INFO: Container already exists, skipping creation
      2026-03-16 12:05:11 [urllib3.connectionpool] DEBUG: https://alxdev.blob.core.windows.net:443 "PUT /top-deal-listing/listing_1e0b83dd-3cc0-564a-bb19-fdc6b0e6f58b/1e0b83dd-3cc0-564a-bb19-fdc6b0e6f58b_image_4.jpg HTTP/1.1" 201 0
      2026-03-16 12:05:12 [crawlers.middlewares.photo_download_middleware] INFO: Image https://carwow-sell-my-car.imgix.net/bohu8j9g2wrzuyck26owe23osd7w saved to cache
      2026-03-16 12:05:12 [crawlers.middlewares.photo_download_middleware] INFO: Downloaded image 4 for item 1e0b83dd-3cc0-564a-bb19-fdc6b0e6f58b
      2026-03-16 12:05:12 [common.azure_blobstore] INFO: Creating container client for top-deal-listing
      2026-03-16 12:05:12 [common.azure_blobstore] INFO: Container_client: <azure.storage.blob._container_client.ContainerClient object at 0x7f4707fab990>
      2026-03-16 12:05:12 [common.azure_blobstore] INFO: Creating container if not exists
      2026-03-16 12:05:12 [urllib3.connectionpool] DEBUG: https://alxdev.blob.core.windows.net:443 "PUT /top-deal-listing?restype=container HTTP/1.1" 409 230
      2026-03-16 12:05:12 [common.azure_blobstore] INFO: Container already exists, skipping creation
      2026-03-16 12:05:12 [urllib3.connectionpool] DEBUG: https://alxdev.blob.core.windows.net:443 "PUT /top-deal-listing/listing_1e0b83dd-3cc0-564a-bb19-fdc6b0e6f58b/1e0b83dd-3cc0-564a-bb19-fdc6b0e6f58b_image_3.jpg HTTP/1.1" 201 0
      2026-03-16 12:05:12 [scrapy.crawler] INFO: Received SIGTERM twice, forcing unclean shutdown
      2026-03-16 12:05:12 [crawlers.middlewares.photo_download_middleware] INFO: Image https://carwow-sell-my-car.imgix.net/xd2lci6xie9an8bzhqsz4op61eqv saved to cache
      2026-03-16 12:05:12 [crawlers.middlewares.photo_download_middleware] INFO: Downloaded image 3 for item 1e0b83dd-3cc0-564a-bb19-fdc6b0e6f58b
      2026-03-16 12:05:12 [crawlers.middlewares.id_gen_middleware] DEBUG: Item already has an ID: 1e0b83dd-3cc0-564a-bb19-fdc6b0e6f58b, skipping ID generation
      2026-03-16 12:05:12 [crawlers.middlewares.report_download_middleware] INFO: Skipping car_expert_report download for item 1e0b83dd-3cc0-564a-bb19-fdc6b0e6f58b with scrape type 1
      2026-03-16 12:05:12 [crawlers.middlewares.photo_download_middleware] INFO: All photos downloaded for item 1e0b83dd-3cc0-564a-bb19-fdc6b0e6f58b sending to next pipeline
      2026-03-16 12:05:12 [crawlers.middlewares.monitoring_spider_middleware] INFO: Spider: carwow.gb, Processed item id: 1e0b83dd-3cc0-564a-bb19-fdc6b0e6f58b, identifier: 12264582
      2026-03-16 12:05:12 [crawlers.pipelines.translation_pipeline] INFO: Spider: carwow.gb, Translating item: 1e0b83dd-3cc0-564a-bb19-fdc6b0e6f58b with identifier: 12264582
      2026-03-16 12:05:12 [crawlers.pipelines.item_rules_pipeline] INFO: Spider: carwow.gb, Applying rules to item: 1e0b83dd-3cc0-564a-bb19-fdc6b0e6f58b with identifier: 12264582
      2026-03-16 12:05:12 [crawlers.pipelines.post_to_api] INFO: Spider: carwow.gb, Posting item: 1e0b83dd-3cc0-564a-bb19-fdc6b0e6f58b with identifier: 12264582 to the API
      2026-03-16 12:05:12 [urllib3.connectionpool] DEBUG: Starting new HTTPS connection (1): api.alx.dev-cluster.alx.tech:443
      2026-03-16 12:05:12 [urllib3.connectionpool] DEBUG: https://api.alx.dev-cluster.alx.tech:443 "POST /api/command/Alx.Cars.Contracts.Internal.Sourcing.AddListing HTTP/1.1" 200 None
      2026-03-16 12:05:12 [scrapy.core.scraper] DEBUG: Scraped from <200 https://carwow-sell-my-car.imgix.net/xd2lci6xie9an8bzhqsz4op61eqv>
      {'auction_title': '',
       'c_o_2_emission_value': None,
       'car_expert_report_source_url': None,
       'category': None,
       'color': 'GREY',
       'currency': 'GBP',
       'doors_number': 5,
       'emission_standard': None,
       'engine': '1.6 litres',
       'engine_horse_power': 105,
       'expiration_date': '2026-03-16T15:30:00Z',
       'fuel_type': 'Diesel',
       'id': '1e0b83dd-3cc0-564a-bb19-fdc6b0e6f58b',
       'is_damaged': False,
       'is_operable': True,
       'is_vat_deductible': False,
       'is_vat_included': True,
       'license_plate': 'FW12NHD',
       'link_to_web_offer': 'https://dealers.carwow.co.uk/dealers/listings/12264582',
       'listing': 'auction',
       'location': 'Saltley, Birmingham',
       'make': 'Audi',
       'model': 'A3 Sportback',
       'odometer': 133000,
       'odometer_reading_unit': 'mi',
       'origin_country_code': 'GB',
       'original_photo_count': 8,
       'photos': [{'BlobStorageUrl': 'https://alxdev.blob.core.windows.net/top-deal-listing/listing_1e0b83dd-3cc0-564a-bb19-fdc6b0e6f58b/1e0b83dd-3cc0-564a-bb19-fdc6b0e6f58b_image_0.jpg',
                   'Extension': 'jpg',
                   'FileSizeInBytes': 2411963,
                   'Height': 3000,
                   'OriginUrl': 'https://carwow-sell-my-car.imgix.net/k58an80v3zyawdobz2h7ilm4t56b',
                   'Width': 4000},
                  {'BlobStorageUrl': 'https://alxdev.blob.core.windows.net/top-deal-listing/listing_1e0b83dd-3cc0-564a-bb19-fdc6b0e6f58b/1e0b83dd-3cc0-564a-bb19-fdc6b0e6f58b_image_1.jpg',
                   'Extension': 'jpg',
                   'FileSizeInBytes': 2472682,
                   'Height': 4000,
                   'OriginUrl': 'https://carwow-sell-my-car.imgix.net/pp2h6b343rgp6t96g9251ei2e78c',
                   'Width': 3000},
                  {'BlobStorageUrl': 'https://alxdev.blob.core.windows.net/top-deal-listing/listing_1e0b83dd-3cc0-564a-bb19-fdc6b0e6f58b/1e0b83dd-3cc0-564a-bb19-fdc6b0e6f58b_image_2.jpg',
                   'Extension': 'jpg',
                   'FileSizeInBytes': 2407602,
                   'Height': 3000,
                   'OriginUrl': 'https://carwow-sell-my-car.imgix.net/6u09h922hv00ybn3f7291a2g7wxv',
                   'Width': 4000},
                  {'BlobStorageUrl': 'https://alxdev.blob.core.windows.net/top-deal-listing/listing_1e0b83dd-3cc0-564a-bb19-fdc6b0e6f58b/1e0b83dd-3cc0-564a-bb19-fdc6b0e6f58b_image_3.jpg',
                   'Extension': 'jpg',
                   'FileSizeInBytes': 2958648,
                   'Height': 4000,
                   'OriginUrl': 'https://carwow-sell-my-car.imgix.net/xd2lci6xie9an8bzhqsz4op61eqv',
                   'Width': 3000},
                  {'BlobStorageUrl': 'https://alxdev.blob.core.windows.net/top-deal-listing/listing_1e0b83dd-3cc0-564a-bb19-fdc6b0e6f58b/1e0b83dd-3cc0-564a-bb19-fdc6b0e6f58b_image_4.jpg',
                   'Extension': 'jpg',
                   'FileSizeInBytes': 1490164,
                   'Height': 3000,
                   'OriginUrl': 'https://carwow-sell-my-car.imgix.net/bohu8j9g2wrzuyck26owe23osd7w',
                   'Width': 4000},
                  {'BlobStorageUrl': 'https://alxdev.blob.core.windows.net/top-deal-listing/listing_1e0b83dd-3cc0-564a-bb19-fdc6b0e6f58b/1e0b83dd-3cc0-564a-bb19-fdc6b0e6f58b_image_5.jpg',
                   'Extension': 'jpg',
                   'FileSizeInBytes': 1139666,
                   'Height': 3000,
                   'OriginUrl': 'https://carwow-sell-my-car.imgix.net/slu5p5j0q5i71opgw3b9x9ey5h1q',
                   'Width': 4000},
                  {'BlobStorageUrl': 'https://alxdev.blob.core.windows.net/top-deal-listing/listing_1e0b83dd-3cc0-564a-bb19-fdc6b0e6f58b/1e0b83dd-3cc0-564a-bb19-fdc6b0e6f58b_image_6.jpg',
                   'Extension': 'jpg',
                   'FileSizeInBytes': 2196378,
                   'Height': 3000,
                   'OriginUrl': 'https://carwow-sell-my-car.imgix.net/lqrea0hkhyhclczyxy1057hqdwmh',
                   'Width': 4000},
                  {'BlobStorageUrl': 'https://alxdev.blob.core.windows.net/top-deal-listing/listing_1e0b83dd-3cc0-564a-bb19-fdc6b0e6f58b/1e0b83dd-3cc0-564a-bb19-fdc6b0e6f58b_image_7.jpg',
                   'Extension': 'jpg',
                   'FileSizeInBytes': 2958648,
                   'Height': 4000,
                   'OriginUrl': 'https://carwow-sell-my-car.imgix.net/wkzha91xpo9ay9xpeopa1g04iji4',
                   'Width': 3000}],
       'price': 800.0,
       'price_includes_vat': True,
       'registration_date': '2012-08-20',
       'seats_number': 5,
       'seller_name': None,
       'title': 'Audi A3 Sportback 1.6 TDI SE 5dr',
       'transmission': 'manual',
       'trim': '1.6 TDI SE 5dr',
       'vin': 'WAUZZZ8P9CA157881',
       'year': 2012}
    • Log

      /1/log/utf8/sourcing_v2/carwow.gb/2026-03-16T11_58_59/?job_finished=True

    • Source

      http://scrapyd-0:6800/logs/sourcing_v2/carwow.gb/2026-03-16T11_58_59.log