Warning
服务状态提醒
官方站点 https://shitjournal.org/ 目前在大陆地区无法访问,且面临舆论压力,存在关站风险。
本工具依赖官方 API,若期刊停止服务可能失效。建议及时前往 Release 下载完整归档。
- 🚀 Web PDF 下载器 - 简洁优雅的界面,支持 UUID/URL 直接下载
- 📊 数据观测站 - 16 个交互式图表,实时数据可视化分析
- 🕷️ 多线程爬虫 - 自动化采集所有分区数据
- 💻 命令行工具 - 支持批量下载的强大 CLI
- 📱 移动端适配 - 完美支持各种屏幕尺寸
- 🎨 学术风格设计 - 优雅的期刊风格界面
- ⚡ 极致压缩 - 数据文件压缩 60%,加载速度显著提升
单文件下载:
https://shit.colorcard.cc/
数据分析:
https://shit.colorcard.cc/analysis.html
批量下载(所有 PDF):
https://github.com/colorcard/SHIT-Tools/releases/tag/latest
# 安装依赖
pip install requests
# 单文件下载
python src/shitjournal_downloader.py https://shitjournal.org/preprints/UUID
# 交互模式
python src/shitjournal_downloader.py -i
# 批量下载
python src/shitjournal_downloader.py -f urls.txt -o ./pdfs/SHIT-Tools/
├── src/
│ ├── scraper.py # 多线程数据爬虫
│ ├── shitjournal_downloader.py # 命令行 PDF 下载器
│ └── compress_articles.py # 数据压缩脚本
├── docs/
│ ├── shitjournal_downloader.html # Web 下载器
│ └── analysis.html # 数据分析仪表板
├── data/
│ └── scraped_articles.json # 爬取的文章元数据
├── dev/
│ └── serve-local.sh # 本地部署脚本
└── downloads/ # PDF 下载目录
优雅的学术风格单页应用,零依赖免安装。
功能特性:
- 直接下载:输入 UUID 或完整 URL 即可下载
- 检索下载:按标题、作者、发酵区、学科搜索文章
- 智能排序:支持按日期或浏览量排序
- 自动解析:智能识别 URL 并提取 UUID
- 响应式设计:完美适配手机、平板、桌面
使用方法:
- 访问 在线下载器
- 选择"直接下载"或"检索下载"标签页
- 输入 UUID/URL 或搜索文章
- 点击下载按钮
💩 粪坑数据观测站 - 学术蝗虫排泄行为可视化分析
统计指标:
- 💩 总排泄量、🦗 学术蝗虫数、⏱️ 发酵天数
- 📊 日均排泄率、🎯 人均产量、💬 总评论数、⭐ 平均粘度
16 个可视化图表:
- 🔥 旷古烁今构思热词榜(词云)
- 🚽 发酵区分布态势(饼图)
- 📚 学科蝗灾分布图(饼图)
- 📈 每日排泄活跃度(折线图)
- 🌊 各发酵区时间演化(多线图)
- 🎨 发酵区-学科交叉污染(柱状图)
- ⏰ 排泄者作息规律(柱状图)
- 🏆 Top 15 高产排泄者(柱状图)
- 📅 周排泄习惯分析(柱状图)
- 📊 月度发酵统计(柱状图)
- 🏅 Top 20 高粘度构思(柱状图)
- 📊 粘度分布直方图(柱状图)
- 🔥 评论数 Top 15(柱状图)
- 💎 粘度 vs 评论数散点图(散点图)
- 👃 嗅探者活跃度分布(柱状图)
- 🎯 各分区平均粘度对比(柱状图)
技术栈:
- Chart.js - 交互式图表库
- WordCloud2.js - 词云生成
- 纯 JavaScript - 无框架依赖
多线程自动化数据采集工具。
功能特性:
- 爬取四个发酵区(旱厕/化粪池/构石/沉淀区)所有文章
- 提取元数据:标题、作者、学科、粘度评分、评论数
- 8 线程并发下载 PDF 文件
- 自动重试失败的下载
- 智能文件名处理(避免过长路径)
使用方法:
pip install requests
python src/scraper.py输出:
data/scraped_articles.json- 文章元数据downloads/- 下载的 PDF 文件
轻量级批量下载工具。
命令选项:
python src/shitjournal_downloader.py [选项]
选项:
URL 直接从 URL 下载
-i, --interactive 交互模式
-f, --file FILE 从文件批量下载
-o, --output DIR 输出目录(默认: ./downloads)使用示例:
# 单文件下载
python src/shitjournal_downloader.py https://shitjournal.org/preprints/abc123
# 批量下载
echo "uuid1\nuuid2\nuuid3" > urls.txt
python src/shitjournal_downloader.py -f urls.txt -o ./pdfs/智能数据压缩系统,显著提升页面加载性能。
压缩效果:
- 原始 JSON:831 KB
- 压缩后 JS:333 KB
- 压缩率:60%
优化技术:
- 移除 UUID 冗余(数组替代对象键)
- ISO 时间戳转 Unix 时间戳
- 浮点数精度优化(保留 2 位小数)
- 单字母键名压缩
- JS 格式替代 JSON(移除键名引号)
使用方法:
# 手动压缩
python src/compress_articles.py
# 本地测试部署
./dev/serve-local.sh自动化:
- GitHub Actions 自动在部署时压缩
- 本地开发脚本集成压缩流程
S.H.I.T Journal 使用 Supabase Storage 托管 PDF 文件。下载流程:
- 通过 UUID 查询数据库获取
pdf_path - 使用 Anon Key 请求签名 URL(有效期 1 小时)
- 从签名 URL 下载文件
本工具自动化了整个流程。
// Supabase 配置
const SUPABASE_URL = 'https://ybgjzxdswzrcfzbtpnmf.supabase.co'
const BUCKET_NAME = 'shit-journal-pdfs'
// 生成下载 URL
const { data } = supabase.storage
.from(BUCKET_NAME)
.getPublicUrl(`${uuid}.pdf`){
"id": "uuid",
"manuscript_title": "string",
"zone": "latrine|septic|stone|sediment",
"discipline": "string",
"author_name": "string",
"created_at": "ISO8601",
"weighted_score": "float",
"rating_count": "int",
"comment_count": "int"
}基于最新爬取数据:
- 文章总数: 1000+
- 活跃作者: 200+
- 覆盖分区: 4 个(旱厕、化粪池、构石、沉淀区)
- 学科领域: 10+ 个
- 数据更新: 每日通过 GitHub Actions 自动更新
Web 工具通过 GitHub Actions 自动部署:
# .github/workflows/deploy.yml
on:
push:
branches: [main]
schedule:
- cron: '0 20 * * *' # 每日 04:00 CST# 克隆仓库
git clone https://github.com/colorcard/SHIT-PDF-Downloader.git
cd SHIT-PDF-Downloader
# 打开 Web 工具
open docs/shitjournal_downloader.html
open docs/analysis.html
# 运行爬虫
python src/scraper.py欢迎贡献!请随时提交 Pull Request。
- Fork 本仓库
- 创建特性分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 开启 Pull Request
本项目仅供学习和研究目的使用。
- 尊重版权和知识产权
- 请勿用于商业用途
- 遵守 S.H.I.T Journal 使用条款
- 负责任和道德地使用
本项目采用 MIT 许可证开源 - 详见 LICENSE 文件。
- S.H.I.T Journal 提供平台
- Supabase 提供存储基础设施
- Chart.js 提供可视化库
- WordCloud2.js 提供词云生成
- 所有贡献者和用户