How to Use Phone Number Login in MediaCrawler: A Complete Guide
Phone number login in MediaCrawler requires setting --lt phone via CLI and providing your number through the config.LOGIN_PHONE configuration variable, which triggers the platform-specific login_by_mobile() method.
MediaCrawler supports multiple authentication methods across Chinese social media platforms, with phone-based login offering a direct alternative to QR codes and cookies. This guide explains how to configure and execute phone number authentication using the actual implementation found in the NanmiCoder/MediaCrawler repository.
How Phone Number Login Works in MediaCrawler
The phone login system operates through three architectural layers that handle configuration, delegation, and execution.
Architecture Overview
-
CLI and Configuration Layer (
cmd_arg/arg.py): Parses the--lt(login type) flag and stores the value inconfig.LOGIN_TYPE. The phone number is retrieved fromconfig.LOGIN_PHONE, which accepts values from environment variables or direct configuration. -
Platform Core Layer (
media_platform/<platform>/core.py): Instantiates the appropriate login class (e.g.,ZhiHuLogin,XhsLogin) and forwards the phone number to the constructor via thelogin_phoneparameter. -
Login Implementation Layer (
media_platform/<platform>/login.py): Executes thelogin_by_mobile()coroutine whenLOGIN_TYPEequals"phone", handling the actual authentication flow with the target platform's API.
Command Line Usage
The most common approach uses environment variables to inject the phone number before invoking the main entry point.
# Set the phone number environment variable
export LOGIN_PHONE=13800138000
# Execute with phone login type
python -m MediaCrawler.main \
--platform zhihu \
--lt phone \
--keywords "AI,ML"
This pattern works across all supported platforms:
| Platform | CLI Flag | Command Example |
|---|---|---|
| XiaoHongShu | xhs |
python -m MediaCrawler.main --platform xhs --lt phone |
| Douyin | dy |
python -m MediaCrawler.main --platform dy --lt phone |
| Kuaishou | ks |
python -m MediaCrawler.main --platform ks --lt phone |
| Bilibili | bili |
python -m MediaCrawler.main --platform bili --lt phone |
wb |
python -m MediaCrawler.main --platform wb --lt phone |
|
| Tieba | tieba |
python -m MediaCrawler.main --platform tieba --lt phone |
Programmatic Usage
When embedding MediaCrawler in Python applications, you can configure phone login programmatically before initializing the platform core.
Using the Platform Core
import os
from media_platform.zhihu.core import ZhiHuCore
from config import base_config as cfg
# Configure login credentials
cfg.LOGIN_TYPE = "phone"
cfg.LOGIN_PHONE = "13800138000"
# Initialize browser context (Playwright)
browser_context = ... # BrowserContext instance
page = ... # Page instance
# Create platform instance with phone number
zhihu = ZhiHuCore(
login_type=cfg.LOGIN_TYPE,
browser_context=browser_context,
context_page=page,
login_phone=cfg.LOGIN_PHONE,
)
# Trigger authentication
await zhihu.login()
Direct Login Class Invocation
For advanced use cases, instantiate the login class directly:
from media_platform.weibo.login import WeiboLogin
from playwright.async_api import async_playwright
async def phone_login_demo():
async with async_playwright() as p:
browser = await p.chromium.launch(headless=False)
context = await browser.new_context()
page = await context.new_page()
login = WeiboLogin(
login_type="phone",
browser_context=context,
context_page=page,
login_phone="13800138000",
)
await login.begin() # Executes login_by_mobile()
Configuration Options
You can provide the phone number through three methods:
- Config file: Edit
config/base_config.pyand setLOGIN_PHONE = "1234567890" - Environment variable: Export
LOGIN_PHONE=1234567890before running - Programmatic: Set
cfg.LOGIN_PHONEdirectly in your Python code as shown above
The cmd_arg/arg.py file defines the LoginTypeEnum which validates that "phone" is an accepted value for the --lt flag.
Platform Support and Limitations
Phone number login in MediaCrawler depends on platform-specific implementations in files like media_platform/zhihu/login.py. If a platform's login_by_mobile() method contains a placeholder marked "todo implement login by mobile", attempting phone authentication will raise a ValueError indicating the feature is not yet supported for that platform.
Summary
- Set
--lt phonevia command line to activate phone number authentication mode - Provide your phone number through
config.LOGIN_PHONEusing environment variables, config files, or programmatic assignment - The platform core in
media_platform/<platform>/core.pydelegates tologin_by_mobile()in the corresponding login class - Not all platforms have complete implementations; check for "todo" placeholders in the specific login file before attempting
Frequently Asked Questions
How do I set the phone number for login in MediaCrawler?
You can set the phone number by exporting the LOGIN_PHONE environment variable before execution, modifying LOGIN_PHONE in config/base_config.py, or setting cfg.LOGIN_PHONE programmatically when using the library. The value is passed to the login class constructor as the login_phone parameter.
Which platforms support phone number login in MediaCrawler?
MediaCrawler includes phone login infrastructure for Zhihu, XiaoHongShu (XHS), Douyin, Kuaishou, Bilibili, Weibo, and Tieba. However, actual implementation completeness varies by platform. Check the specific login.py file in media_platform/<platform>/ to verify if login_by_mobile() is fully implemented or marked as a todo.
What happens if phone login is not implemented for a platform?
If the login_by_mobile() method is not implemented for your chosen platform, MediaCrawler will raise a ValueError stating that the phone login type is not supported. In this case, you should fall back to QR code login (--lt qrcode) or cookie-based authentication (--lt cookie) for that specific platform.
Can I use phone login without the command line?
Yes, you can use phone login programmatically by importing base_config from config, setting LOGIN_TYPE = "phone" and LOGIN_PHONE to your number, then instantiating the appropriate platform core class (e.g., ZhiHuCore) with these configuration values and calling await core.login().
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →