想象一下,如果你能创建一个完全自动化的新闻简报。只需少量编码和一些 API 凭据,你就可以实现这一点。n8n、Bright Data 和 OpenAI 为我们提供了实现这一目标的能力。
今天,我们将带你了解流程,向你展示它真的有多简单!
开始前的准备
我们将从 访问这个工作流程 开始(你可以免费试用)。点击文章顶部附近的“Use workflow”按钮。当出现提示时,务必运行一个自托管的 n8n 实例。
自托管 n8n
sudo snap install docker
启动 docker,并让 n8n 运行起来。
sudo docker volume create n8n_data
sudo docker run -it --rm --name n8n -p 5678:5678 -v n8n_data:/home/node/.n8n docker.n8n.io/n8nio/n8n
安装社区节点
接下来,是时候安装几个社区节点了。进入 “Settings”,点击 “Community nodes”。
在 “npm” 输入框中输入 Bright Data 节点:
n8n-nodes-brightdata
然后,同样操作安装 Document Generator。
n8n-nodes-document-generator
安装这些节点后,使用 ctrl+c
结束你的 Docker 进程。
然后重新启动它:
sudo docker run -it --rm --name n8n -p 5678:5678 -v n8n_data:/home/node/.n8n docker.n8n.io/n8nio/n8n
你可以在这里查看安装社区节点的完整文档。
获取你的 API 密钥
Bright Data
如果你还没有账号,需要先注册网络解锁器。这款工具提供了丰富的爬取功能,比如 绕过 CAPTCHA 和代理集成。在他们的 playground 里,你可以获取到 API 密钥。
拿到这个密钥后,务必妥善保存。
OpenAI
在 OpenAI 的控制台,你可以在API Keys 标签页查看或创建新的密钥。
同样,把这些密钥也保存好。
SMTP
至于 SMTP,本教程中使用的是 Elastic Email。在它的免费套餐下,你只能发送邮件给自己,但对于本教程,这样已经足够了。
注意:我在创建 SMTP 连接时遇到了一个错误,关闭 SSL 后问题解决。
不管你使用哪个 SMTP 客户端(Elastic Email 或其他),你都需要保存你的用户名、密码和连接信息。对于 Elastic Email,可以在这里查看。
调整工作流程
使用网络解锁器获取网站内容
在工作流程中右击 Bright Data 图标并选择 “Open”。点击铅笔图标来编辑设置。
把你的 Web Unlocker API 密钥添加到 “Token” 一栏中。
接下来,调整你的 schema 以确保一切顺利。在设置底部,将格式(Format)设置为 “JSON”。下面的示例中,url 是 https://www.mediamarkt.de/
,你可以替换为自己想要爬取的 URL。将 zone 名称替换为你自己的 Web Unlocker zone 名称。
提取 HTML
现在,确保你的 HTML 提取设置正确。将 “Source Data” 设置为 “JSON”。提取值应与下图所示一致:Key:title
,CSS Selector:title
,Return Value:Text
。如果你爬取其他网站,可以相应调整这些字段,但如果页面没有 body
或 title
,通常就不值得爬了。
在关闭之前,往下滚动并匹配其他字段:Key:body
,CSS Selector:body
,Return Value:Text
。
将数据传递给 ChatGPT
ChatGPT 将帮我们解析数据。有了 LLM 的能力,我们甚至不需要自己写解析器。你可以在这里更多了解如何使用 AI 模型进行网页爬取。这里的流程很简单:我们把网页内容给 ChatGPT,然后它输出一个干净的商品列表。
现在,是时候配置你的 ChatGPT 连接了。打开名为 “Generate List of Deals by Category” 的节点设置,把你的 OpenAI API 密钥添加进去,就像此前添加 Bright Data API 密钥那样。然后确保以下字段正确:Resource:Text
,Operation:Message a Model
。如果你想使用其他模型,可以自由更换,这里使用的是 GPT-4o mini。
在页面底部进一步查看,确保其余字段也正确。
从 ChatGPT 中提取结果
现在,打开名为 “Extract items from results” 的节点设置,确保 “Fields to Split Out” 的值为 message.content.results
。
生成 HTML 文档
现在,我们来生成 HTML 文档。这里的内容是实际邮件的原始 HTML。如果你运行一次工作流程测试,就可以将输入值拖到模板中。把 “Template String” 设置为 Expression
。
如果你需要,可以从下面复制我的 HTML 模板。下面的 HTML 不是必需的,仅作参考。你完全可以以自己的方式去排版,只要把正确的数据插入进去即可。
<h1>{{ $json.name }}</h1>
<p>{{ $json.description }}</p>
<a href={{ $('Generate List of Deals by Category').item.json.message.content.results[0].link }}>
{{ $('Generate List of Deals by Category').item.json.message.content.results[0].link }}
</a>
<h2>{{ $('Generate List of Deals by Category').item.json.message.content.results[1].name }}</h2>
<ul>
<li><p>{{ $('Generate List of Deals by Category').item.json.message.content.results[1].description }}</p></li>
<li>{{ $('Generate List of Deals by Category').item.json.message.content.results[1].price }}</li>
<li>
<a href={{ $('Generate List of Deals by Category').item.json.message.content.results[1].link }}>
{{ $('Generate List of Deals by Category').item.json.message.content.results[1].link }}
</a>
</li>
</ul>
<h2>{{ $('Generate List of Deals by Category').item.json.message.content.results[2].name }}</h2>
<ul>
<li><p>{{ $('Generate List of Deals by Category').item.json.message.content.results[2].description }}</p></li>
<li>{{ $('Generate List of Deals by Category').item.json.message.content.results[2].price }}</li>
<li>
<a href={{ $('Generate List of Deals by Category').item.json.message.content.results[2].link }}>
{{ $('Generate List of Deals by Category').item.json.message.content.results[2].link }}
</a>
</li>
</ul>
<h2>{{ $('Generate List of Deals by Category').item.json.message.content.results[3].name }}</h2>
<ul>
<li><p>{{ $('Generate List of Deals by Category').item.json.message.content.results[3].description }}</p></li>
<li>{{ $('Generate List of Deals by Category').item.json.message.content.results[3].price }}</li>
<li>
<a href={{ $('Generate List of Deals by Category').item.json.message.content.results[3].link }}>
{{ $('Generate List of Deals by Category').item.json.message.content.results[3].link }}
</a>
</li>
</ul>
<h2>{{ $('Generate List of Deals by Category').item.json.message.content.results[4].name }}</h2>
<ul>
<li><p>{{ $('Generate List of Deals by Category').item.json.message.content.results[4].description }}</p></li>
<li>{{ $('Generate List of Deals by Category').item.json.message.content.results[4].price }}</li>
<li>
<a href={{ $('Generate List of Deals by Category').item.json.message.content.results[4].link }}>
{{ $('Generate List of Deals by Category').item.json.message.content.results[4].link }}</a></li>
</ul>
<h2>{{ $('Generate List of Deals by Category').item.json.message.content.results[5].name }}</h2>
<ul>
<li><p>{{ $('Generate List of Deals by Category').item.json.message.content.results[5].description }}</p></li>
<li>{{ $('Generate List of Deals by Category').item.json.message.content.results[5].price }}</li>
<li>
<a href={{ $('Generate List of Deals by Category').item.json.message.content.results[5].link }}>
{{ $('Generate List of Deals by Category').item.json.message.content.results[5].link }}
</a>
</li>
</ul>
通过邮件通知用户
现在,是时候连接到 SMTP 服务器了。如果你还没有添加 API 密钥,请点击铅笔图标来编辑连接信息。将 “From Email” 修改为你希望的发件邮箱地址。“Subject” 可根据需要任意填写,确保 “Email Format” 保持为 HTML
。
接下来,添加你的 SMTP 凭据,需要包括用户名、密码、主机和端口。
告知用户流程成功完成
最后,让我们创建一个告知用户流程结束的页面。把 “Completion Message” 和 “Completion Title” 改成你想要显示的文字。其他的选项保持默认即可,我们只需要告诉用户流程已完成。
收到的邮件效果
一切配置好后,点击 “Test Workflow” 看看效果。你应该能看到如下弹窗。选择一个分类,然后输入要接收特价信息的电子邮箱。
点击 “Get Deals”。提交完信息后,弹窗会变成下面这样。
最后,检查你的收件箱。如果一时没看到邮件,可以看看垃圾邮件文件夹。许多现代邮箱系统会把这类批量发送的邮件标记为垃圾邮件。找到邮件后,打开就能看到自动生成的特价信息!
结论
借助 n8n、Bright Data 和 OpenAI,你已经能够构建一个智能且数据驱动的新闻简报自动化流程。通过使用 Web Unlocker 获取数据、ChatGPT 生成内容、SMTP 发送邮件,你可以以最小的付出来提供个性化的特价推荐。
但这不必止步于此。Bright Data 还提供了一系列数据解决方案,帮助你进一步强化自动化流程:
- 住宅代理 – 通过真实设备的 IP 获取实时网页数据。
- 抓取浏览器 – 内置 CAPTCHA 绕过和代理轮换的自动化爬取。
- 网页抓取工具 API – 轻松提取结构化数据,无需手动解析。
- 数据集 – 访问历史定价数据,进一步优化优惠推荐。
让你的邮件营销自动化更进一步。立即注册免费试用,开始打造更智能、更高效的工作流程吧!
支持支付宝等多种支付方式