Typecho 文章批量导出工具
提供从 Typecho 数据库批量导出文章为 Markdown 文件的 Python 脚本,支持 SQLite 和 MySQL 两种数据库。
功能特点
- 自动识别已发布的文章(
status='publish') - 保留原始文章标题和内容
- 自动生成规范化文件名(替换特殊字符)
- 实时输出导出进度
SQLite 版本
import sqlite3
import os
# 配置区 ==================================
DB_FILE = 'typecho.db' # SQLite 数据库文件路径
OUTPUT_DIR = './exported_md' # 输出目录
# =========================================
def export_posts():
"""导出已发布的文章到Markdown文件"""
if not os.path.exists(OUTPUT_DIR):
os.makedirs(OUTPUT_DIR)
with sqlite3.connect(DB_FILE) as conn:
cursor = conn.cursor()
cursor.execute("""
SELECT cid, title, text
FROM typecho_contents
WHERE status='publish'
""")
for cid, title, text in cursor.fetchall():
# 生成安全的文件名
filename = f"{cid}_{title.replace('/', '_').replace(' ', '_')}.md"
filepath = os.path.join(OUTPUT_DIR, filename)
with open(filepath, 'w', encoding='utf-8') as f:
f.write(f"# {title}\n\n{text}")
print(f"✓ 导出成功: {title} → {filename}")
if __name__ == '__main__':
export_posts()
MySQL 版本
import mysql.connector
import os
# 配置区 ==================================
DB_CONFIG = {
'host': 'localhost',
'user': 'typecho_user',
'password': 'your_password',
'database': 'typecho_db',
}
OUTPUT_DIR = './exported_md' # 输出目录
# =========================================
def export_posts():
"""导出已发布的文章到Markdown文件"""
if not os.path.exists(OUTPUT_DIR):
os.makedirs(OUTPUT_DIR)
try:
conn = mysql.connector.connect(**DB_CONFIG)
cursor = conn.cursor()
cursor.execute("""
SELECT cid, title, text
FROM typecho_contents
WHERE status='publish'
""")
for cid, title, text in cursor.fetchall():
# 生成安全的文件名
filename = f"{cid}_{title.replace('/', '_').replace(' ', '_')}.md"
filepath = os.path.join(OUTPUT_DIR, filename)
with open(filepath, 'w', encoding='utf-8') as f:
f.write(f"# {title}\n\n{text}")
print(f"✓ 导出成功: {title} → {filename}")
finally:
cursor.close()
conn.close()
if __name__ == '__main__':
export_posts()
使用说明
准备工作:
安装依赖库:
pip install mysql-connector-python修改脚本中的数据库配置参数
执行导出:
python export_typecho.py输出结果:
- 所有文章将以
{文章ID}_{文章标题}.md格式保存 - 每篇文章首行自动添加Markdown标题
- 所有文章将以
注意事项:
- 确保数据库连接信息正确
- MySQL版本需要提前创建好数据库连接权限
- 文件名中的特殊字符会被替换为下划线
验证与自查
- 导出后统计数量:
ls exported_md/ | wc -l,与数据库已发布文章数一致 - 抽查导出的
.md文件,首行为 Markdown 标题# 文章标题 - 用
head -5 exported_md/*.md检查中文无乱码(UTF-8 编码) - 将导出的 md 文件导入 Hugo/Hexo 前,先补 front matter 并检查正文中的特殊字符