Scan timing: clone 2.94s · analysis 51.7s · 4.6 MB · GitHub API rate-limit (preflight)
https://github.com/scrapy/scrapy
· scanned 2026-06-05 09:27 UTC (5 days, 17 hours ago)
· 10 languages
438 raw signals (208 security + 230 graph) 64th percentile · Python · medium (20-100K LoC) System graph score 74 (lower by 2)
Last scanned 5 days, 17 hours ago · v2 · 182 actionable findings from 2 signal sources. 140 repeated signals grouped for readability. Security checks, system graph analysis, and verified AI-agent feedback are merged into one review queue.
| Component | Sub-score | Weight | Contribution |
|---|---|---|---|
structure_score |
60.0 | 0.15 | 9.00 |
security_score |
46.0 | 0.25 | 11.50 |
testing_score |
100.0 | 0.20 | 20.00 |
documentation_score |
94.0 | 0.15 | 14.10 |
practices_score |
70.0 | 0.15 | 10.50 |
code_quality |
69.3 | 0.10 | 6.93 |
| Overall | 1.00 | 72.0 |
Showing 119 of 182 actionable findings. 322 raw detector signals were grouped into reader-sized issues. Click TP / FP to vote on a finding's accuracy — votes adjust the confidence weighting and improve detection across the platform.
scrapy/squeues.py:152
scrapy/extensions/spiderstate.py:44
scrapy/extensions/spiderstate.py:44
tests/keys/example-com.key.pem:1tests/keys/localhost.ip.key:1tests/keys/mitmproxy-ca.pem:1scrapy/pqueues.py:404scrapy/utils/asyncio.py:114tests/test_settings/__init__.py:371scrapy/utils/console.py:137
scrapy/commands/genspider.py:123
scrapy/commands/edit.py:48
scrapy/commands/edit.py:48
scrapy/core/http2/agent.py:156scrapy/pipelines/images.py:248scrapy/utils/request.py:134scrapy/exporters.py:49, 50, 53, 54, 83, 85, 87, 89, +10 more (18 hits)scrapy/mail.py:159, 162, 163, 210 (4 hits)scrapy/statscollectors.py:97, 109, 110 (3 hits)docs/requirements.txt
.github/workflows/tests-macos.yml:44, 48 (4 hits).github/workflows/tests-ubuntu.yml:107, 111 (4 hits).github/workflows/tests-windows.yml:71, 75 (4 hits).github/workflows/publish.yml:29 (2 hits).github/workflows/checks.yml:58.github/workflows/checks.yml:41, 44, 57 (4 hits).github/workflows/tests-macos.yml:30, 33 (3 hits).github/workflows/tests-ubuntu.yml:87, 90 (3 hits).github/workflows/tests-windows.yml:57, 60 (3 hits).github/workflows/auto-close-llm-pr.yml:14 (2 hits).github/workflows/publish.yml:21, 22 (2 hits)docs/requirements.txt
.pre-commit-config.yaml:8, 14, 20, 25, 29 (5 hits)docs/requirements.txt:144, 146, 156 (3 hits)docs/requirements.txt
docs/requirements.txt
docs/requirements.txt
docs/requirements.txt
scrapy/shell.py:168
Eval used
scrapy/utils/engine.py:35
Eval used
scrapy/commands/genspider.py:123
scrapy/extensions/spiderstate.py:44
scrapy/utils/ssl.py:51
scrapy/utils/ssl.py:26
scrapy/contracts/__init__.py:48, 78, 131, 187 (4 hits)scrapy/utils/defer.py:154, 360, 379, 440 (4 hits)scrapy/core/spidermw.py:96, 110, 226 (3 hits)scrapy/core/scraper.py:258, 290 (2 hits)scrapy/core/downloader/__init__.py:259scrapy/core/downloader/middleware.py:83scrapy/extensions/httpcache.py:418scrapy/pipelines/files.py:416docs/requirements.txt
docs/requirements.txt:125
docs/requirements.txt:178
.github/workflows/publish.yml
CI/CD securitySupply chainGithub actions
scrapy/pipelines/files.py:249
Weak hash
tests/AsyncCrawlerProcess/asyncio_enabled_reactor_same_loop.py:10, 11 (2 hits)tests/CrawlerProcess/asyncio_enabled_reactor.py:4, 38 (2 hits)scrapy/http/response/text.py:166tests/AsyncCrawlerProcess/asyncio_custom_loop_custom_settings_same.py:1tests/AsyncCrawlerProcess/asyncio_enabled_reactor.py:25tests/AsyncCrawlerProcess/asyncio_enabled_reactor_different_loop.py:9tests/AsyncCrawlerRunner/custom_loop_same.py:2tests/AsyncCrawlerRunner/multi_seq.py:2docs/requirements.txt
docs/requirements.txt:15
docs/requirements.txt:34
docs/requirements.txt:39
docs/requirements.txt:49
docs/requirements.txt:76
docs/requirements.txt:98
docs/requirements.txt:106
docs/requirements.txt:108
docs/requirements.txt:112
docs/requirements.txt:121
docs/requirements.txt:127
docs/requirements.txt:188
docs/requirements.txt:194
repo-level (13 hits)repo-level (4 hits)repo-level (2 hits)scrapy/utils/deprecate.py:16
docs/_ext/scrapydocs.py:43
docs/_ext/scrapydocs.py:148
scrapy/utils/defer.py:47
scrapy/utils/defer.py:68
docs/_ext/scrapydocs.py:128
scrapy/utils/log.py:239
extras/qps-bench-server.py:21
scrapy/utils/benchserver.py:12
scrapy/signalmanager.py:111
scrapy/commands/parse.py:132
scrapy/shell.py:310
docs/_ext/scrapydocs.py:28
docs/_ext/scrapydocs.py:140
scrapy/utils/signal.py:104
docs/_ext/scrapyfixautodoc.py:12
scrapy/utils/misc.py:138
scrapy/utils/defer.py:298
scrapy/utils/defer.py:317
docs/_ext/scrapydocs.py:99
docs/_ext/scrapydocs.py:156
scrapy/commands/parse.py:276
scrapy/commands/__init__.py:40
docs/_ext/scrapydocs.py:164
docs/_ext/scrapyfixautodoc.py:19
docs/_ext/scrapydocs.py:132
docs/_ext/scrapydocs.py:115
This page is publicly accessible at:
https://repobility.com/scan/9db5f11e-57f3-477a-9bb0-dfae01c72bf5/
To check status programmatically (no auth required):
curl -s https://repobility.com/api/v1/public/scan/9db5f11e-57f3-477a-9bb0-dfae01c72bf5/
Important — please don't re-submit the same URL repeatedly. The submission endpoint is idempotent: re-submitting the same git URL returns this same scan_token, not a new one. To re-scan this repo, sign up free and use the dashboard.