非标爬虫只认语义化的标签,不认视觉分块;必须唯一、非空、独立建模,且含有效,否则整块内容被降权或跳过。

非标爬虫只认,不认“看起来像主内容”的div
很多团队以为只要视觉上把正文区域用
<main></main>,就等于没入口;<main></main>为空、嵌套在<footer></footer>里、或页面出现两次,都会触发结构冲突,整块内容被降权甚至跳过。
- SPA 页面必须服务端渲染出非空
<main></main>,仅留<div id="root"></div>等同于告诉爬虫“这里没主内容” - 登录弹窗、广告位、客服电话塞进
<main></main>→ 被判为“元信息污染”,主内容可信度下降 - 检查方式:在浏览器 Console 执行
document.querySelector('main'),返回 null 或多个节点即不合格
不是视觉分块,而是独立建模单元
<section></section>在非标采集逻辑里,不是用来“分栏”或“加边框”的,而是标记一个可被单独索引、富摘要展示、甚至 RSS 抓取的内容单元。它必须自带语义锚点,否则会被直接忽略。
- 每个
<section></section>必须以<h2></h2>起始,或带aria-labelledby;纯<section><p>...</p><div class="aritcle_card flexRow"> <div class="artcardd flexRow"> <a class="aritcle_card_img" href="/xiazai/skill10246" title="HTML Text Extract"><img src="https://img.php.cn/upload/skill/001/246/273/6adaf20dee630206.jpg" alt="HTML Text Extract" ></a> <div class="aritcle_card_info flexColumn"> <a href="/xiazai/skill10246" title="HTML Text Extract">HTML Text Extract</a> <p>从HTML页面(URL、文件或标准输入)中提取主体内容文本,去除导航、页脚、广告和模板文本。可直接传递给readability_check或其他文本工具。</p> </div> <a href="/xiazai/skill10246" title="HTML Text Extract" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a> </div> </div></section>不参与主题建模 - 新闻列表页应为每条新闻套一层
<section></section>,而非整个列表只包一个——否则爬虫当成“一篇长文”,而非“10篇独立报道” - 连续5个无标题的
<section></section>,多数采集器会直接跳过该区域
“2024年3月15日”对爬虫只是普通字符串,需靠 NLP 推断,而<time datetime="2024-03-15">2024年3月15日</time>自带标准格式属性,Google 新闻类页面据此提升时效性排序权重。非标爬虫更严格:缺<time></time>,就无法提取发布时间,整条记录常被丢弃。
立即学习“前端免费学习笔记(深入)”;
-
datetime值必须符合 ISO 8601 格式(如2024-03-15T14:30:00+08:00),不能是中文或自定义格式 - 文章页至少一处
<time></time>,商品页建议同时标注上架时间与更新时间 - 用
document.querySelectorAll('time[datetime]').length快速验证是否缺失
W3C Validator + Lighthouse 是最低成本的质量守门员
人工检查容易漏掉嵌套违规(比如<main></main>放在<nav></nav>里)或属性缺失(如<img alt="HTML语义化在大数据抓取中的代码质量评估标准" >缺alt),工具能覆盖绝大多数结构性硬伤。
- W3C Validator(
https://validator.w3.org/nu/)查语法与嵌套合法性,重点看“Error: Element main not allowed as child of element nav”这类提示 - Lighthouse 的 “Document structure” 审计项直接模拟爬虫逻辑,失败项基本对应非标采集器拒收点
- CI/CD 中集成
htmlhint,配置规则attr-req-alt、headings、id-unique,报错即阻断上线
<main></main>的“唯一性”和“非空性”必须同时满足——它不是摆设,而是非标爬虫启动解析的开关。一旦关掉,后面所有语义标签都失去意义。


















