{
  "repository": "https://github.com/scrapy/scrapy",
  "installed_release": "2.19.0",
  "release_url": "https://pypi.org/project/Scrapy/2.19.0/",
  "wheel_url": "https://files.pythonhosted.org/packages/35/64/8507dcab59f2d4920152020dc348879fd8eed1dd17f152cf65d9fddd3ff2/scrapy-2.19.0-py3-none-any.whl",
  "wheel_sha256": "44c1ad4b008f1976e946c75b2adce0e448cbfe470c584b1b59469abf270e8013",
  "verified_installed_sources": [
    {
      "path": "scrapy/crawler.py",
      "sha256": "b5d249df5e92f3329e9fef460955b8b1657ab6f837805d314c7beee42d0af212"
    },
    {
      "path": "scrapy/spiders/__init__.py",
      "sha256": "3c7ac26b9ceec2f7a6e3a87a73ad297a11c5eaac8cde6c14768365260e8e4b9e"
    },
    {
      "path": "scrapy/settings/default_settings.py",
      "sha256": "e7fd642b2e829b8f8a1cc31e7c87504f7c4de6810f24c61b0894a2ea4f3e764f"
    },
    {
      "path": "scrapy/core/downloader/handlers/http11.py",
      "sha256": "b1b2bb82e71811828cf81c10886dac102625d92ee7ae71e7376d4883eda09750"
    },
    {
      "path": "scrapy/core/downloader/contextfactory.py",
      "sha256": "915374add80adcdfe5f9d62e2d3b70319865bd2b87191fb9e7a42b9e3a9ae817"
    },
    {
      "path": "scrapy/core/downloader/middleware.py",
      "sha256": "05d1f524d93fe4b0283a342804acd047831d7fa15be9e4ff9e52b43f883789f9"
    },
    {
      "path": "scrapy/downloadermiddlewares/redirect.py",
      "sha256": "756c084cbe3b86176e2b413a7ed80158d70b4d1731b1852d576e6dcd9d614992"
    },
    {
      "path": "scrapy/downloadermiddlewares/cookies.py",
      "sha256": "38d77087617dcf0791f713c0e4f79bc2cb1d4551acf0edad8cc606e5a0f1fce2"
    },
    {
      "path": "scrapy/downloadermiddlewares/retry.py",
      "sha256": "27a6b2feeb5d76c468641a12d618c0bbc6e7e0fb7ad71a1c1561fe4715e3a447"
    },
    {
      "path": "scrapy/downloadermiddlewares/robotstxt.py",
      "sha256": "e3b3bc32ee5fb5dae4f52be217ae86908039056067aa2cc969d2d389700bbfa0"
    },
    {
      "path": "scrapy/downloadermiddlewares/httpproxy.py",
      "sha256": "3a0248e71f460a0acf7015b1b59d49124398b679f5f758698ba0729a6a9ef47c"
    },
    {
      "path": "scrapy/downloadermiddlewares/httpcompression.py",
      "sha256": "055c47baf01af4f330f08bac2f82f968030e4b7ce86d40c39235b62b7f641fbd"
    },
    {
      "path": "scrapy/downloadermiddlewares/useragent.py",
      "sha256": "e1a1cf87513424b41ef1fb02cb5be8045212de4d40c3539cdd30879b953f6eb3"
    },
    {
      "path": "scrapy/spidermiddlewares/httperror.py",
      "sha256": "3e1c9b4156c5b47b3fdca94b088c3aebac93d52a7dd0eae62f23464f8ec1305b"
    },
    {
      "path": "scrapy/spidermiddlewares/referer.py",
      "sha256": "f06737f7b87d1dc598bd7a6ebc3fa9b8197ec36754f1332946f4b39297e7a9b2"
    }
  ],
  "deepwiki": "https://deepwiki.com/search/for-a-minimal-python-crawlerpr_c4296abd-da90-4507-b9cb-89b63ca6b927",
  "source_conclusions": [
    "CrawlerProcess with async Spider.start yields one Request; parse/errback yields no further pages.",
    "HTTPERROR_ALLOW_ALL setting retains non-2xx in parse without handle_httpstatus_all request meta, which would disable normal redirect handling.",
    "REDIRECT_MAX_TIMES=3 follows normal HTTP redirects; METAREFRESH_ENABLED=False disables HTML refresh navigation.",
    "ROBOTSTXT_OBEY=False and RETRY_ENABLED=False; HTTPPROXY_ENABLED=False and HttpProxyMiddleware disabled, proxy env removed.",
    "COOKIES_ENABLED=False disables cookie storage/sending and avoids cookie public-suffix fetches; no cross-target state.",
    "Stock HTTP11DownloadHandler uses Twisted HTTP/1.1, without Chrome TLS impersonation. DOWNLOAD_VERIFY_CERTIFICATES=True explicitly enables cert verification.",
    "Middleware response order is reverse priority: observer at 900 records HTTP redirects before RedirectMiddleware 600. Private bodies/logs only; final Spider body is checked after HTTP compression handling."
  ],
  "twisted_connection_recovery": {
    "installed_release": "26.4.0",
    "wheel_url": "https://files.pythonhosted.org/packages/a6/57/bcf4e2370dd218c9aa68a9140a65d86729c73f1d529f7e94786c2766fc72/twisted-26.4.0-py3-none-any.whl",
    "wheel_sha256": "dc25ea0ebf6511c24f03232ee9f4afa54b291c5d897990e3a39cc4d14a1ef4c0",
    "source_path": "twisted/web/client.py",
    "source_sha256": "d62f714b733e0073f892ff9904ec94a5c64c3d9dff3039e4e594c58c1db9bc33",
    "official_wheel_matches_installed": true,
    "finding": "HTTPConnectionPool.retryAutomatically=True can recover one failed idempotent request on a cached persistent connection. Scrapy RetryMiddleware is disabled, but this stock native recovery was not separately disabled or instrumented; observed middleware request count is not an independently verified wire-attempt count."
  }
}
