Repository navigation
加上抓取节点的入口和镜像 - #100
Merged
Merged
加上抓取节点的入口和镜像#100
Conversation
抓取、读正文和初筛各步都有了,还差一个能常驻运行的进程把它们串起来,部署时也要一个镜像(#45)。 - `uv run crawler` 启动:启动时用 Pydantic 校验环境变量,缺了或不对就报出是哪几个、不带值,然后退出 - 每分钟领一次活,领到的来源同时各抓一轮;一轮里出意外异常只记日志,不影响其他来源,租约过期后网站会再发 - 收到 SIGTERM 不再领活,等进行中的几轮做完再退出 - 日志每行一个 JSON 对象,一轮的日志都带来源编号和开始时间;普通请求和浏览器下载也各记一条网址、状态码和耗时,httpx 自己的逐条日志关掉 - Dockerfile 按 uv 推荐的两段构建,带 Chromium 无头精简版,用普通用户运行 - AGENTS.md 写上抓取节点的环境变量和本地运行的命令,开发约定更新目录和日志的写法
入口让几十个来源同时抓,原来每轮各自最多 2 个初筛请求,补抓往年时可能同时发出上百个,被限流后这一轮中断,也不交抓取记录,看板上看不到。 - 同时在调用的初筛请求整个进程共用一个上限 - 初筛不成时抛 StepError,这一轮照样往下走:新通知记进没抓成的通知,下一轮再初筛,进行中项目的通知照常抓 - 接口文档写上初筛不成的算没抓成,开发约定写上模型调用的并发上限整个进程共用
Merged
网站返回的数据对不上契约时,领活抛出的校验错误没被捕获,会把正在抓的其他来源一起取消;领活失败的日志写了异常原文,可能带出令牌。开发约定 §4 要求记的模型名称、用量和耗时也还没记。 - 领活遇到网络错误或不合契约的响应,都只记错误类别和状态码,下一分钟再领 - 初筛每批、抽取每次调用各记一条日志,写明模型、用量和耗时;抽取在检查输出前就记,答错的那次也有记录
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
关联
Closes #45。Closes #42:初筛的 key 在入口启动时校验,是 #42 剩下的最后一项。
改了什么
抓取、读正文、初筛和抽取各步都有了,还差一个能常驻运行的进程把它们串起来,部署时也要一个镜像。
uv run crawler启动:启动时用 Pydantic 校验MOUSECLOCK_URL、MOUSECLOCK_TOKEN、SYSTEM_ONE_API_KEY、LLM_API_KEY,缺了或不对就报出是哪几个、不带值,然后退出source_id和started_at,和抓取看板上的那一轮对得上;普通请求和浏览器下载附件也各记一条网址、状态码和耗时(原来只有浏览器打开页面时记),httpx 自己的逐条日志关掉;初筛每批、抽取每次调用各记一条模型、用量和耗时,抽取在检查输出前就记,答错的那次也有记录crawler/Dockerfile按 uv 推荐的两段构建,带 Chromium 无头精简版,用普通用户运行;运行时要加--init,停止的等待时间要够进行中的几轮做完怎么验证的
./check.sh全部通过(242 个测试)。新加的测试:配置出错时只报变量名、不带值;一个来源出意外异常时其他来源照常交抓取记录,停止时等进行中的几轮做完,异常的日志带source_id和started_at;几轮同时初筛、同时抽取时同时在调用的不超过上限(把上限改回每轮各算各的,这两个测试会失败);初筛失败时新通知记进没抓成的通知;抽取选了不存在的学院时原因写明unknown_college;领活先后收到不合契约的数据和带着令牌的错误时,进行中的来源照常交记录、日志里没有令牌(只捕获网络错误或把异常原文写进日志,这个测试都会失败)pnpm dev跑真实的入口,来源页面是本机起的假网页,初筛换成假的,抽取用正式的Extract、只把请求接到假的模型上(临时脚本,不在仓库里):.example的来源记成unreachable,2 个本地来源(一个普通请求、一个浏览器)列出 3 条、初筛、存快照、上传并读出 docx 附件、抽取,404 的通知标成已删除docker build成功,解压后 1.34GB(Chromium 无头精简版 276MB、它的系统库约 355MB、Python 环境 180MB)。用--init对着本地网站跑:普通用户crawler启动 Chromium、打开页面、交了抓取记录;网站连不上时每分钟记一条警告、进程不退出;docker stop立刻以 0 退出。不设环境变量时输出一行 JSON 报出缺的变量。接上抽取后 Dockerfile 和依赖没变,没有重新构建影响
MOUSECLOCK_URL、MOUSECLOCK_TOKEN;领活和交结果的接口不变留给后续
POST /runs带上失败调用的用量,网站和抓取节点都要改,记在路线图上另开 PR 做;抽取的这部分用量现在先写进日志