mrkeyoor.com_
Mon 09 Nov 01:51 UTC
Dataevaluationupdated 04 Oct 2026

MediaCrawler review

MediaCrawler is a Chinese-first Python crawler for public posts, creator pages, and comments from seven Chinese social platforms. An English README exists, though some setup details lag the Chinese documentation. It uses a logged-in browser session to obtain request signatures and saves results to files or databases.

+762stars / 7d
Verdict

Our MediaCrawler run installed 269 npm packages in 21 seconds, but it did not run the Python crawler or its tests, so the clean audit is evidence about the docs toolchain rather than the collector. Use it for supervised, non-commercial research when its seven supported platforms match your target. The license alone makes it the wrong foundation for a commercial data service.

We ran it

Lab card: what happened when we ran MediaCrawlerScreenshot of MediaCrawler (nanmicoder.github.io/MediaCrawler)
Install✓ · 21s269 packages · 233 MB
Buildn/ano build script
Testsn/ano test script
Known vulns00 critical · 0 high · 0 moderate · 0 low (npm audit)
Repo347 files~37,189 lines of source · 25.8 MB · 1 CI workflows · tests dir

Answers from our run

Does MediaCrawler build from source?

Dependencies installed in 21 seconds (269 packages), and the project has no separate build step. We cloned commit 380b426 into a clean Debian container with 3 CPUs and no project-specific setup.

Does MediaCrawler have tests you can run?

Not through a standard command: the project exposes no test script or target that our harness could run.

Does MediaCrawler have known vulnerabilities in its dependencies?

npm audit found none in the dependency tree at the time of our run.

Who should not use MediaCrawler?

Companies building a paid or internal commercial data product: the license limits use to non-commercial learning and research and forbids large-scale crawling.

What are the alternatives to MediaCrawler?

Scrapling, Crawlee, yt-dlp. Our MediaCrawler run installed 269 npm packages in 21 seconds, but it did not run the Python crawler or its tests, so the clean audit is evidence about the docs toolchain rather than the collector.

Setup2/521-second npm install; crawler still needs Python, Chrome, and login
Docs3/5English guide exists, but it trails the current Chinese instructions
Community4/566,151 stars and an October 3 push, with 164 issues open
Maturity3/5Seven connectors and many outputs, but no published GitHub release

Who it’s for

Researchers collecting public Xiaohongshu, Douyin, Kuaishou, Bilibili, Weibo, Tieba, or Zhihu data for non-commercial study.
Python developers who can supervise a Chrome login and adjust per-platform configuration when a site changes.
Analysts who want CSV, JSON, JSONL, Excel, SQLite, or MySQL output without writing seven separate collectors.

Who it’s NOT for

Companies building a paid or internal commercial data product: the license limits use to non-commercial learning and research and forbids large-scale crawling.
Teams that need an unattended headless service: the recommended Chrome 144 CDP path asks a person to enable remote debugging, accept a browser prompt, and complete login.
English-only operators who expect one current setup guide: the English README still describes Playwright installation and older Python guidance that differ from the Chinese README and current pyproject.
Workflows that depend on Xiaohongshu creator pages working without investigation: open issue 985 reports a creator crawl ending on a JSON parse error after a successful login.

Setup reality

Our sandbox installed commit 380b426's npm path in 21 seconds, adding 269 packages and using 233 MB. The root package had no generic build or test target, so both steps were skipped. Npm audit found 0 known vulnerabilities across all severity levels.

That npm result covers the documentation toolchain, not the Python crawler. Running the crawler requires Python 3.11 or newer, uv, Node.js 16 or newer, and a logged-in browser. The recommended route connects to Chrome 144 or newer through CDP on port 9222; standard Playwright mode needs its browser driver.

The 25.8 MB checkout held 347 files and about 37,189 source lines. There is 1 CI workflow and a tests directory, but our npm-selected run did not execute that Python suite. No Dockerfile is provided, and platform logins, cookies, proxy choices, and storage configuration remain yours to operate.

Seven platforms share one browser-backed workflow

MediaCrawler collects public posts, creator pages, and comments from Xiaohongshu, Douyin, Kuaishou, Bilibili, Weibo, Tieba, and Zhihu. Instead of reimplementing each site's signing scheme, it keeps a logged-in browser context and evaluates JavaScript there to obtain request parameters. That is a practical choice for personal research because the browser already holds the login state. It also means the crawler inherits every platform change that affects pages, cookies, signatures, or account checks.

The output side is unusually flexible for a research repo. Records can go to CSV, JSON, JSONL, Excel, SQLite, or MySQL. Media downloads cover 5 of the 7 listed platforms, with Bilibili using ffmpeg for its highest-quality DASH path and falling back to a direct MP4 route when ffmpeg is missing. Comment collection is disabled by default, so a first successful crawl does not mean every advertised data type was collected.

What happened when we ran it

Our sandbox installed commit 380b426's npm dependencies in 21 seconds. It pulled 269 packages and occupied 233 MB on a fresh Debian container with 3 CPUs, 8 GB of RAM, Node 22, no secrets, and no elevated privileges. Npm audit reported 0 known vulnerabilities: 0 critical, high, moderate, or low.

The root package.json did not define a generic build script or test script, so the harness skipped both steps. This matters because MediaCrawler is primarily a Python application, while the npm package at the repository root contains VitePress documentation commands. Our run therefore proved that the Node documentation dependency install worked. It did not prove that the Python crawler starts, that a browser can log in, or that any of the 7 platform connectors return data.

The checkout itself contained 347 files, about 37,189 lines of source, and used 25.8 MB. We found 1 CI workflow, no Dockerfile, and a tests directory. Since the selected npm path had no test target, none of those Python tests ran in our sandbox. Treat the absent test result as an unmeasured part of this review, not as a passing suite.

Chrome 144 and a live login keep an operator in the loop

The current Chinese README recommends Python 3.11 or newer with uv, plus Node.js 16 or newer. Its default route connects to an existing Chrome 144 or newer instance through the Chrome DevTools Protocol on port 9222. You enable remote debugging, start the crawl, accept Chrome's confirmation dialog within 60 seconds, and complete the platform login. Standard Playwright mode is available, but then you must install its browser driver.

That flow is friendlier to account state than starting with an empty browser profile, yet it is awkward on a remote worker. Cookies become operational secrets. A blocked account or changed confirmation flow can stop a scheduled job before collection begins. There is no Dockerfile to encode Chrome, Python, uv, Node, and optional ffmpeg into one maintained image, so anyone turning this into a repeatable service has to build that packaging.

The English guide exists, but the Chinese guide is the source to trust

English documentation covers the supported platforms, commands, WebUI, output formats, and login idea. It is useful enough to understand the project. Several details no longer match the Chinese README or current pyproject, though: the English native-venv section mentions Python 3.9.6, while pyproject requires Python 3.11 or newer, and its Playwright instructions do not reflect the newer default CDP wording.

The WebUI adds another two-process setup during development: a FastAPI service on port 8080 and a Vite server on port 5173. Production assets can be built into the API package, but our measured root npm path had no generic build target and did not exercise that webui subdirectory. English-only teams should compare both READMEs before turning any command into automation.

The non-commercial license rules out a business deployment

The repository's custom Non-Commercial Learning License 1.1 permits use, copying, modification, and merging for non-commercial learning. It prohibits commercial use without written consent and also bars large-scale crawling or activity that disrupts a platform. Those are product constraints, not a minor legal footnote. A company evaluating MediaCrawler for customer research, lead generation, or a paid dataset needs permission before architecture work begins.

Even permitted research requires care with platform terms, personal data, and account controls. The README tells users to follow applicable law and avoid infringement. MediaCrawler provides collection code; it does not grant a right to collect a target site's data. The narrow license also explains why Crawlee or Scrapling may be a better base when you need to own the policy and connector work in a commercial setting.

An October 3 push is active, but 164 issues remain open

GitHub recorded 66,151 stars and a last push on October 3, 2026. Separate issue searches showed 164 open issues and 48 open pull requests, which together match the repository API's 212 combined count. That is current development with a large review and support queue. The project has no published GitHub release, so adopters must pin a commit instead of choosing a tagged release with notes.

Recent reports show why pinning and per-platform checks matter. Issue 985 documents a Xiaohongshu creator crawl that logged in successfully, connected to Chrome, and then stopped on a JSON parsing error. Issue 725 reports that a Windows CDP session can leave the browser open after a crawl. For non-commercial research, MediaCrawler saves substantial connector work. For a dependable service, the license and browser-operated runtime end the evaluation before its star count should sway you.

Alternatives

ProjectWhat it isPick it when
Scrapling gh↗A Python scraping framework for HTTP and browser-driven collection across arbitrary sites.pick this instead when you need a general crawler with a permissive license and will build the social-site logic yourself.
Crawlee gh↗A JavaScript and TypeScript crawling library with Playwright, Puppeteer, queues, and proxy support.pick this instead when you need a reusable Node.js crawling system rather than ready-made Chinese social connectors.
yt-dlp gh↗A command-line downloader for video and audio from a wide range of supported sites.pick this instead when media downloads matter more than creator, post, and comment records.

Sources

  1. MediaCrawler English README
  2. MediaCrawler Chinese README
  3. Non-Commercial Learning License 1.1
  4. Xiaohongshu creator crawl issue 985
  5. Windows CDP browser cleanup issue 725

More data reviews

rerun · telegraf · rocksdb · redash · akshare · DB-GPT · the whole board →