caoqianming
|
93ec54a98f
|
refactor(resm): ScienceDirect 网页下载移出 resm 为独立脚本
按需解耦: 网页(pdfft)下载这类实验性、需人工过 Cloudflare 的功能不进 resm 流水线。
- 新增 scripts/sd_download.py: 独立可运行, DOI->PII->连接手动启动的 Chrome(CDP)
过验证下载->校验真全文多页 PDF; 与 Django/resm 解耦, 仅读 config 取凭证
- 删除管理命令 try_sciencedirect_pdf, 移除 tasks.py 中 sciencedirect_web 相关函数
- .gitignore: scripts/* 保持忽略, 但放行 scripts/sd_download.py
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-07-01 16:12:51 +08:00 |
caoqianming
|
7e6142780a
|
feat(resm): 加 try_sciencedirect_pdf 单篇试验命令
验证"从 ScienceDirect 网页(pdfft)直下真 PDF"在当前服务器 IP / 机构会话下是否可行,
再决定要不要进流水线。流程: API 取 PII -> 拼 pdfft URL -> curl-cffi 伪装指纹请求
(可选注入机构 Cookie) -> _inspect_pdf 判定真全文/预览/被挡。仅单篇, 默认只探测。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-29 14:48:43 +08:00 |
caoqianming
|
88b51f97b0
|
perf(resm): fix_preview_pdf 多进程并发扫描
读文件 + pypdf 解析是 CPU/IO 密集, 17 万条串行太慢。改用 ProcessPoolExecutor
并行分类, DB 写入留主进程串行(坏文件仅少数, 非瓶颈, 也避免子进程共享 DB 连接)。
- 新增 apps/resm/pdf_utils.py: 抽出 _pdf_page_count / _is_elsevier_preview_pdf /
_inspect_pdf / classify_pdf_file, 不依赖 Django, 进程池 fork/spawn 均可安全导入
- tasks.py: 改为从 pdf_utils 导入, 删除内联定义
- 命令新增 --workers(默认 CPU 核数) / --batch; 用 .values() 流式分批, 逐批打印进度;
DB 写入改用 filter().update() 一次完成, 不再加载模型实例
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-29 13:24:45 +08:00 |
caoqianming
|
2d6df68135
|
feat(resm): fix_preview_pdf 增加坏 PDF 识别与清理
历史记录里除 Elsevier 1 页摘要预览页外, 还有把 HTML 错误页 / 截断垃圾当 PDF
存下的损坏文件, 同样被误标 has_fulltext_pdf=True。
- tasks.py: 新增 _inspect_pdf 分类器 (broken/preview/ok/unknown)。broken 仅在铁证
下判定(非 %PDF 魔数, 或装了 pypdf 且解析失败); 未装 pypdf 又判不出页数归 unknown,
绝不误删。
- fix_preview_pdf: 预览页文件仅 --delete-file 时删; 坏文件总是删(dry-run 除外),
坏文件打 fail_reason=pdf_broken; 无 XML 全文者一并回退 has_fulltext。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-29 09:38:05 +08:00 |
caoqianming
|
e695e04de7
|
fix(resm): 识别 Elsevier 摘要预览 PDF, 避免误标全文
Elsevier Article API 对未授权/in-press 文章, application/pdf 端点会返回仅含
摘要的 1 页预览 PDF (魔数仍是 %PDF、体积也不小), 而全文 XML 可正常获取。旧逻辑
只校验魔数+体积, 误将预览页落库并置 has_fulltext_pdf=True。
- tasks.py: 新增 _pdf_page_count / _is_elsevier_preview_pdf (优先 pypdf, 退化
字节扫描), _elsevier_fetch_pdf 与 save_pdf_from_elsevier 落库前排除 1 页预览页,
打 fail_reason=elsevier_pdf_preview_only; 补抓队列 qs_pdf 排除该标记避免无限重试
- 新增管理命令 fix_preview_pdf: 扫描存量误标记录, 回退 has_fulltext_pdf;
无 XML 全文者一并回退 has_fulltext, 让其重进下载链
- requirements.txt: 增加 pypdf>=4.0.0
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-29 08:54:07 +08:00 |