如何使用 DeepSeek 和扣子代码节点批量抓取和提炼新闻?,,#新闻抓取
1. 为什么要用 DeepSeek 和扣子代码节点抓取新闻?,,#行业新闻
在日常生活中,我们经常需要获取最新的行业新闻,例如每天收到的行业新闻邮件。手动抓取和整理新闻既耗时又容易出错。通过 DeepSeek 生成代码,结合 扣子 平台,我们可以实现自动批量抓取新闻并进行提炼,大大提高效率。
2. 如何利用 DeepSeek 和扣子实现新闻抓取的工作流?,,#飞书多维表
2.1 工作流的整体目标,,#数据导出
我们的目标是:自动批量抓取新闻,进行提炼后导出到飞书多维表。例如,抓取 网易上海频道 的最新新闻,提取关键信息,并将其整理到飞书多维表中。
2.2 工作流的具体步骤,,#网页读取
- 数据抓取:从 网易上海频道 抓取新闻数据。
- 数据格式转换:使用 扣子代码节点,将抓取到的不规则数据(包含非新闻条目和多种新闻条目格式)整理为仅包含标题(title) 与新闻链接(link) 两项内容的数据。
- 网页读取与提炼:利用网页读取插件处理提取出的新闻链接。
- 数据导出:将提取的时间、新闻标题、新闻链接以及新闻总结导出到 飞书多维表格。
- 可以进一步扩展,例如定时发送邮件或在微信群中自动定时发送。
2.3 飞书多维表的准备,,#授权
在开始工作流之前,需要在 飞书 中创建一个多维表,并包含以下字段:
- 提取时间
- 新闻标题
- 新闻链接
- AI 提炼
同时,在 扣子 工作流调试时,需要对此 飞书多维表 进行授权。
3. 如何配置扣子代码节点提取新闻链接和标题?,,#调试
3.1 核心思路,,#示例调试
核心思路是:让 AI 学习扣子平台规则 – 提出我的要求 – 提供示例 – 进行调试 – 上线。
3.2 让 DeepSeek 学习扣子平台规则,,#参数说明
首先,从 代码节点 中的编辑器复制 扣子平台 的代码示例,让 DeepSeek 了解平台的规则。
python
在这里,您可以通过 ‘args’ 获取节点中的输入变量,并通过 ‘ret‘ 输出结果
‘args’ 和 ‘ret’ 已经被正确地注入到环境中
下面是一个示例,首先获取节点的全部输入参数params,其次获取其中参数名为‘input’的值:
params = args.params;
input = params.input;
下面是一个示例,输出一个包含多种数据类型的 ‘ret’ 对象:
ret: Output = { “name”: ‘小明’, “hobbies”: [“看书”, “旅游”] };
async def main(args: Args) -> Output:
params = args.params
# 构建输出对象
ret: Output = {
“key2”: { # 输出一个Object
“key21”: “hi”
},
}
return ret
代码解释:
args
:用于获取节点中的输入变量。ret
:用于输出结果。params = args.params
:获取所有输入参数。input = params.input
:获取名为input
的参数值。
3.3 明确输出要求,,#标题链接提取
明确我们的输出要求:基于以上代码帮我写段代码,我的输入变量名是input,变量类型是string。我需要提取里面的标题和link,最终输出的变量名是output,变量类型是Array,里面包含两个变量 title和link,类型是string
3.4 提供输入示例并明确处理要求,,#链接提取
提供输入示例,并明确处理要求,例如:
- !上海一女子烧纸闯大祸:把邻居的保时捷烧了!\n!浦东一小区:大火从多个窗口蹿出\n浦东一小区:大火从多个窗口蹿出\n—————\n!金山新增一个游乐场,五一期间对外开放\n金山新增一个游乐场,五一期间对外开放\n——————\n* [!清明假期天气公布!节后天气也有消息了\n清明假期天气公布!节后天气也有消息了\n——————]
需要注意的点:
- 处理时忽略示例数据前面的信息。
- 确保链接部分只包含 URL,不包含括号。
- 限制处理新闻条数,例如最多处理 10 条。
3.5 调试代码,,#数据校正
调试过程中可能会遇到各种问题,例如 代码节点报错 或 工作流结果有问题。
- 代码节点报错:将错误信息复制到 DeepSeek,让其重新生成代码。
- 工作流结果有问题:提供更多的输入信息或明确更多的要求,例如提供不是新闻的数据或完整的数据条目。
3.6 最终代码示例,,#数据清洗
以下是一个可能的最终代码示例:
python
import re
from typing import List, Dict
async def main(args: Args) -> Output:
params = args.params
input_text = params.get(‘input’, ”) if isinstance(params, dict) else ”
# 第一步:分割所有可能的新闻条目
raw_items = re.split(r'\n\s*\*?\s*\[!\[', input_text)[1:] # 以图片标记分割
output = []
seen_links = set()
for raw_item in raw_items:
if len(output) >= 10:
break
# 第二步:提取图片描述
img_desc_match = re.match(r'([^\]]*)\]\([^)]*\)', raw_item)
if not img_desc_match:
continue
img_desc = img_desc_match.group(1).strip()
remaining = raw_item[img_desc_match.end():]
# 第三步:尝试匹配格式1(直接链接)
format1_match = re.match(r'\]\(([^)]*)\)', remaining)
if format1_match and '163.com/dy/article/' in format1_match.group(1):
link = format1_match.group(1).strip()
output.append({
"title": img_desc,
"link": link
})
continue
# 第四步:尝试匹配格式2(带标题和分隔线)
format2_match = re.match(
r'\n\s*([^\n]+?)\s*\n\s*-+\s*\]\(([^)]*)\)',
remaining,
re.DOTALL
)
if format2_match and '163.com/dy/article/' in format2_match.group(2):
title = format2_match.group(1).strip()
link = format2_match.group(2).strip()
if link not in seen_links:
seen_links.add(link)
output.append({
"title": title,
"link": link
})
ret: Output = {
"output": output[:10]
}
return ret
代码解释:
- 分割新闻条目:使用 正则表达式
re.split(r'\n\s*\*?\s*\[!\[', input_text)[1:]
将输入文本分割成多个可能的新闻条目。 - 提取图片描述:使用 正则表达式
re.match(r'([^\]]*)\]\([^)]*\)', raw_item)
提取新闻标题。 - 匹配链接格式:尝试匹配两种不同的链接格式,提取链接和标题。
- 数据清洗:确保链接只包含 URL,并限制处理的新闻条数。
4. 总结与感悟
整个调试过程,也是一个不断互相学习的过程。DeepSeek 学习我的思维方式,我也在通过 DeepSeek 给出的东西学习怎么能让它更懂我想要什么。
我认为:所谓AI,不过是工具耳。用之正则事半功倍,弃之则徒增烦恼。关键不在于AI之能,而在于使用者之慧。如同庖丁解牛,利器在手,更需胸有成竹,方能游刃有余。若无明确目标,纵有神兵利器,亦难成事。
,,,