返回 Skill 列表
extension
分类: 数据与分析无需 API Key

网页数据采集 结构化提取 规则配置

基于规则与AI辅助的网页数据采集与结构化提取工具。

person作者: user_a10ab3adhubcommunity

⚠️ 本内容仅供一般信息参考,不构成法律、财务、税务、投资或医疗建议。 涉及合同签署、报税、投资、诊疗等专业决策时,请务必咨询持证专业人士,并由使用者自行承担决策后果。

<!-- professional-disclaimer-injected -->

本内容由 AI 生成,仅供学习参考

<!-- ai-generated-notice -->

autoscraper — 网页数据采集与结构化提取工具

一、能力边界速查卡

1.1 适用范围(能做)

| 场景 | 说明 | 示例 | |------|------|------| | 静态页面数据提取 | 页面内容在 HTML 中直接渲染,无需执行复杂 JS | 新闻列表、商品参数、表格数据 | | 轻度动态页面 | 数据通过 AJAX 加载但最终渲染在 DOM 中 | 社交媒体时间线、搜索结果页 | | 批量规则采集 | 同一站点结构下,通过规则配置循环抓取多页 | 电商分类页、论坛帖子列表 | | 结构化输出 | 将非结构化 HTML 转为 JSON / CSV 格式 | 价格监控、舆情分析、市场调研 |

1.2 不适用范围(不能做)

| 场景 | 原因 | |------|------| | 需要登录的私有数据 | 本工具不处理会话管理、Cookie 维持、验证码绕过 | | 强反爬站点(Cloudflare 等) | 需要浏览器指纹模拟、代理池等高级对抗能力 | | 动态渲染 SPA(Vue/React 全客户端渲染) | 需配合无头浏览器执行 JS 后方可提取 | | 大规模分布式采集 | 本工具定位为单机、中小规模(<10,000 条/天)采集 |

1.3 适用对象

  • 需要定期从固定网站提取结构化数据的产品经理、运营人员
  • 需要快速搭建数据管道的初级开发者
  • 需要为内部系统补充外部数据源的业务分析师

二、触发方式与场景映射

2.1 触发词

直接使用以下任一词汇即可激活本 Skill:

  • autoscraper
  • 网页抓取
  • 数据采集
  • 爬虫
  • 信息提取

2.2 场景映射表

| 用户说(大白话) | 实际需求 | 本 Skill 响应 | |-----------------|---------|---------------| | "帮我把这个网页上的商品价格都弄下来" | 提取列表页中的价格字段 | 指导配置 CSS 选择器,输出 JSON | | "这个网站每天更新公告,我想自动记录" | 定时抓取公告标题与日期 | 提供规则封装方案,支持批量运行 | | "我想把几个网页的表格合并成一个 Excel" | 多页面表格数据汇总 | 演示多规则配置与 CSV 导出 | | "这个页面结构变了,抓不到了" | 选择器失效,需要重新定位 | 引导使用验证步骤与错误码排查 |


三、标准操作流程

3.1 前置条件

| 条件 | 要求 | 验证方法 | |------|------|---------| | 目标 URL 可访问 | 返回 HTTP 200,非登录页 | 浏览器直接打开确认 | | 目标数据在 DOM 中 | 右键 → 查看源代码,能搜到目标文本 | Ctrl+F 搜索目标字段 | | 浏览器开发者工具可用 | Chrome / Edge / Firefox 均可 | F12 能正常打开 |

3.2 执行步骤

Step 1:定位目标元素

  1. 打开目标页面,按 F12 进入开发者工具。
  2. 点击左上角 选择元素 图标(鼠标箭头样式)。
  3. 在页面上点击你要提取的数据(如商品价格、标题、日期)。
  4. 在 Elements 面板中,右键高亮的代码行 → CopyCopy selector

Step 2:验证选择器有效性

在 Console 面板输入以下命令,确认命中数量:

document.querySelectorAll("你的选择器").length

判定标准:

| 命中数量 | 判定 | 后续操作 | |---------|------|---------| | ≥ 1 | 选择器有效 | 进入 Step 3 | | 0 | 选择器无效 | 返回 Step 1,重新选择更精确的元素 |

Step 3:配置提取规则

将选择器填入规则字典:

rules = {
    "商品标题": "div.product-title > a",
    "价格": "span.price-now",
    "销量": "span.sales-count",
    "上架时间": "time.publish-date"
}

Step 4:执行提取

from autoscraper import AutoScraper

scraper = AutoScraper()
result = scraper.extract(url="https://example.com/products", rules=rules)

Step 5:检查占位符

输出结果中若出现 [需核实:字段名],说明该字段选择器未命中或页面结构变化。此时:

  1. 重新打开页面,确认元素是否存在。
  2. 检查是否因页面懒加载导致元素未渲染(滚动页面后重试)。
  3. 更新选择器后重新执行。

Step 6:保存结果

# 保存为 JSON
scraper.save(result, format="json", path="./output.json")

# 保存为 CSV
scraper.save(result, format="csv", path="./output.csv")

3.3 输出规范

| 输出格式 | 结构 | 示例 | |---------|------|------| | JSON | 字段名 → 值列表的映射 | {"价格": ["¥299", "¥459"], "标题": ["商品A", "商品B"]} | | CSV | 每行一条记录,字段为列 | 见下方示例 |

CSV 输出示例:

商品标题,价格,销量
商品A,¥299,1200
商品B,¥459,856

四、置信度门控机制

4.1 占位符规则

当提取结果无法确认时,使用以下占位符,绝不编造数据

| 占位符 | 含义 | 触发条件 | |--------|------|---------| | [需核实:字段名] | 选择器未命中或元素不存在 | querySelectorAll 返回 0 | | [需核实:数据格式] | 提取到数据但格式异常 | 如价格字段混入非数字字符 | | [需核实:页面结构] | 页面结构与预期不符 | 无法定位到任何目标元素 |

4.2 置信度分级

| 置信度 | 判定标准 | 输出行为 | |--------|---------|---------| | 高(≥90%) | 所有字段命中,数据格式符合预期 | 正常输出,无占位符 | | 中(60-89%) | 部分字段命中,或格式需清洗 | 输出占位符,附清洗建议 | | 低(<60%) | 多数字段未命中 | 输出全部占位符,建议重新配置规则 |


五、错误码体系

| 错误码 | 错误描述 | 提示话术 | 修正步骤 | |--------|---------|---------|---------| | E001 | URL 无法访问(404/500/超时) | "目标页面无法访问,请确认 URL 正确且网络通畅" | 1. 浏览器打开 URL 验证;2. 检查是否需代理;3. 确认非登录页 | | E002 | 选择器未命中任何元素 | "选择器未匹配到任何元素,请重新定位" | 1. 重新执行 Step 1-2;2. 尝试更短的选择器(如仅 class 名);3. 确认页面无 iframe 嵌套 | | E003 | 提取结果为空列表 | "提取成功但结果为空,可能页面无数据" | 1. 确认页面有目标数据;2. 检查是否被反爬拦截(返回验证页);3. 尝试增加延时 | | E004 | 字段格式异常 | "字段数据格式异常,请检查选择器精度" | 1. 查看原始 HTML 确认数据结构;2. 调整选择器到更精确的父级元素;3. 使用正则清洗 | | E005 | 规则配置错误 | "规则字典格式不正确,请检查字段名与选择器" | 1. 确认字段名为字符串;2. 确认选择器为字符串;3. 检查是否有空值 | | E006 | 页面结构动态变化 | "页面结构可能已更新,建议重新提取选择器" | 1. 对比历史版本页面;2. 使用更稳定的属性选择器(如 data-*);3. 考虑使用 XPath 替代 |


六、FAQ 反模式对照

反模式 1:选择器过于脆弱

错误做法: 使用包含随机 ID 或动态 class 的选择器,如 div#main_12345 > span.text-abc

正确做法: 优先使用稳定的属性选择器:

/* 不推荐 */
div#main_12345 > span.text-abc

/* 推荐 */
[data-product-id] > .price

反模式 2:忽略页面懒加载

错误做法: 直接对需要滚动加载的页面执行提取,结果为空。

正确做法: 提取前先滚动页面至底部,或使用 AutoScraper 的滚动参数:

result = scraper.extract(url=url, rules=rules, scroll_times=3, scroll_pause=2)

反模式 3:未处理 iframe 嵌套

错误做法: 目标数据在 iframe 中,但选择器直接作用于主文档。

正确做法: 先定位 iframe,再在 iframe 文档内执行选择器:

rules = {
    "标题": "iframe#content-frame >>> h1.title"
}

反模式 4:一次性抓取过多页面

错误做法: 循环抓取上千个页面,导致 IP 被封。

正确做法: 控制请求频率,添加随机延时:

import time
import random

for page in pages:
    result = scraper.extract(url=page, rules=rules)
    time.sleep(random.uniform(2, 5))  # 随机延时 2-5 秒

反模式 5:忽略 robots.txt

错误做法: 无视目标网站的 robots.txt 限制,强行抓取禁止路径。

正确做法: 抓取前检查 https://目标域名/robots.txt,遵守 Disallow 规则。


七、渐进式学习路径

7.1 新手速查卡(5 分钟上手)

  1. 打开页面 → F12 → 选择元素 → 复制选择器
  2. 在 Console 验证:document.querySelectorAll("选择器").length
  3. 填入 rules 字典 → 运行 extract()
  4. 检查输出 → 保存 JSON/CSV

7.2 进阶路径(深入优化)

| 阶段 | 学习内容 | 预计耗时 | |------|---------|---------| | 第一阶段 | 掌握 CSS 选择器高级语法(属性选择器、伪类、组合器) | 2-3 小时 | | 第二阶段 | 学习 XPath 与 CSS 选择器的适用场景对比 | 1-2 小时 | | 第三阶段 | 理解页面渲染机制(懒加载、异步请求、iframe) | 3-4 小时 | | 第四阶段 | 构建可复用的规则库,封装为 JSON 配置 | 2-3 小时 |

7.3 规则封装示例

{
  "site": "example_shop",
  "base_url": "https://example.com/products",
  "rules": {
    "title": "div.product-title > a",
    "price": "span.price-now",
    "stock": "span.stock-status"
  },
  "pagination": {
    "param": "page",
    "start": 1,
    "end": 10
  },
  "rate_limit": {
    "min_delay": 2,
    "max_delay": 5
  }
}

八、用户协议

<!-- user-agreement-injected -->

使用本 Skill 即表示您同意以下条款:

  1. 责任承担:使用者应自行承担因使用本 Skill 产生的全部责任。包括但不限于因数据抓取行为引发的法律风险、IP 封禁、数据泄露等后果。

  2. 合法使用:使用者须确保其抓取行为符合目标网站的 robots.txt 规定及当地法律法规。

  3. 禁止反向工程:使用者不得对本 Skill 的规则生成算法、核心逻辑进行反向工程、反编译或试图提取源代码(除非适用法律允许)。

  4. 数据使用:通过本 Skill 获取的数据,其使用方式须符合相关版权法规与数据保护条例。使用者须自行评估数据使用的合法性。

  5. 免责声明:本 Skill 按"现状"提供,不附带任何明示或暗示的保证。作者不对因使用本 Skill 造成的任何直接或间接损失承担责任。


九、许可证(License)

<!-- professional-license-embedded -->

MIT License

Copyright (c) 2024 DataForge Studio

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.


十、版本记录

| 版本 | 日期 | 变更内容 | |------|------|---------| | 1.0.0 | 2024-01 | 初始版本,包含核心提取流程、错误码体系、FAQ 反模式指南 |


本 Skill 由 AI 辅助生成,仅供学习参考。使用前请阅读相关文档。