把学习范围收缩到“一个可交付的采集结果”,是打破只学不做的直接办法。这个结果应当能用一句话描述输入、处理规则和输出,例如:给定一组公开网页地址,按固定字段抽取标题与发布时间,输出一份可人工核对的列表。任务越小,越容易在当天看到结果,也越容易判断自己是否真的理解采集流程。
连续学习却没有产出,通常不是毅力问题,而是范围问题。此时有三种取舍,各自适用条件不同。
判断依据不是学了多少小时,而是能否说清一次采集从发请求到落盘经过了哪几步。说不清,说明材料或范围需要调整;说得清但没动手,说明缺的是任务而不是资料。
可完成的任务需要三个要素同时明确。任何一项含糊,任务都会膨胀。
假设你正在学一个采集器教程,原计划是“抓取某类网站的全部内容”。这个计划无法完成,因为“全部”没有边界。改写为:抓取十个指定页面,抽取标题和发布时间,输出为两列文本。任务当天可结束,且结果可验证。
动作与结果的关系在这里很直接:当你把输入限定为十个地址后,解析规则的调试范围随之缩小;解析稳定后,再增加地址数量才有意义。反过来,先扩大地址数量再调规则,失败原因会混在一起,无法定位。
学习过程中常出现分歧:有人认为应该先学请求库,有人认为直接用现成采集器更快,有人认为必须手写解析。分歧本身不产生结果,把它转成项目才有效。
做法是让每种理解对应一个可核对的小任务。例如:
三份结果放在一起核对,分歧会变成具体差异:是工具覆盖不了某类页面,还是手写方案调试成本更高。核对之后再做保留或改写的决定,比继续争论更可靠。
完成不等于脚本跑通。可用三个检查点:
若脚本运行后没有报错但输出为空,不能直接认定采集被拦截。页面结构变化、选择器写错、编码不一致、内容由脚本动态加载,都会产生同样现象。需要逐一排除,而不是立即更换工具。
当上述检查通过,下一步才是扩展:增加地址数量、增加字段、或把结果接入后续处理。扩展的前提是当前任务已经能被重复执行并核对。没有这个前提,继续学习只会积累更多未验证的知识。