采集规则编写目标怎样拆成页面任务

📍 WDQWDWQD987AAAAA:216.73.217.59
📱 Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
🔗 /45d475859469.html
📄

采集规则编写目标怎样拆成页面任务

把采集规则编写目标拆成页面任务,核心是先确定“一个页面要产出什么结构化结果”,再倒推列表页、详情页和翻页各自承担的动作。假设你要采集一个行业资讯站,目标是得到标题、发布时间、正文和作者四项字段,那么页面任务应拆成:列表页负责发现详情链接与翻页,详情页负责抽取四项字段,异常页负责记录缺失或结构变化。常见错误是直接写一条大规则覆盖整站,结果列表和详情混在一起,字段错位后很难定位。

先定义页面类型,再定义字段

采集规则编写的第一步不是写选择器,而是把目标站点拆成页面类型。一个页面类型对应一组稳定的抽取动作。判断依据是:页面结构是否相同、字段是否一致、翻页方式是否一致。若列表页只有标题和链接,详情页才有正文,就应分成两个任务,而不是硬塞进一个规则。

适用条件是页面模板稳定。若同一站点存在多种详情模板,例如图文页与视频页结构不同,应继续拆成两个详情页任务,而不是用大量条件判断堆在一个规则里。

把字段拆成可检查的抽取项

字段要写成可验证的结果,而不是模糊描述。以假设的资讯站为例,标题来自<h1>,发布时间来自<time>,正文来自<article>,作者来自带作者类名的<span>。每个字段都要有:来源位置、抽取方式、空值处理、样例校验。这样拆完后,页面任务就变成一张可执行的清单,而不是一段难以维护的代码。

  1. 先手工保存一个列表页和一个详情页,确认字段真实存在。
  2. 为每个字段写一条抽取规则,并记录它来自哪个页面类型。
  3. 用三条不同详情页做校验,观察字段是否稳定。
  4. 对缺失字段设定跳过、留空或报错,而不是默认为空字符串。

判断结果是:如果三条样例中同一字段都能取到,说明规则可进入小批量测试;如果只有一条能取到,说明页面模板未拆干净,应回到页面类型划分。

按页面任务安排执行顺序

页面任务之间要有先后关系。常见顺序是:入口页 → 列表页 → 详情页 → 翻页 → 去重入库。入口页只负责给出起始列表地址;列表页负责产出待抓详情链接;详情页负责产出字段;翻页负责继续发现列表页。若把翻页放在详情页之后,容易重复抓取;若把去重放在详情页之后,可能浪费请求。更稳妥的做法是列表页产出链接后先去重,再进入详情页。

适用条件是链接可稳定识别。若列表页链接带动态参数,应先用参数规则归一化,再判断是否重复。检查项包括:同一详情链接是否只出现一次、翻页是否回到第一页、空列表是否停止而不是无限循环。

常见错误与修正方向

第一种错误是把列表页和详情页写进同一个规则,导致标题取到列表标题、正文取到空值。修正方式是按页面类型拆分任务。第二种错误是只写字段名不写空值策略,遇到缺失字段时整条记录失败。修正方式是为每个字段定义缺失时的处理。第三种错误是忽略翻页终止条件,导致重复请求。修正方式是设置最大页数、重复链接检测和空结果停止。

假设你第一次编写采集规则,建议先只做一个列表页任务和一个详情页任务,用十条链接验证字段完整率。若完整率达到预期,再增加翻页和异常记录;若完整率低,先检查页面类型是否拆错,而不是继续加选择器。

下一步:拿一个目标站点,手工列出它的页面类型和字段清单,再按“列表页发现链接、详情页抽取字段、翻页控制范围、异常单独记录”写成四个任务,最后用三条样例逐项核对。

图1 图2

nginx