n8n 案例 | 自动化网页抓取保存到飞书表格

  1. 工作流介绍
    自动抓取图书网书籍信息,写入多维表格。通过此工作流将学习到n8n网页抓取、飞书文档多维表格操作。
  2. Node应用学习
  • HTTP Request
    • Makes an http request and returns the reponse data
      发起一个 HTTP 请求并返回响应数据
  • HTML - Extract HTML Content (提取HTML内容)
  • Split Out - 切分内容
  • Sort
    • Change items order , 排序
  • Edit fields(Set)
    • Modify , add, or remove item fields
      修改、添加或删除项目字段
  • Feishu Node
    • 飞书文档操作
    • n8n飞书文档插件地址:https://github.com/other-blowsnow/n8n-nodes-feishu-lite
    • n8n 飞书文档插件安装
  1. 工作流
    [图片]
  2. 触发器
    Trigger manually
    Runs the flow on clicking a button in n8n. Good forgetting started quickly
    手动触发单击n8n中的按钮时运行流。好的遗忘开始得很快
  3. HTTP Request
  • Method:GET
  • URL: 要获取网页的地址,本例:http://books.toscrape.com/
    [图片]
  1. HTML - Extract HTML Content (提取HTML内容)
    [图片]
  • Operation - Extract HTML Content 提取HTML内容
  • Source data - JSON
  • Extraction Values 提取值
    • Key:books

    • CSS Selector: .row > li
      根据html内容设置。(需要html知识,对于像我这样的html小白而言,可以借助deepseek帮助理解。文末附上deepseek的解释)
      [图片]
      [图片]

      • Return value:HTML, 返回格式HTML
      • Return array:TRUE,返回内容数组
  1. Split Out - 拆分
    [图片]
  • Fields to Split Out
    The name of the input fields to break out into separate items. Separate multiple field names by commas.
    For binary data, use b i n a r y . 要拆分为单独项的输入字段的名称。多个字段名称之间用逗号分隔。对于二进制数据,使用 binary. 要拆分为单独项的输入字段的名称。多个字段名称之间用逗号分隔。对于二进制数据,使用 binary.要拆分为单独项的输入字段的名称。多个字段名称之间用逗号分隔。对于二进制数据,使用binary。
    把books 拆分为单独项,通过运行查看,输出有20 items。
  1. HTML - Extract HTML Content (提取HTML内容)
    进一步提取书籍信息内容title标题,price价格。输出20组信息,
    这里再次涉及HTML代码的解读。
    [图片]
    [图片]
  • Extraction Values - 解析两个值
  • Key
    • title
  • CSS Selector
    • h3 > a
  • Return Value
    • Attribute
  • Attribute
    • title
  • Key
    • price
  • CSS Selector
    • .price_color
  • Return Value
    • Text
  1. Sort by - 排序
    按价格降序整理 items
    [图片]
  2. Edit fields(set)
    在多维表格中创建两个字段分别为 书名 ,价格
    [图片]
    设置变量关联,用于与多维表格字段关联。
    [图片]
  • Mode
    Manual Mapping
    Edit item fields one by one
    手动映射
    逐个编辑项目字段
  • Fields to Set
    • 书名 = {{ $json.title }} # 上一个节点的title
    • 价格 = {{ $json.price }} # 上一个节点的price
  • 查看输出
    [图片]
  1. Feishu Node - 飞书文档节点
    要完成最后一步的飞书多维表格操作需要2个依赖
  • 在n8n中安装飞书文档插件,地址:https://github.com/other-blowsnow/n8n-nodes-feishu-lite

  • 申请飞书开放平台的的账号,Appid 、AppSecret,地址:https://open.feishu.cn/app?lang=zh-CN
    后期整理响应的步骤文档。
    [图片]
    [图片]

  • Credential to connect with - 飞书账户/凭据
    Feishu Credentials account
    feishu凭据帐户

  • Resource
    [图片]

  • Operation
    批量新增记录

  • 多维表格Token - 详见"飞书开放平台 - 开发文档".
    注意描述中多维表格URL的两种格式,刚开始使用时很容易忽略到这个点,导致操作失败。
    暂时无法在飞书文档外展示此内容

  • 多为表格 ID - - 详见"飞书开放平台 - 开发文档"
    暂时无法在飞书文档外展示此内容

  • 请求体JSON

{
  "records":[
  {
    "fields":
    {
      "文本":"{{ $json['书名'] }}",
      "价格":"{{ $json['价格'] }}"
    }
  }
]} 
  1. Test workflow - 测试工作流查看效果
    每一个节点都成功执行
    [图片]
    飞书多维表格查看效果,成功添加了20条记录。
    [图片]
  2. HTML代码解释
    5.1 提取页面内容
    以下是deepseek的助解
    我来帮你拆分和理解这个HTML代码段。这个页面是一个在线书店的产品列表页面,我会分块解释主要部分。
  3. 文档类型和HTML基础结构
    代码段:
<!DOCTYPE html>
<!--[if lt IE 7]> <html lang="en-us" class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
<!--[if IE 7]> <html lang="en-us" class="no-js lt-ie9 lt-ie8"> <![endif]-->
<!--[if IE 8]> <html lang="en-us" class="no-js lt-ie9"> <![endif]-->
<!--[if gt IE 8]><!--> <html lang="en-us" class="no-js"> <!--<![endif]-->

解释说明:

  • 这是HTML5文档声明
  • 条件注释用于针对不同版本的IE浏览器提供不同的HTML标签和类
  • 设置了语言为英语(en-us)
  • no-js类用于JavaScript检测
  1. 头部(Head)部分
    代码段:
<head>
    <title>All products | Books to Scrape - Sandbox</title>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    <meta name="created" content="24th Jun 2016 09:29" />
    <meta name="description" content="" />
    <meta name="viewport" content="width=device-width" />
    <meta name="robots" content="NOARCHIVE,NOCACHE" />
    <link rel="shortcut icon" href="static/oscar/favicon.ico" />
    <link rel="stylesheet" type="text/css" href="static/oscar/css/styles.css" />
</head>

解释说明:

  • 包含页面标题、元数据和外部资源链接
  • 设置了字符编码、视口和搜索引擎指令
  • 引入了网站的favicon和CSS样式表
  1. 页面头部(Header)
    代码段:
<header class="header container-fluid">
    <div class="page_inner">
        <div class="row">
            <div class="col-sm-8 h1">
                <a href="index.html">Books to Scrape</a>
                <small> We love being scraped!</small>
            </div>
        </div>
    </div>
</header>

解释说明:

  • 网站的顶部标题区域
  • 使用了Bootstrap的网格系统(col-sm-8)
  • 包含网站名称和标语
  1. 面包屑导航
    代码段:
<ul class="breadcrumb">
    <li><a href="index.html">Home</a></li>
    <li class="active">All products</li>
</ul>

解释说明:

  • 显示用户当前位置的导航路径
  • 当前页面是"All products",不可点击
  1. 侧边栏分类
    代码段:
<div class="side_categories">
    <ul class="nav nav-list">
        <li>
            <a href="catalogue/category/books_1/index.html">Books</a>
            <ul>
                <li><a href="catalogue/category/books/travel_2/index.html">Travel</a></li>
                <li><a href="catalogue/category/books/mystery_3/index.html">Mystery</a></li>
                <!-- 更多分类... -->
            </ul>
        </li>
    </ul>
</div>

解释说明:

  • 显示书籍分类的树形结构
  • 主分类是"Books",下面有多个子分类
  • 每个分类都是可点击的链接
  1. 产品列表项(重复部分示例)
    代码段:
<li class="col-xs-6 col-sm-4 col-md-3 col-lg-3">
    <article class="product_pod">
        <div class="image_container">
            <a href="catalogue/a-light-in-the-attic_1000/index.html">
                <img src="media/cache/2c/da/2cdad67c44b002e7ead0cc35693c0e8b.jpg" alt="A Light in the Attic" class="thumbnail">
            </a>
        </div>
        <p class="star-rating Three">
            <i class="icon-star"></i>
            <i class="icon-star"></i>
            <i class="icon-star"></i>
            <i class="icon-star"></i>
            <i class="icon-star"></i>
        </p>
        <h3><a href="catalogue/a-light-in-the-attic_1000/index.html" title="A Light in the Attic">A Light in the ...</a></h3>
        <div class="product_price">
            <p class="price_color">£51.77</p>
            <p class="instock availability">
                <i class="icon-ok"></i>In stock
            </p>
            <form>
                <button type="submit" class="btn btn-primary btn-block" data-loading-text="Adding...">Add to basket</button>
            </form>
        </div>
    </article>
</li>

关键变量/属性:

  • col-xs-6 col-sm-4 col-md-3 col-lg-3: 响应式网格类,控制不同屏幕尺寸下的列宽
  • star-rating Three: 表示3星评级(通过CSS显示相应数量的实心星)
  • price_color: 价格显示的样式类
  • data-loading-text: 按钮点击时显示的加载文本
  1. 分页控件
    代码段:
<div>
    <ul class="pager">
        <li class="current">Page 1 of 50</li>
        <li class="next"><a href="catalogue/page-2.html">next</a></li>
    </ul>
</div>

解释说明:

  • 显示当前页码和总页数
  • 提供"下一页"的链接
  1. 页脚
    代码段:
<footer class="footer container-fluid">
</footer>

解释说明:

  • 简单的页脚区域,当前内容为空
  1. JavaScript引用
    代码段:
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script type="text/javascript" src="static/oscar/js/bootstrap3/bootstrap.min.js"></script>
<script src="static/oscar/js/oscar/ui.js" type="text/javascript" charset="utf-8"></script>

解释说明:

  • 引入jQuery库
  • 引入Bootstrap的JavaScript文件
  • 引入网站自定义的JavaScript文件
    这个页面主要使用了Bootstrap框架构建,具有响应式设计,可以在不同设备上良好显示。产品列表是页面的核心内容,每个产品都有相同的结构但不同的内容(图片、标题、价格等)。
    5.2 书籍产品容器段html代码助解
    这是一个书籍产品的展示模块,我来帮你拆分理解这个代码段:
  1. 产品容器
    代码段:
<article class="product_pod">

解释说明:

  • 使用
    标签表示一个独立的产品内容块
  • product_pod类用于整体样式控制
  1. 产品图片部分
    代码段:
<div class="image_container">
    <a href="catalogue/a-light-in-the-attic_1000/index.html">
        <img src="media/cache/2c/da/2cdad67c44b002e7ead0cc35693c0e8b.jpg" 
             alt="A Light in the Attic" 
             class="thumbnail">
    </a>
</div>

关键变量/属性:

  • image_container: 图片容器的样式类
  • href: 链接到产品详情页
  • src: 产品图片路径(使用了缓存路径)
  • alt: 图片替代文本
  • thumbnail: 缩略图样式类
  1. 评分部分
    代码段:
<p class="star-rating Three">
    <i class="icon-star"></i>
    <i class="icon-star"></i>
    <i class="icon-star"></i>
    <i class="icon-star"></i>
    <i class="icon-star"></i>
</p>

解释说明:

  • 显示产品的星级评分
  • Three类表示3星评级(会通过CSS控制显示3个实心星和2个空心星)
  • 每个代表一个星
  1. 产品标题
    代码段:

A Light in the ...

关键变量/属性: - title: 完整的书名(鼠标悬停时显示) - 显示时书名被截断显示为"A Light in the ..." - 点击标题可以进入产品详情页 5. 价格和库存信息 代码段:
<div class="product_price">
    <p class="price_color">£51.77</p>
    <p class="instock availability">
        <i class="icon-ok"></i>
        In stock
    </p>
</div>

关键变量/属性:

  • price_color: 价格文本的样式类
  • instock availability: 库存状态的样式类
  • icon-ok: 库存可用图标
  1. 加入购物车按钮
    代码段:
<form>
    <button type="submit" 
            class="btn btn-primary btn-block" 
            data-loading-text="Adding...">
        Add to basket
    </button>
</form>

解释说明:

  • 简单的表单包含一个提交按钮
  • btn btn-primary btn-block: Bootstrap按钮样式类
  • data-loading-text: 点击按钮时显示的加载文本
    这个产品模块的结构会在页面上重复出现,每个产品都有相同的HTML结构,但内容(图片、标题、价格等)会不同。这种重复的结构通常是通过服务器端模板或前端JavaScript动态生成的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值