LangGraph + ScrapeGraphAI组合拳:构建智能网页信息采集与内容生产流水线

引言:当AI遇上爬虫,一场静默的技术革命

你有没有遇到过这样的场景:刚刚费了九牛二虎之力写好的爬虫,因为网站改版,所有CSS选择器和XPath都失效了,只能从头再来?或者面对动态渲染的JavaScript页面,传统的request库无能为力,不得不引入Selenium这样的"重型武器"?更不用说那些隐藏在PDF里、图片中的信息,传统爬虫几乎无从下手。

在信息爆炸的今天,数据成为AI时代的石油,但采集这些数据的过程却依然挣扎在手工规则、频繁维护和反爬对抗的低效率泥潭中。传统数据采集流程中,高达80%的时间被消耗在编写CSS选择器、调试XPath表达式和应对反爬机制上,真正用于数据分析的时间不足20%

恰好在2024年底至2025年,一种全新的基于大模型驱动、图逻辑编排的数据采集方案异军突起。其中,ScrapeGraphAI凭借其自然语言驱动的智能抓取能力,在GitHub上斩获超过23,000星,并完成了超过4000万次页面抓取。

今天,我将带你深入拆解ScrapeGraphAI和LangGraph这一对"黄金搭档"的技术底层,并手把手教你构建从网页抓取、智能清洗到自动生成技术文章的端到端流水线。本文包含大量可直接落地的实战代码和调优经验,建议收藏。

一、传统网页抓取的困境与AI驱动的破局之道

1.1 传统爬虫开发的四重枷锁

在深入技术之前,有必要审视传统爬虫开发模式的根本性困境。这不仅仅是"需要写代码"的问题,而是整体开发范式的不匹配。

规则维护的无底洞。 每增加一个数据源,就需要编写一套新的解析规则。有案例显示,某电商平台的价格监控系统维护着超过200个网站的解析规则,每月因页面结构变更导致的规则修复工时超过120人天。最令人头疼的是,网站的改版往往是不可预测的,爬虫开发者永远处于"被动响应"状态。

反爬对抗的军备竞赛。 从简单的User-Agent检测到复杂的行为验证码,从IP封锁到JavaScript加密,网站反爬技术的迭代速度远超爬虫工具的更新频率。某舆情分析公司曾因IP被封导致连续72小时数据采集中断,直接损失超过百万元。

非结构化数据的提取难题。 PDF表格、动态渲染的JavaScript内容、图片中的文字信息------这些非结构化数据占互联网信息总量的85%以上。传统爬虫依赖于稳定的HTML结构和明确的元素定位方式,对于这类非结构化数据几乎无能为力。

跨平台适配的兼容性噩梦。 不同网站采用的技术栈千差万别,同一套爬虫逻辑在不同设备上可能表现迥异,兼容性测试成本往往超过开发本身。

1.2 传统Agent开发的结构性瓶颈

即便我们构建了一个具有"思考能力"的AI Agent来辅助网页抓取,传统的手工实现方式同样面临严重制约。

早期AI Agent的实现中,开发者必须手动维护消息上下文列表,通过正则匹配解析工具指令,并用复杂的循环控制"思考→行动→观察→应答"流程。这种模式带来了三大核心问题:状态管理碎片化,使对话历史和工具调用记录分散在多个变量中;流程控制复杂,多轮工具调用需要嵌套循环,错误处理代码臃肿不堪;扩展性极差,每新增一个工具就必须修改核心逻辑。

面对这些困境,我们需要一种更本质的解决方案------不是修修补补,而是从底层设计理念上重新思考。

1.3 ScrapeGraphAI + LangGraph:1+1 > 2的智能范式

ScrapeGraphAI与LangGraph的组合,正是为解决上述困境而生的。

ScrapeGraphAI的定位是"自然语言驱动的智能爬虫引擎"。它并非传统爬虫的简单封装,而是基于LangChain构建,融合大型语言模型(LLM)语义理解与图逻辑的高阶抽象。用户不需要编写任何CSS选择器或XPath表达式,只需要用自然语言描述"想要什么",ScrapeGraphAI就能自动理解网页结构、定位目标信息并返回结构化数据。

LangGraph的定位则是"AI Agent工作流的图形化编排框架"。作为LangChain生态的核心组件,LangGraph将Agent的工作流建模为有状态的有向图,通过节点(Node)和条件边(Conditional Edge)的抽象,实现循环、分支、重试和多智能体协作

这两者的结合,实现了"智能抓取"与"智能编排"的完美互补。ScrapeGraphAI解决了"如何从网页中获取信息"的问题,LangGraph则解决了"如何将这些抓取步骤组织成一个可靠、可复用的工作流"的问题。

二、ScrapeGraphAI深度解析:自然语言驱动的智能爬虫

2.1 项目概况与核心能力

ScrapeGraphAI由意大利帕多瓦的团队打造,是一个MIT开源项目。截至2026年初,该项目已在GitHub收获超23,000星,服务超过100万用户完成了4000万次页面抓取,其发展速度在开源爬虫生态中令人瞩目。

ScrapeGraphAI的核心产品包括多个智能分析端点:SmartScraper用于从单个网页中提取结构化数据,只需提供自然语言提示即可智能识别目标内容,无需编写任何选择器;SearchScraper结合搜索引擎和AI分析,能够从全网抓取并整合信息;AgenticScraper则是一款能够自主导航和交互的AI代理,可以模拟人类浏览行为完成复杂的信息抓取任务。此外,ScrapeGraphAI还提供Markdownify功能,可将网页转换为干净的Markdown格式,为大语言模型训练和RAG知识库建设准备高质量数据。

2.2 技术架构与图分类

ScrapeGraphAI的命名中带有"Graph"并非偶然。它内部定义了四种预置的图形管道,每种针对不同的数据采集需求:

SmartScraperGraph是最常用的管道类型,适用于单页面的精准信息提取。支持动态内容渲染,其工作流程包括内容获取(FetchNode)、页面解析(ParseNode)、知识增强(RagNode)和答案生成(GenerateAnswerNode)四个核心步骤。典型场景包括电商产品详情页的信息提取、新闻文章的结构化采集等。

SearchGraph结合搜索引擎结果的批量抓取与汇总,支持多页面自动翻页和结果聚合。典型场景包括竞品新闻监控、行业动态跟踪等。

SpeechGraph实现文本到语音的输出,支持多语言发音。典型场景包括内容播报、音频简报生成等。

OmniScraperGraph在SmartScraperGraph的基础上增加了ImageToText节点,支持从图片中提取文字信息,实现多模态数据采集。这对于包含图表、截图等复杂元素的页面尤为重要。

2.3 实战:5分钟快速上手ScrapeGraphAI

环境准备与安装

推荐使用Python 3.10+环境,通过pip安装核心依赖:

bash 复制代码
# 安装核心库
pip install scrapegraphai langgraph

# 安装浏览器自动化支持(处理动态网页必需)
playwright install chromium

本地模型配置方案(推荐)

如果你不希望依赖云端API,可以通过Ollama部署本地模型。这种方式的最大优势在于数据完全内网可控,适合处理敏感信息或高频抓取场景。

python 复制代码
from scrapegraphai.graphs import SmartScraperGraph

graph_config = {
    "llm": {
        "model": "ollama/llama3.2",
        "model_tokens": 8192,
        "temperature": 0,
        "base_url": "http://localhost:11434"
    },
    "embeddings": {
        "model": "ollama/nomic-embed-text",
        "base_url": "http://localhost:11434"
    },
    "verbose": True,
    "headless": False  # 调试模式可见浏览器
}

# 创建一个SmartScraperGraph实例
smart_scraper = SmartScraperGraph(
    prompt="提取该网页中所有项目标题及其描述信息",
    source="https://example.com/projects",
    config=graph_config
)

# 运行抓取并获取结果
result = smart_scraper.run()
print(result)  # 自动输出结构化的JSON数据

云端模型配置方案

对于需要更高精度或更复杂语义理解的场景,也可以使用OpenAI、Groq、Mistral等云端模型:

python 复制代码
from scrapegraphai.graphs import SmartScraperGraph
import os

graph_config = {
    "llm": {
        "api_key": os.getenv("OPENAI_API_KEY"),
        "model": "openai/gpt-4o-mini",
        "temperature": 0
    },
    "verbose": True,
    "headless": True  # 生产环境使用无头模式
}

smart_scraper_graph = SmartScraperGraph(
    prompt="提取用户评论中的产品优缺点分析,以及用户星级评分",
    source="https://example.com/product/12345",
    config=graph_config
)
result = smart_scraper_graph.run()

智能适应结构变化的核心优势

使用ScrapeGraphAI与传统爬虫最本质的区别在于:它使用大语言模型来语义化理解页面内容而非机械地匹配DOM元素位置。当网页结构发生变化时,只要内容主体仍在,LLM通常能自动适应并继续正确提取信息。这意味着网站改版不再是爬虫的"灾难",维护成本可以大幅降低90%以上。

2.4 与传统爬虫的性能对比

对比维度 传统爬虫(Scrapy等) ScrapeGraphAI
规则编写 需要编写XPath/CSS选择器 自然语言描述,零编码
网站改版影响 规则失效,需重写 LLM自动适应结构变化
动态内容支持 需额外配置浏览器引擎 原生支持Playwright
多模态数据 无法直接处理图片/PDF 支持OCR与多模态提取
开发时间 数小时 约5分钟
维护成本 高,每周可能需修复 极低,自动化适应

三、LangGraph解析:用图形化思路构建有状态的AI工作流

3.1 为什么需要LangGraph?

在LangChain的生态中,传统的链式(Chain)模型在处理直线型任务时效率很高,但当遇到需要循环、分支、记忆和多轮决策的复杂任务时,便会显得力不从心。LangGraph的应运而生,正是为了应对这些线性思维下的"盲区"。

LangGraph的核心创新在于将AI应用的工作流程抽象为一个有向图,通过节点和边来定义任务的执行步骤和逻辑流,支持动态图结构、循环和条件路由。这使得开发者能够以一种更直观、更可控的方式构建具备状态感知能力与流程控制能力的Agent系统。

3.2 三大核心概念及其设计哲学

状态(State):数据的生命线。 状态是LangGraph的核心,代表在整个工作流中流动和演变的共享数据结构。LangGraph使用Annotated类型来声明状态更新时的合并策略,通过operator.add实现消息列表的自动累加。这种设计确保了Agent在长时间运行中能够完整记忆上下文,支持断点续跑和状态回溯。在设计状态时,每个字段都应有明确的语义和用途,避免在其中存储临时计算结果。

节点(Node):功能的原子单元。 节点是LangGraph中执行特定任务的基本处理单元,每个节点都应该遵循"单一职责原则",只完成一个明确的任务。节点的输入是当前的状态对象,输出是更新后的状态子集。LangGraph支持多种节点类型,包括执行LLM调用的"LLM节点"、与外部工具交互的"工具执行节点",以及进行数据验证或转换的"处理节点"。

条件边(Conditional Edge):实现动态路由的关键。 LangGraph支持条件分支,通过条件边来实现流程的动态跳转。例如,当LLM节点检测到需要调用工具时,可以通过条件边将流程导向工具执行节点;否则直接进入结束状态。这种机制使得Agent能够根据中间结果自主决定下一步动作,实现真正的"思考→行动→观察"循环。

3.3 实战:用LangGraph构建自主网络爬虫Agent

下面是一个使用LangGraph构建自主爬虫Agent的完整示例,该Agent能够自主抓取网页、处理分页和错误,并最终生成分析报告。这个示例展示了一个包含五个节点、通过条件边连接成循环的完整工作流。

python 复制代码
import operator
import requests
from bs4 import BeautifulSoup
from typing import Annotated, TypedDict, List
from langgraph.graph import StateGraph, START, END
from langchain_openai import ChatOpenAI
from langchain_core.messages import SystemMessage, HumanMessage


# 1. 定义状态模式
class CrawlerState(TypedDict):
    url: str
    html: str                    # 原始HTML内容
    error: str                   # 错误信息(如有)
    all_data: Annotated[List[dict], operator.add]  # 自动累加抓取结果
    next_url: str                # 分页时的下一URL
    report: str                  # 最终分析报告
    message: str


# 2. 初始化LLM
llm = ChatOpenAI(model="gpt-4o-mini", temperature=0)


# 3. 定义五个节点的执行逻辑

def fetch_node(state: CrawlerState):
    """抓取节点:获取HTML内容,处理HTTP错误"""
    url = state["url"]
    try:
        response = requests.get(url, timeout=30, headers={"User-Agent": "Mozilla/5.0"})
        response.raise_for_status()
        return {"html": response.text, "error": ""}
    except Exception as e:
        return {"html": "", "error": str(e)}


def parse_node(state: CrawlerState):
    """解析节点:使用LLM智能提取结构化数据"""
    if state.get("error"):
        return {"all_data": []}
    
    html = state["html"]
    # 构建LLM提示词
    prompt = f"""
    请从以下HTML内容中提取所有商品的名称、价格和评分信息。
    返回格式为JSON列表,每个元素包含字段:name, price, rating。
    
    HTML内容:
    {html[:4000]}  # 限制长度避免超出上下文限制
    """
    
    response = llm.invoke([HumanMessage(content=prompt)])
    # 解析LLM返回的JSON数据
    # 具体解析逻辑根据实际返回格式实现
    return {"all_data": parsed_products}


def pagination_check(state: CrawlerState):
    """分页检测节点:判断是否存在下一页"""
    if state.get("error"):
        return {"next_url": "done"}
    
    html = state["html"]
    # 使用BeautifulSoup简单查找"下一页"链接
    soup = BeautifulSoup(html, "html.parser")
    next_link = soup.find("a", string="下一页") or soup.find("a", {"rel": "next"})
    if next_link and next_link.get("href"):
        return {"next_url": next_link["href"]}
    return {"next_url": "done"}


def accumulate_node(state: CrawlerState):
    """累加节点:合并新抓取的数据,实际逻辑在状态定义的Annotated中已自动处理"""
    # 此节点仅用于标记状态更新,实际合并由operator.add自动完成
    return {}


def analyze_node(state: CrawlerState):
    """分析节点:基于抓取数据生成统计报告"""
    data = state.get("all_data", [])
    if not data:
        return {"report": "未抓取到有效数据"}
    
    prompt = f"""
    基于以下商品数据生成简要分析报告:
    {data}
    
    报告应包含:商品数量、价格分布、评分最高的商品等信息。
    """
    response = llm.invoke([HumanMessage(content=prompt)])
    return {"report": response.content}


# 4. 构建图工作流

def route_after_fetch(state: CrawlerState):
    """条件路由:决定下一步是解析还是处理错误"""
    return "parse" if not state.get("error") else END


def route_after_pagination(state: CrawlerState):
    """分页路由:决定是继续抓取还是结束"""
    return "fetch" if state.get("next_url") != "done" else "analyze"


# 构建StateGraph
builder = StateGraph(CrawlerState)

# 添加节点
builder.add_node("fetch", fetch_node)
builder.add_node("parse", parse_node)
builder.add_node("pagination", pagination_check)
builder.add_node("accumulate", accumulate_node)
builder.add_node("analyze", analyze_node)

# 添加边和路由
builder.add_edge(START, "fetch")
builder.add_conditional_edges("fetch", route_after_fetch, {"parse": "parse"})
builder.add_edge("parse", "pagination")
builder.add_conditional_edges("pagination", route_after_pagination, {"fetch": "fetch", "analyze": "analyze"})
builder.add_edge("analyze", END)

# 编译并运行
graph = builder.compile()
initial_state = {"url": "https://example.com/products", "all_data": [], "report": ""}
result = graph.invoke(initial_state)
print(result["report"])

上述代码展示了一个完整的LangGraph爬虫Agent的骨架。当一次抓取完成后,Pagination节点会自动判断是否存在下一页;若存在,流程通过条件边循环回Fetch节点继续抓取;当所有页面处理完毕,数据进入Analyze节点进行汇总分析。LangGraph状态中的Annotated字段通过operator.add自动完成数据累加,无需手动编写合并逻辑。

四、黄金组合:LangGraph编排 + ScrapeGraphAI智能抓取

将上述两者进行有机关联,既发挥了ScrapeGraphAI的智能解析优势,又借助LangGraph构建了一个具备状态记忆、条件循环和容错处理的复杂工作流。

4.1 整合架构全景

LangGraph与ScrapeGraphAI的整合可以构建一个端到端的智能内容生产流水线。典型的内容生成流水线包含以下节点:

  1. 信息提取节点:通过ScrapeGraphAI清洗原始HTML数据,提取核心信息
  2. 语义分析节点:使用LLM识别关键实体、主题词和情感倾向
  3. 大纲生成节点:基于提取的信息构建文章的结构框架
  4. 内容填充节点:逐段扩展细节内容,完善文章主体
  5. SEO优化节点:插入关键词、生成元描述、优化可读性

这套技术栈特别适合技术媒体运营(持续跟踪多个信息源并生成行业分析报告)、竞品监控系统(自动化采集竞争对手的产品更新动态)、知识库维护(定期抓取领域最新研究并整合到内部知识体系)以及SEO内容生产(基于热点关键词自动生成优化文章)等场景。

4.2 实战:从网页抓取到生成技术文章的完整流水线

下面是一个使用LangGraph编排ScrapeGraphAI实现端到端内容生产的完整实战示例。

python 复制代码
import os
from typing import Annotated, TypedDict, List
from langgraph.graph import StateGraph, START, END
from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage, SystemMessage
from scrapegraphai.graphs import SmartScraperGraph


# 1. 定义工作流状态
class ContentState(TypedDict):
    target_urls: List[str]              # 待爬取的URL列表
    current_url: str                    # 当前处理的URL
    scraped_data: Annotated[List[dict], operator.add]   # 累加抓取数据
    summary: str                        # 内容摘要
    article_outline: str                # 文章大纲
    final_article: str                  # 最终生成的文章
    error_log: str                      # 错误日志
    current_index: int                  # 当前进度索引


# 2. 初始化LLM(用于内容生成)
llm = ChatOpenAI(model="gpt-4o-mini", temperature=0.7)


# 3. 定义ScrapeGraphAI抓取函数
def scrape_with_ai(url: str, prompt: str) -> dict:
    """使用ScrapeGraphAI智能抓取网页内容"""
    graph_config = {
        "llm": {
            "model": "openai/gpt-4o-mini",
            "api_key": os.getenv("OPENAI_API_KEY")
        },
        "verbose": False,
        "headless": True
    }
    
    scraper = SmartScraperGraph(
        prompt=prompt,
        source=url,
        config=graph_config
    )
    return scraper.run()


# 4. 定义各节点的执行逻辑

def scrape_node(state: ContentState):
    """AI智能抓取节点,使用ScrapeGraphAI"""
    idx = state["current_index"]
    if idx >= len(state["target_urls"]):
        return {}
    
    url = state["target_urls"][idx]
    prompt = "请提取该网页中的核心观点、技术要点和作者评价。"
    
    try:
        data = scrape_with_ai(url, prompt)
        return {
            "scraped_data": [{"url": url, "content": data}],
            "current_index": idx + 1,
            "error_log": ""
        }
    except Exception as e:
        return {
            "error_log": f"抓取失败 {url}: {str(e)}",
            "current_index": idx + 1
        }


def aggregate_node(state: ContentState):
    """数据聚合节点:汇总所有抓取结果"""
    all_texts = []
    for item in state["scraped_data"]:
        all_texts.append(f"来源:{item['url']}\n内容:{item['content']}")
    
    aggregated = "\n\n---\n\n".join(all_texts)
    return {"summary": aggregated}


def outline_node(state: ContentState):
    """大纲生成节点:基于汇总信息构建文章框架"""
    prompt = f"""
    基于以下信息源,生成一篇技术文章的详细大纲。
    大纲应包含引言、一级标题、二级标题、结论。
    
    信息源:
    {state["summary"]}
    """
    response = llm.invoke([HumanMessage(content=prompt)])
    return {"article_outline": response.content}


def write_node(state: ContentState):
    """内容撰写节点:扩充大纲生成完整文章"""
    prompt = f"""
    根据以下大纲撰写完整的技术文章。
    要求:逻辑清晰、专业术语准确、不少于2000字。
    
    大纲:
    {state["article_outline"]}
    
    参考素材:
    {state["summary"]}
    """
    response = llm.invoke([HumanMessage(content=prompt)])
    return {"final_article": response.content}


# 5. 构建LangGraph工作流

def should_continue_scraping(state: ContentState):
    """条件判断:是否还有更多URL需要处理"""
    return "continue" if state["current_index"] < len(state["target_urls"]) else "aggregate"


# 构建图
builder = StateGraph(ContentState)

# 添加节点
builder.add_node("scrape", scrape_node)
builder.add_node("aggregate", aggregate_node)
builder.add_node("outline", outline_node)
builder.add_node("write", write_node)

# 添加边
builder.add_edge(START, "scrape")
builder.add_conditional_edges("scrape", should_continue_scraping, {
    "continue": "scrape",
    "aggregate": "aggregate"
})
builder.add_edge("aggregate", "outline")
builder.add_edge("outline", "write")
builder.add_edge("write", END)

# 编译并运行
graph = builder.compile()

initial_state = {
    "target_urls": [
        "https://example.com/ai-trends-2025",
        "https://example.com/langgraph-intro",
    ],
    "current_index": 0,
    "scraped_data": [],
    "summary": "",
    "article_outline": "",
    "final_article": "",
    "error_log": ""
}

result = graph.invoke(initial_state)
print(result["final_article"])

4.3 LangGraph节点的最优设计模式

根据实际工程经验,LangGraph节点设计应遵循以下核心原则:

单一职责原则:每个节点只完成一个明确的任务。例如,信息抓取节点聚焦于数据采集,不做数据清洗;清洗节点专注数据格式化,不做存储。这一设计理念在LangGraph官方示例中被反复强调。

错误处理内聚:在每个节点内部处理其职责范围内的异常。LangGraph虽然支持全局异常处理,但节点级别的错误处理能够提供更精准的问题定位。

状态最小化传输:状态中只存储必要的信息,避免冗余数据。LangGraph的状态会在节点间传递,过度膨胀的数据结构会显著影响性能和内存占用。

五、性能与安全性评测:行业对比与最佳实践

5.1 ScrapeGraphAI vs 其他AI爬虫工具对比

在AI爬虫工具领域,ScrapeGraphAI并非唯一的选项。以下是几款主流工具的核心差异对比:

  • FireCrawl :主打LLM就绪的Markdown输出,基于AI算法自动过滤导航栏、页脚、广告等噪声,输出纯净的Markdown或JSON格式。生态集成完善,可无缝对接LangChain、Dify、LlamaIndex。不足:本地部署依赖多语言环境(Node.js/Python/Rust),动态内容爬取耗时较长。

  • crawl4ai :抛弃传统CSS/XPath规则,通过GPT-4、Llama等大模型直接理解网页语义结构。具备动态反爬机制,基于LLM生成随机User-Agent和代理轮换策略。不足:需要对每个新网站进行预训练适配。

  • Tavily :专注搜索引擎级的AI搜索结果获取,专为AI智能体提供语义化的搜索结果,输出格式天然适配LLM输入。不足:定价较高,数据源单一。

  • ScrapeGraphAI:最核心的差异化优势在于其基于图逻辑的管道化设计,支持SmartScraperGraph、SearchGraph、SpeechGraph等多样化管线。MIT开源协议降低二次开发门槛,支持本地Ollama部署,数据完全可控。

5.2 生产环境下的配置优化实践

关于缓存和请求控制。在实际生产系统中,应考虑对同一URL的重复抓取进行缓存,以避免不必要的API调用开销。同时,务必控制爬取速率,遵守目标网站的robots.txt协议规定。

关于Prompt的设计技巧。建议将用户的抓取需求拆解到最小粒度,并结合LangGraph的节点实现分步处理。例如,不要在一个Prompt中要求"抓取所有产品和评论",而是设计两个节点:ProductNode负责产品列表抓取,ReviewNode负责评论详情抓取。

关于网站改版的应对策略。ScrapeGraphAI通过LLM的语义理解来解析页面内容,对结构变化的容忍度远高于基于CSS选择器的传统爬虫。但仍需定期抽样验证抓取结果的准确性。如有必要,可在LangGraph工作流中引入一个Validator节点来验证数据字段的完整性和合理性。

关于认证和授权页面的处理。ScrapeGraphAI主要面向公开内容设计。对于需要登录认证的页面,可通过配置内置的浏览器会话(Playwright)或预先注入Cookies的方式来处理。

5.3 安全合规提示

在部署AI爬虫系统时,必须严格遵守法律法规和行业规范。遵守robots.txt协议 ,这是爬虫行业的基本准则。控制请求频率 ,避免对目标服务器造成负担,建议在LangGraph的抓取节点中引入限流机制。处理敏感信息时务必脱敏,防止用户隐私信息泄露。同时注意,爬取具有明确API接口的数据源应使用官方API,而非绕过限制进行抓取。

相关推荐
wjc12313132 小时前
使用蓝印RPA的Agent实现带参数执行应用跟获取返回值的使用方式(支持个人微信、钉钉、飞书、企业微信)触发执行应用
自动化·rpa
Mzyh1 天前
通过蓝印RPA获取到飞书聊天中的信息图片-自动化
windows·python·ai·自动化·飞书·rpa
复园电子1 天前
RPA自动化最后一公里:通过Python调用RESTful API挂载物理U盾实战
python·自动化·rpa
Land03293 天前
RPA工具选型技术指南:架构差异与实测数据
python·自动化·rpa
rpa研究爱好者5 天前
灵梭rpa开源了
rpa
金智维科技官方6 天前
AI智能体在7×24客服场景中的真实表现评估
大数据·人工智能·ai·rpa·智能体
掌心向暖RPA自动化8 天前
如何获取网页某个元素在屏幕可见部分的中心坐标影刀RPA懒加载坐标定位技巧
java·javascript·自动化·rpa·影刀rpa
Maydaycxc8 天前
影刀RPA锁屏失败排查:从错误码看Windows会话机制
windows·rpa
侠客工坊9 天前
移动端 RPA 的架构重构:基于侠客工坊多模态视觉大模型的自动化调度系统压测复盘
人工智能·智能手机·重构·架构·rpa·数字员工·侠客工坊