Scan timing: clone 19.61s · analysis 3.31s · 25.2 MB · GitHub API rate-limit (preflight)
https://github.com/NanmiCoder/MediaCrawler
· scanned 2026-06-05 11:42 UTC (5 days, 11 hours ago)
· 10 languages
365 raw signals (159 security + 206 graph) 11/13 scanners ran 74th percentile · Python · medium (20-100K LoC) System graph score 60 (higher by 17)
Last scanned 5 days, 11 hours ago · v2 · 139 actionable findings from 2 signal sources. 123 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 |
75.0 | 0.15 | 11.25 |
security_score |
100.0 | 0.25 | 25.00 |
testing_score |
63.0 | 0.20 | 12.60 |
documentation_score |
72.0 | 0.15 | 10.80 |
practices_score |
71.0 | 0.15 | 10.65 |
code_quality |
71.0 | 0.10 | 7.10 |
| Overall | 1.00 | 77.4 |
All 1731 nodes from the latest scan, grouped by kind. Each node is a unit the engine identified (file, function, endpoint, table…). Most users won't need this view — it's primarily for debugging the engine's graph extraction or for AI agents that want to enumerate the project structure.
| Label | Layer | Status | Path |
|---|---|---|---|
extract_verification_code |
software | healthy | recv_sms.py:46 |
receive_sms_notification |
software | healthy | recv_sms.py:56 |
not_found |
software | healthy | recv_sms.py:83 |
create_crawler |
software | healthy | main.py:62 |
_flush_excel_if_needed |
software | healthy | main.py:73 |
_generate_wordcloud_if_needed |
software | healthy | main.py:86 |
main |
software | healthy | main.py:100 |
async_cleanup |
software | dead | main.py:119 |
_force_stop |
software | healthy | main.py:144 |
start |
software | healthy | base/base_crawler.py:29 |
search |
software | healthy | base/base_crawler.py:36 |
launch_browser |
software | healthy | base/base_crawler.py:43 |
launch_browser_with_cdp |
software | healthy | base/base_crawler.py:54 |
begin |
software | healthy | base/base_crawler.py:70 |
login_by_qrcode |
software | healthy | base/base_crawler.py:74 |
login_by_mobile |
software | healthy | base/base_crawler.py:78 |
login_by_cookies |
software | healthy | base/base_crawler.py:82 |
store_content |
software | healthy | base/base_crawler.py:89 |
store_comment |
software | healthy | base/base_crawler.py:93 |
store_creator |
software | healthy | base/base_crawler.py:99 |
store_image |
software | healthy | base/base_crawler.py:107 |
store_video |
software | healthy | base/base_crawler.py:115 |
request |
software | healthy | base/base_crawler.py:122 |
update_cookies |
software | healthy | base/base_crawler.py:126 |
__init__ |
software | healthy | media_platform/weibo/client.py:51 |
request |
software | healthy | media_platform/weibo/client.py:73 |
get |
software | healthy | media_platform/weibo/client.py:104 |
post |
software | healthy | media_platform/weibo/client.py:114 |
pong |
software | healthy | media_platform/weibo/client.py:118 |
update_cookies |
software | healthy | media_platform/weibo/client.py:134 |
get_note_by_keyword |
software | healthy | media_platform/weibo/client.py:152 |
get_note_comments |
software | healthy | media_platform/weibo/client.py:174 |
get_note_all_comments |
software | healthy | media_platform/weibo/client.py:195 |
get_comments_all_sub_comments |
software | healthy | media_platform/weibo/client.py:231 |
get_note_info_by_id |
software | healthy | media_platform/weibo/client.py:258 |
get_note_image |
software | healthy | media_platform/weibo/client.py:280 |
get_creator_container_info |
software | dead | media_platform/weibo/client.py:308 |
get_creator_info_by_id |
software | healthy | media_platform/weibo/client.py:326 |
get_notes_by_creator |
software | healthy | media_platform/weibo/client.py:346 |
get_all_notes_by_creator_id |
software | healthy | media_platform/weibo/client.py:372 |
__init__ |
software | healthy | media_platform/weibo/core.py:60 |
start |
software | healthy | media_platform/weibo/core.py:69 |
search |
software | healthy | media_platform/weibo/core.py:137 |
get_specified_notes |
software | healthy | media_platform/weibo/core.py:192 |
get_note_info_task |
software | healthy | media_platform/weibo/core.py:205 |
batch_get_notes_comments |
software | healthy | media_platform/weibo/core.py:228 |
get_note_comments |
software | healthy | media_platform/weibo/core.py:246 |
get_note_images |
software | healthy | media_platform/weibo/core.py:272 |
get_creators_and_notes |
software | healthy | media_platform/weibo/core.py:303 |
save_notes_with_full_text |
software | dead | media_platform/weibo/core.py:320 |
Showing first 50 of this kind. Full payload available via the JSON button at the top of the page.
| Label | Layer | Status | Path |
|---|---|---|---|
SmsNotification |
software | healthy | recv_sms.py:38 |
CrawlerFactory |
software | healthy | main.py:50 |
AbstractCrawler |
software | healthy | base/base_crawler.py:26 |
AbstractLogin |
software | healthy | base/base_crawler.py:67 |
AbstractStore |
software | healthy | base/base_crawler.py:86 |
AbstractStoreImage |
software | healthy | base/base_crawler.py:103 |
AbstractStoreVideo |
software | healthy | base/base_crawler.py:111 |
AbstractApiClient |
software | healthy | base/base_crawler.py:119 |
SearchType |
software | healthy | media_platform/weibo/field.py:28 |
DataFetchError |
software | healthy | media_platform/weibo/exception.py:29 |
IPBlockError |
software | healthy | media_platform/weibo/exception.py:33 |
WeiboClient |
software | healthy | media_platform/weibo/client.py:49 |
WeiboCrawler |
software | healthy | media_platform/weibo/core.py:54 |
WeiboLogin |
software | healthy | media_platform/weibo/login.py:40 |
SearchTime |
software | healthy | media_platform/zhihu/field.py:27 |
SearchType |
software | healthy | media_platform/zhihu/field.py:40 |
SearchSort |
software | healthy | media_platform/zhihu/field.py:50 |
DataFetchError |
software | healthy | media_platform/zhihu/exception.py:24 |
IPBlockError |
software | healthy | media_platform/zhihu/exception.py:28 |
ForbiddenError |
software | healthy | media_platform/zhihu/exception.py:31 |
ZhiHuClient |
software | healthy | media_platform/zhihu/client.py:47 |
ZhihuCrawler |
software | healthy | media_platform/zhihu/core.py:52 |
ZhihuExtractor |
software | healthy | media_platform/zhihu/help.py:55 |
ZhiHuLogin |
software | healthy | media_platform/zhihu/login.py:36 |
SearchOrderType |
software | healthy | media_platform/bilibili/field.py:29 |
CommentOrderType |
software | healthy | media_platform/bilibili/field.py:46 |
DataFetchError |
software | healthy | media_platform/bilibili/exception.py:29 |
IPBlockError |
software | healthy | media_platform/bilibili/exception.py:33 |
BilibiliClient |
software | healthy | media_platform/bilibili/client.py:47 |
BilibiliCrawler |
software | healthy | media_platform/bilibili/core.py:57 |
BilibiliSign |
software | healthy | media_platform/bilibili/help.py:35 |
BilibiliLogin |
software | healthy | media_platform/bilibili/login.py:40 |
SearchChannelType |
software | healthy | media_platform/douyin/field.py:24 |
SearchSortType |
software | healthy | media_platform/douyin/field.py:32 |
PublishTimeType |
software | healthy | media_platform/douyin/field.py:38 |
DataFetchError |
software | healthy | media_platform/douyin/exception.py:24 |
IPBlockError |
software | healthy | media_platform/douyin/exception.py:28 |
DouYinClient |
software | healthy | media_platform/douyin/client.py:43 |
DouYinCrawler |
software | healthy | media_platform/douyin/core.py:49 |
DouYinLogin |
software | healthy | media_platform/douyin/login.py:37 |
FeedType |
software | healthy | media_platform/xhs/field.py:25 |
NoteType |
software | healthy | media_platform/xhs/field.py:50 |
SearchSortType |
software | healthy | media_platform/xhs/field.py:55 |
SearchNoteType |
software | healthy | media_platform/xhs/field.py:65 |
Note |
software | healthy | media_platform/xhs/field.py:75 |
DataFetchError |
software | healthy | media_platform/xhs/exception.py:24 |
IPBlockError |
software | healthy | media_platform/xhs/exception.py:28 |
NoteNotFoundError |
software | healthy | media_platform/xhs/exception.py:32 |
XiaoHongShuClient |
software | healthy | media_platform/xhs/client.py:45 |
XiaoHongShuExtractor |
software | healthy | media_platform/xhs/extractor.py:27 |
Showing first 50 of this kind. Full payload available via the JSON button at the top of the page.
| Label | Layer | Status | Path |
|---|---|---|---|
README.md |
software | healthy | README.md |
README_en.md |
software | healthy | README_en.md |
package.json |
software | healthy | package.json |
recv_sms.py |
software | healthy | recv_sms.py |
package-lock.json |
software | healthy | package-lock.json |
.pre-commit-config.yaml |
software | healthy | .pre-commit-config.yaml |
README_es.md |
software | healthy | README_es.md |
var.py |
software | warning | var.py |
.env.example |
software | healthy | .env.example |
pyproject.toml |
software | healthy | pyproject.toml |
main.py |
software | healthy | main.py |
requirements.txt |
software | healthy | requirements.txt |
__init__.py |
software | healthy | base/__init__.py |
base_crawler.py |
software | healthy | base/base_crawler.py |
__init__.py |
software | healthy | media_platform/__init__.py |
field.py |
software | healthy | media_platform/weibo/field.py |
exception.py |
software | healthy | media_platform/weibo/exception.py |
client.py |
software | healthy | media_platform/weibo/client.py |
__init__.py |
software | healthy | media_platform/weibo/__init__.py |
core.py |
software | healthy | media_platform/weibo/core.py |
help.py |
software | healthy | media_platform/weibo/help.py |
login.py |
software | healthy | media_platform/weibo/login.py |
field.py |
software | healthy | media_platform/zhihu/field.py |
exception.py |
software | healthy | media_platform/zhihu/exception.py |
client.py |
software | healthy | media_platform/zhihu/client.py |
__init__.py |
software | healthy | media_platform/zhihu/__init__.py |
core.py |
software | healthy | media_platform/zhihu/core.py |
help.py |
software | healthy | media_platform/zhihu/help.py |
login.py |
software | healthy | media_platform/zhihu/login.py |
field.py |
software | healthy | media_platform/bilibili/field.py |
exception.py |
software | healthy | media_platform/bilibili/exception.py |
client.py |
software | healthy | media_platform/bilibili/client.py |
__init__.py |
software | healthy | media_platform/bilibili/__init__.py |
core.py |
software | healthy | media_platform/bilibili/core.py |
help.py |
software | healthy | media_platform/bilibili/help.py |
login.py |
software | healthy | media_platform/bilibili/login.py |
field.py |
software | healthy | media_platform/douyin/field.py |
exception.py |
software | healthy | media_platform/douyin/exception.py |
client.py |
software | healthy | media_platform/douyin/client.py |
__init__.py |
software | healthy | media_platform/douyin/__init__.py |
core.py |
software | healthy | media_platform/douyin/core.py |
help.py |
software | healthy | media_platform/douyin/help.py |
login.py |
software | healthy | media_platform/douyin/login.py |
field.py |
software | healthy | media_platform/xhs/field.py |
exception.py |
software | healthy | media_platform/xhs/exception.py |
client.py |
software | healthy | media_platform/xhs/client.py |
xhs_sign.py |
software | healthy | media_platform/xhs/xhs_sign.py |
__init__.py |
software | healthy | media_platform/xhs/__init__.py |
extractor.py |
software | healthy | media_platform/xhs/extractor.py |
playwright_sign.py |
software | healthy | media_platform/xhs/playwright_sign.py |
Showing first 50 of this kind. Full payload available via the JSON button at the top of the page.
| Label | Layer | Status | Path |
|---|---|---|---|
BilibiliVideo |
data | healthy | database/models.py |
BilibiliVideoComment |
data | healthy | database/models.py |
BilibiliUpInfo |
data | healthy | database/models.py |
BilibiliContactInfo |
data | healthy | database/models.py |
BilibiliUpDynamic |
data | healthy | database/models.py |
DouyinAweme |
data | healthy | database/models.py |
DouyinAwemeComment |
data | healthy | database/models.py |
DyCreator |
data | healthy | database/models.py |
KuaishouVideo |
data | healthy | database/models.py |
KuaishouVideoComment |
data | healthy | database/models.py |
WeiboNote |
data | healthy | database/models.py |
WeiboNoteComment |
data | healthy | database/models.py |
WeiboCreator |
data | healthy | database/models.py |
XhsCreator |
data | healthy | database/models.py |
XhsNote |
data | healthy | database/models.py |
XhsNoteComment |
data | healthy | database/models.py |
TiebaNote |
data | healthy | database/models.py |
TiebaComment |
data | healthy | database/models.py |
TiebaCreator |
data | healthy | database/models.py |
ZhihuContent |
data | healthy | database/models.py |
ZhihuComment |
data | healthy | database/models.py |
ZhihuCreator |
data | healthy | database/models.py |
bilibili_video |
data | healthy | database/models.py |
bilibili_video_comment |
data | healthy | database/models.py |
bilibili_up_info |
data | healthy | database/models.py |
bilibili_contact_info |
data | healthy | database/models.py |
bilibili_up_dynamic |
data | healthy | database/models.py |
douyin_aweme |
data | healthy | database/models.py |
douyin_aweme_comment |
data | healthy | database/models.py |
dy_creator |
data | healthy | database/models.py |
kuaishou_video |
data | healthy | database/models.py |
kuaishou_video_comment |
data | healthy | database/models.py |
weibo_note |
data | healthy | database/models.py |
weibo_note_comment |
data | healthy | database/models.py |
weibo_creator |
data | healthy | database/models.py |
xhs_creator |
data | healthy | database/models.py |
xhs_note |
data | healthy | database/models.py |
xhs_note_comment |
data | healthy | database/models.py |
tieba_note |
data | healthy | database/models.py |
tieba_comment |
data | healthy | database/models.py |
tieba_creator |
data | healthy | database/models.py |
zhihu_content |
data | healthy | database/models.py |
zhihu_comment |
data | healthy | database/models.py |
zhihu_creator |
data | healthy | database/models.py |
| Label | Layer | Status | Path |
|---|---|---|---|
base |
software | healthy | base |
media_platform |
software | healthy | media_platform |
weibo |
software | healthy | media_platform/weibo |
zhihu |
software | healthy | media_platform/zhihu |
bilibili |
software | healthy | media_platform/bilibili |
douyin |
software | healthy | media_platform/douyin |
xhs |
software | healthy | media_platform/xhs |
tieba |
software | healthy | media_platform/tieba |
test_data |
software | healthy | media_platform/tieba/test_data |
kuaishou |
software | healthy | media_platform/kuaishou |
config |
software | healthy | config |
tests |
software | healthy | tests |
api |
software | healthy | api |
webui |
software | healthy | api/webui |
assets |
software | healthy | api/webui/assets |
services |
software | healthy | api/services |
schemas |
software | healthy | api/schemas |
routers |
software | healthy | api/routers |
test |
software | healthy | test |
docs |
software | healthy | docs |
constant |
software | healthy | constant |
proxy |
software | healthy | proxy |
providers |
software | healthy | proxy/providers |
cache |
software | healthy | cache |
database |
software | healthy | database |
cmd_arg |
software | healthy | cmd_arg |
libs |
software | healthy | libs |
tools |
software | healthy | tools |
store |
software | healthy | store |
weibo |
software | healthy | store/weibo |
zhihu |
software | healthy | store/zhihu |
bilibili |
software | healthy | store/bilibili |
douyin |
software | healthy | store/douyin |
xhs |
software | healthy | store/xhs |
tieba |
software | healthy | store/tieba |
kuaishou |
software | healthy | store/kuaishou |
model |
software | healthy | model |
.github |
software | healthy | .github |
ISSUE_TEMPLATE |
software | healthy | .github/ISSUE_TEMPLATE |
workflows |
software | healthy | .github/workflows |
| Label | Layer | Status | Path |
|---|---|---|---|
POST / |
api | healthy | recv_sms.py |
GET / |
api | healthy | recv_sms.py |
GET /api/health |
api | healthy | api/main.py |
GET /api/env/check |
api | healthy | api/main.py |
GET /api/config/platforms |
api | healthy | api/main.py |
GET /api/config/options |
api | healthy | api/main.py |
POST /start |
api | healthy | api/routers/crawler.py |
POST /stop |
api | healthy | api/routers/crawler.py |
GET /status |
api | healthy | api/routers/crawler.py |
GET /logs |
api | healthy | api/routers/crawler.py |
GET /files |
api | healthy | api/routers/data.py |
GET /files/{file_path:path} |
api | healthy | api/routers/data.py |
GET /download/{file_path:path} |
api | healthy | api/routers/data.py |
GET /stats |
api | healthy | api/routers/data.py |
POST /crawler/start |
api | healthy | api/webui/assets/index-DvClRayq.js |
POST /crawler/stop |
api | healthy | api/webui/assets/index-DvClRayq.js |
GET /crawler/status |
api | healthy | api/webui/assets/index-DvClRayq.js |
GET /crawler/logs |
api | healthy | api/webui/assets/index-DvClRayq.js |
GET /data/files |
api | healthy | api/webui/assets/index-DvClRayq.js |
GET /data/files/ |
api | healthy | api/webui/assets/index-DvClRayq.js |
GET /data/stats |
api | healthy | api/webui/assets/index-DvClRayq.js |
GET /config/platforms |
api | healthy | api/webui/assets/index-DvClRayq.js |
GET /config/options |
api | healthy | api/webui/assets/index-DvClRayq.js |
GET /env/check |
api | healthy | api/webui/assets/index-DvClRayq.js |
| Label | Layer | Status | Path |
|---|---|---|---|
127.0.0.1 |
network | healthy | .env.example |
4.11.0.86 |
network | healthy | pyproject.toml |
128.0.0.0 |
network | healthy | media_platform/zhihu/core.py |
125.0.0.0 |
network | healthy | media_platform/douyin/client.py |
126.0.0.0 |
network | healthy | media_platform/xhs/core.py |
137.0.0.0 |
network | healthy | media_platform/xhs/core.py |
192.168.1.1 |
network | healthy | test/test_proxy_ip_pool.py |
192.168.1.2 |
network | healthy | test/test_proxy_ip_pool.py |
192.168.1.3 |
network | healthy | test/test_proxy_ip_pool.py |
192.168.1.4 |
network | healthy | test/test_proxy_ip_pool.py |
192.168.1.5 |
network | healthy | test/test_proxy_ip_pool.py |
192.168.1.6 |
network | healthy | test/test_proxy_ip_pool.py |
192.168.1.7 |
network | healthy | test/test_proxy_ip_pool.py |
123.0.0.0 |
network | healthy | libs/douyin.js |
114.0.0.0 |
network | healthy | tools/crawler_util.py |
104.0.0.0 |
network | healthy | tools/crawler_util.py |
121.0.0.0 |
network | healthy | tools/crawler_util.py |
120.0.0.0 |
network | healthy | tools/crawler_util.py |
117.0.0.0 |
network | healthy | tools/crawler_util.py |
115.0.0.0 |
network | healthy | tools/crawler_util.py |
113.0.0.0 |
network | healthy | tools/crawler_util.py |
110.0.0.0 |
network | healthy | tools/crawler_util.py |
| Label | Layer | Status | Path |
|---|---|---|---|
password_literal::test/test_proxy_ip_pool.py |
security | healthy | test/test_proxy_ip_pool.py |
password_literal::test/test_proxy_ip_pool.py |
security | healthy | test/test_proxy_ip_pool.py |
password_literal::test/test_proxy_ip_pool.py |
security | healthy | test/test_proxy_ip_pool.py |
password_literal::test/test_proxy_ip_pool.py |
security | healthy | test/test_proxy_ip_pool.py |
password_literal::test/test_proxy_ip_pool.py |
security | healthy | test/test_proxy_ip_pool.py |
password_literal::test/test_proxy_ip_pool.py |
security | healthy | test/test_proxy_ip_pool.py |
password_literal::test/test_proxy_ip_pool.py |
security | healthy | test/test_proxy_ip_pool.py |
| Label | Layer | Status | Path |
|---|---|---|---|
redis |
data | healthy | recv_sms.py |
mysql |
data | healthy | .env.example |
mongodb |
data | healthy | .env.example |
postgresql |
data | healthy | .env.example |
postgres |
data | healthy | .env.example |
sqlite |
data | healthy | main.py |
| Label | Layer | Status | Path |
|---|---|---|---|
port:8000 |
network | healthy | recv_sms.py |
port:9222 |
network | healthy | config/base_config.py |
port:8080 |
network | healthy | api/main.py |
| Label | Layer | Status | Path |
|---|---|---|---|
build |
cicd | healthy | .github/workflows/deploy.yml |
deploy |
cicd | healthy | .github/workflows/deploy.yml |
| Label | Layer | Status | Path |
|---|---|---|---|
repobility-clone-qadwslaj |
software | healthy | /tmp/repobility-clone-qadwslaj |
| Label | Layer | Status | Path |
|---|---|---|---|
gpu (detected) |
hardware | healthy | tools/browser_launcher.py |
| Label | Layer | Status | Path |
|---|---|---|---|
/ |
frontend | healthy | api/webui/assets/index-DvClRayq.js |
| Label | Layer | Status | Path |
|---|---|---|---|
auth::media_platform/weibo/login.py |
security | healthy | media_platform/weibo/login.py |
| Label | Layer | Status | Path |
|---|---|---|---|
gha::deploy |
cicd | healthy | .github/workflows/deploy.yml |
This page is publicly accessible at:
https://repobility.com/scan/0d236f0c-360d-4752-8c2f-e650610910e6/
To check status programmatically (no auth required):
curl -s https://repobility.com/api/v1/public/scan/0d236f0c-360d-4752-8c2f-e650610910e6/
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.