实时获取 Google 相关股票新闻并完成自动化总结

@TOC


请添加图片描述

🌈你好呀!我是 是Yu欸🚀 感谢你的陪伴与支持~ 欢迎添加文末好友🌌 在所有感兴趣的领域扩展知识,不定期掉落福利资讯(*^▽^*)


写在最前面

版权声明:本文为原创,遵循 CC 4.0 BY-SA 协议。转载请注明出处。

本次演示围绕 Bright Data 与 Haystack 的集成实操 展开,完整展示了从获取 Bright Data API 密钥、创建 SERP API 与 Web Unlocker API Zone,到在 Haystack 中封装为 Tool 并接入 Agent 的全流程;

同时通过实际示例,演示了 AI Agent 在推理过程中按需调用搜索与网页抓取能力,实时获取 Google 相关股票新闻并完成自动化总结的效果。

实测结果表明,借助 Bright Data,可在无需自行维护代理和反爬逻辑的情况下,稳定获取搜索结果与网页正文数据,适合生产级 AI Agent 场景。

实时获取股票新闻并完成自动化总结

#爬虫API #数据采集 #亮数据 #BrightData #效率工具 #科研 #大数据 #人工智能 #WebScraping #开发者 #数据分析

Bright Data 官方注册活动链接:注册点我,额外赠送30刀试用金

可参考代码

# pip install haystack-ai brightdata-sdkimport os import json import asyncio import traceback from typing import Union, List, Any, Optional from brightdata import BrightDataClient from haystack.tools import Tool from haystack.components.generators.chat import OpenAIChatGenerator from haystack.components.agents import Agent from haystack.dataclasses import ChatMessage # ========== 你的配置(按你写的,不改“变量名/结构”,但不再硬编码密钥) ==========# ✅ 运行前请在系统环境变量里设置:# BRIGHTDATA_API_TOKEN=...# OPENAI_API_KEY=...## Windows PowerShell 示例:# setx BRIGHTDATA_API_TOKEN "xxx"# setx OPENAI_API_KEY "yyy"## 然后重开一个终端再运行脚本。 os.environ["BRIGHTDATA_API_TOKEN"]="XX" os.environ["OPENAI_API_KEY"]="sk-XX" SERP_ZONE_NAME ="serp_api2" WEB_UNLOCKER_ZONE_NAME ="web_unlocker1"# <-- 换成你控制台真实的 Web Unlocker zone 名 ENABLE_WEB_UNLOCKER = True # ========== 工具封装:把 async 变 sync(Haystack Tool 只收同步函数) ========== def _run_async(coro): """ 在已存在事件循环(如 Jupyter)中用新 loop 跑;普通脚本里直接 asyncio.run。 """ try: asyncio.get_running_loop() new_loop = asyncio.new_event_loop() try: return new_loop.run_until_complete(coro) finally: new_loop.close() except RuntimeError: return asyncio.run(coro) def _as_error_payload(e: Exception) -> dict: return{"error": str(e), "traceback": traceback.format_exc(limit=25)}# ========== 结果提取(避免 outputs_to_string 变 null) ========== def _extract_payload(obj: Any) -> Any: """ BrightData SDK 可能返回对象/字典。优先取常见字段,否则兜底成字符串。 """ if obj is None: return None if isinstance(obj, dict): return obj # 常见字段优先级forkin["data", "text", "content", "html", "body", "result", "response"]: v= getattr(obj, k, None)ifv is not None: returnv# 有些 SDK 对象实现了 dict-like try: d = dict(obj)# type: ignoreif d: return d except Exception: pass return str(obj) def _results_to_json(results: Any) -> str: """ Tool 的 outputs_to_string handler:保证永远可 JSON 序列化、并保留 error/traceback。 """ if results is None: return json.dumps({"error":"BrightData returned None"}, ensure_ascii=False)if isinstance(results, dict) and "error"in results: return json.dumps(results, ensure_ascii=False)if isinstance(results, list): out =[]forrin results: if r is None: out.append(None)elif isinstance(r, dict) and "error"in r: out.append(r) else: out.append(_extract_payload(r))return json.dumps(out, ensure_ascii=False)return json.dumps(_extract_payload(results), ensure_ascii=False)# ========== SERP 查询(Google Search via BrightData SERP) ========== def google_search_sync(query: Union[str, List[str]], **kwargs): async def _inner(): try: async with BrightDataClient(serp_zone=SERP_ZONE_NAME) as c: if isinstance(query, list): tasks =[c.search.google(query=q, **kwargs)forqin query]return await asyncio.gather(*tasks) else: return await c.search.google(query=query, **kwargs) except Exception as e: return _as_error_payload(e)return _run_async(_inner())# ========== Web Unlocker 抓取(修复点:用 scrape_url 而不是 scrape.generic.url) ========== def scrape_url_sync(url: Union[str, List[str]], country: Optional[str]= None): async def _inner(): try: async with BrightDataClient(web_unlocker_zone=WEB_UNLOCKER_ZONE_NAME) as c: if isinstance(url, list): tasks =[c.scrape_url(u, country=country)foruin url]return await asyncio.gather(*tasks) else: return await c.scrape_url(url, country=country) except Exception as e: return _as_error_payload(e)return _run_async(_inner())# ========== SERP Tool ========== serp_parameters ={"type":"object", "properties":{"query":{"type":["string", "array"], "items":{"type":"string"}}, "kwargs":{"type":"object"}, }, "required":["query"], } def serp_api_tool_entry(query: Union[str, List[str]], kwargs: dict = None): kwargs = kwargs or {} kwargs.setdefault("num_results", 10) kwargs.setdefault("language", "en")return google_search_sync(query, **kwargs) serp_api_tool = Tool(name="serp_api_tool", description="调用 Bright Data SERP API(Google)进行搜索,返回 SERP 结果。", parameters=serp_parameters, function=serp_api_tool_entry, outputs_to_string={"handler": _results_to_json}, )# ========== Web Unlocker Tool(可选) ========== unlocker_parameters ={"type":"object", "properties":{"url":{"type":["string", "array"], "items":{"type":"string"}}, "country":{"type":"string"}, }, "required":["url"], } def web_unlocker_tool_entry(url: Union[str, List[str]], country: str = None): return scrape_url_sync(url, country=country) web_unlocker_tool = Tool(name="web_unlocker_tool", description="调用 Bright Data Web Unlocker 抓取网页内容。", parameters=unlocker_parameters, function=web_unlocker_tool_entry, outputs_to_string={"handler": _results_to_json}, )# ========== LLM ========== chat_generator = OpenAIChatGenerator(model="gpt-3.5-turbo", api_base_url="https://poloai.top/v1") tools =[serp_api_tool] + ([web_unlocker_tool]if ENABLE_WEB_UNLOCKER else[]) agent = Agent(chat_generator=chat_generator, tools=tools) agent.warm_up() prompt =""" 请先用 serp_api_tool 搜索 “Google stock market news” 和 “Alphabet stock market news”,各取 10 条结果。 从 SERP 结果中筛选真正的“新闻文章”链接(避免 quote/股票报价/公司主页),选 3 条主题不同且尽量是最近的。 如果启用了 web_unlocker_tool,则抓取这 3 条链接正文并给出中文摘要(每条 3-5 句)。 如果未启用 web_unlocker_tool,则仅基于 SERP 的 title/description 做保守摘要,并明确说明未抓取正文。 如果工具返回包含 error 字段,请把 error 和 traceback 的关键原因一起输出。 """ response = agent.run(messages=[ChatMessage.from_user(prompt)])formsgin response["messages"]: role = msg._role.value if role =="tool":forcontentin msg._content: # print("=== Tool Call ===")# print(content) print("=== Tool Output ===") print(content.result)elif role =="assistant":forcontentin msg._content: if hasattr(content, "text"): print("=== Assistant Response ===") print(content.text)

hello,我是 是Yu欸 。如果你喜欢我的文章,欢迎三连给我鼓励和支持:👍点赞 📁 关注 💬评论,我会给大家带来更多有用有趣的文章。
原文链接 👉 ,⚡️更新更及时。

欢迎大家点开下面名片,添加好友交流。

Read more

7 款 AI 提示词 Prompt 生成器网站推荐,高手专用工具库!

7 款 AI 提示词 Prompt 生成器网站推荐,高手专用工具库!

随着AI技术浪潮席卷而来,不少创作者都会被功能强大的AI工具所吸引,进而主动探索学习与应用。熟练驾驭各类AI工具,的确能够为工作和创作注入全新活力,显著提升效率。 然而,对于零基础的AI新手而言,撰写提示词往往是一大难关。即便反复调试,也难以达到网络达人那般出色的创作水准。事实上,掌握优质提示词的撰写技巧,正是缩小与高手差距的关键所在。 值得一提的是,提示词的创作也可以借助AI完成,毕竟AI对自身运作逻辑有着天然的理解优势。接下来,为大家精心推荐7款实用的AI提示词生成工具,助力各位开启AI创作的全新旅程。 1、ChatArt ChatArt 是一个包罗万象的人工智能创作平台,利用当今最先进的人工智能模型(Deepseek, GPT-o1、Claude 3.5 和 Gemini)的力量。您可以轻松地将简单的文字转化为高质量的对话、文章、创作和绘画。 功能一览 * AI 写作:提供 100+写作创意,应用于社交媒体,写作,电子商务等多个场景,帮您生成,检查,优化,重写您的内容。 * 文章

By Ne0inhk
2026最新秋叶绘世Stable Diffusion整合包下载 秋叶ComfyUI整合包下载 ai生图必备 绘世启动器.exe 绘世2.8.13下载 绘世启动器2.8.13下载地址

2026最新秋叶绘世Stable Diffusion整合包下载 秋叶ComfyUI整合包下载 ai生图必备 绘世启动器.exe 绘世2.8.13下载 绘世启动器2.8.13下载地址

2026最新秋叶绘世Stable Diffusion整合包下载 秋叶ComfyUI整合包下载 ai生图必备 绘世启动器.exe 绘世2.8.13下载 绘世启动器2.8.13下载地址 绘世2.8.13下载 | 绘世2.8.12下载 | 绘世启动器2.8.13下载地址 秋叶绘世Stable Diffusion整合包 【下载链接】 https://pan.quark.cn/s/41f42720f1c7?pwd=ZhBP 链接:https://pan.quark.cn/s/41f42720f1c7?pwd=ZhBP 提取码:ZhBP 解压密码:bilibili-秋葉aaaki 一定要用网盘官方客户端下载,否则压缩包极有可能损坏无法解压。下载完毕一定要先测试压缩包是否完好再解压!!! 秋叶ComfyUI整合包 绘世启动器.

By Ne0inhk

Windows纯本地部署OpenClaude:从零搭建你的7×24小时AI助理,打通微信/飞书

无需云服务器,一台Windows电脑就能让AI助手24小时在线,还能通过手机随时指挥它干活 前言 之前写过一篇用云服务器部署OpenClaude的教程,不少读者反馈:“一定要买服务器吗?我只有一台Windows电脑行不行?” 答案是:当然可以! OpenClaude本来就是完全支持本地部署的开源AI助手框架。你只需要一台Windows电脑,就能跑起一个完整的AI服务,而且可以通过微信、飞书随时随地指挥它——查文件、开软件、管理电脑,甚至让它在你睡觉的时候帮你处理任务。 这篇文章将手把手教你在Windows环境纯本地部署OpenClaude,并打通飞书和企业微信,全程不需要买云服务器。 一、先搞懂:三种部署方式,你选哪个? OpenClaude支持三种部署模式,先看这张图快速理解区别: 部署方式架构优点缺点本地部署全在本地电脑无需服务器、免费、隐私安全电脑关机AI就下线云端部署全在云服务器7×24小时在线、稳定需要付费买服务器混合部署云端大脑+本地手脚24小时在线+能操作本地电脑架构复杂、需要两台机器 本文选择第一种:纯本地部署。虽然电脑关机时AI会下线,但

By Ne0inhk

我用百度智能云跑OpenClaw,AI帮我24小时盯盘、找黑马

OpenClaw(也就是Clawdbot)爆火,成为2026年现象级AI应用,被业界认为是Agent今后的主要发展方向。简单来说,它是一个能够自己操作电脑干活的智能体,你只需要通过聊天工具给他发指令,它就会自动规划和执行任务。 一位博主给了OpenClaw 50美元,让它自生自灭,结果AI通过高频捕捉套利机会,在交易当中获利,仅48小时之内将50美元滚到了2980美元。 这个案例给了我启发:何不让OpenClaw来帮我赚钱,给他操盘思路,复现一个AI炒股大神,并且让大多数人都能轻松抄作业。 于是我开始尝试,首先要搞定OpenClaw的部署,我推荐使用云主机的部署方式,国内各家科技公司都提供了OpenClaw接入服务,下面以百度智能云为例,简单说下部署的过程。 01 百度智能云:轻松部署,极简交互 打开百度智能云官网,现在每天开放 500 个名额,可以一分钱开通,快抢福利吧: https://cloud.baidu.com/product/BCC/moltbot.html 确认订单、完成支付后,就可以准备安装和配置了。

By Ne0inhk