尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Scrapegraph-ai OmniScraperGraph 全格式抓取实战:从单一 URL 到多源搜索的 Omni 管线解析

Scrapegraph-ai OmniScraperGraph 全格式抓取实战:从单一 URL 到多源搜索的 Omni 管线解析 网页爬虫人工智能AI 应用【免费下载链接】Scrapegraph-aiPython scraper based on AI项目地址https://gitcode.com/GitHub_Trending/sc/Scrapegraph-ai点击查看免费下载本篇技术指南以 examples/omni_scraper_graph/README.md 为核心系统讲解 Scrapegraph-ai 中通用抓取管线 OmniScraperGraph 及其扩展形态 OmniSearchGraph 的完整用法。你将掌握 JSON、XML、HTML、CSV 等多格式数据的统一抽取、网页中图片的自动转文本、自动格式识别与统一 JSON 输出并学会如何通过一套配置驱动网页/本地文件抓取与互联网搜索 多结果聚合两类实际场景。一、Omni 系列要解决什么问题传统爬虫通常针对单一数据格式编写专用解析器JSON 用json.loads、XML 用 XPath、HTML 用选择器一旦目标站点改版或换格式代码就要重写。Scrapegraph-ai 的 Omni 系列管线把格式差异交给 LLM 消化让抓取逻辑与数据格式解耦。从 scrapegraphai/graphs/omni_scraper_graph.py 的类文档可以看到其定位OmniScraper is a scraping pipeline that automates the process of extracting information from web pages using a natural language model to interpret and answer prompts.即用自然语言模型理解页面内容并回答用户提问从而实现对多种数据格式的通用抽取。官方 README 归纳的四个核心能力为多格式数据抽取JSON、XML、HTML、CSV自动格式识别统一数据输出内容转换文本与图片描述融合二、环境准备与依赖安装原文档 Setup 部分给出了三步准备流程展开如下2.1 安装依赖Omni 管线依赖 Scrapegraph-ai 及其底层 LLM 集成组件项目根目录提供了 requirements.txt 与 requirements-dev.txt。推荐使用项目使用的包管理器pip install -r requirements.txt若要从源码运行示例需要 Python 环境中包含scrapegraphai包并确保python-dotenv可用示例代码通过dotenv加载.env。2.2 配置密钥文件仓库的示例目录并没有附带.env.example但结合 examples/omni_scraper_graph/omni_search_openai.py 的加载逻辑可知运行前需要在.env中配置 API 密钥# 复制示例模板如有或直接创建 cp .env.example .env2.3 设置 API Key.env中最核心的变量是OPENAI_APIKEYsk-xxxx注意示例代码读取的是OPENAI_APIKEY而非OPENAI_API_KEY然后通过os.getenv(OPENAI_APIKEY)注入图配置。原文档末尾列出的OPENAI_API_KEY变量名与示例脚本存在差异从源码实测角度omni_search_openai.py应以OPENAI_APIKEY为准若要沿用OPENAI_API_KEY需同步修改os.getenv的参数名。三、快速上手最小可运行示例原文档 Usage 给出的最小示例为from scrapegraphai.graphs import OmniScraperGraph graph OmniScraperGraph() data graph.scrape(https://example.com/data)需要特别指出两点以源码为准构造函数没有默认参数。omni_scraper_graph.py 中__init__强制要求prompt、source、config三个位置参数OmniScraperGraph()空构造会直接报错。该类没有scrape方法对外入口是run()run()在 abstract_graph.py 的子类实现中执行self.graph.execute(inputs)并从最终状态读取answer键。因此真正可运行的最小写法为from scrapegraphai.graphs import OmniScraperGraph omni_scraper_graph OmniScraperGraph( promptList me all the attractions in Chioggia and describe their pictures., sourcehttps://en.wikipedia.org/wiki/Chioggia, config{llm: {model: openai/gpt-4o}}, ) result omni_scraper_graph.run() print(result)其中prompt是自然语言提问source可以是网页 URL 或本地目录/文件路径config是图配置字典至少包含llm。四、GraphConfig 配置详解Omni 图的核心配置项与对应源码取值如下配置项默认值源码出处作用llm.model必填omni_scraper_graph.py指定模型支持openai/gpt-4o这类厂商/模型格式llm.api_key无示例 omni_search_openai.pyOpenAI API 密钥max_images5omni_scraper_graph.py页面中最多处理多少张图片0 或负数则跳过图片转文本max_results3omni_search_graph.pyOmniSearchGraph 联网搜索返回的结果条数上限verboseFalseabstract_graph.py是否打印节点执行日志True 时启用 info 级日志headlessTrueabstract_graph.py是否以无头模式运行浏览器加载页面loader_kwargs{}abstract_graph.py传递给文档加载器的额外参数storage_stateNoneabstract_graph.py浏览器登录态/会话状态timeout480abstract_graph.py节点执行超时秒数cache_pathFalseabstract_graph.py缓存路径配置additional_infoNonegenerate_answer_omni_node.py追加到提示词前的额外上下文schemaNone构造参数 omni_scraper_graph.pyPydantic 输出模式控制结构化输出rate_limit{}abstract_graph.py限流配置requests_per_second、max_retries关于模型命名的细节abstract_graph.py 会解析llm.model若包含/则按厂商/模型拆分如openai/gpt-4o→ provideropenai若不含/则会在内置 models_tokens 表中反查厂商。找不到厂商时会抛ValueError因此建议始终显式携带厂商前缀。max_images 的底层行为max_images同时在图的image_to_text_node生效omni_scraper_graph.py。在 image_to_text_node.py 中当max_images 1时直接返回空图片描述列表用于快速关闭图片处理分支。五、完整示例OmniSearchGraph 实战仓库附带的 omni_search_openai.py 演示的是 Omni 系列的搜索形态。它与 OmniScraperGraph 的差异在于只需一个prompt无需指定source管线会先联网搜索再对每个结果执行抓取。import json import os from dotenv import load_dotenv from scrapegraphai.graphs import OmniSearchGraph from scrapegraphai.utils import prettify_exec_info load_dotenv() openai_key os.getenv(OPENAI_APIKEY) graph_config { llm: { api_key: openai_key, model: openai/gpt-4o, }, max_results: 2, max_images: 1, verbose: True, } omni_search_graph OmniSearchGraph( promptList me all Chioggias famous dishes and describe their pictures., configgraph_config, ) result omni_search_graph.run() print(json.dumps(result, indent2)) graph_exec_info omni_search_graph.get_execution_info() print(prettify_exec_info(graph_exec_info))运行方式python examples/omni_scraper_graph/omni_search_openai.py执行信息查看示例后半部分展示了两个调试 APIget_execution_info()返回self.execution_infoabstract_graph.py即graph.execute()产生的执行追踪信息prettify_exec_info将执行信息格式化为易读文本。六、OmniScraperGraph 内部节点与工作流原 README 只给了使用摘要这里从源码补充完整的管线构成。OmniScraperGraph 在 omni_scraper_graph.py 中构建了一条 4 节点链Fetch → Parse → ImageToText → GenerateAnswerOmni节点分工如下节点输入输出职责FetchNodeurl \| local_dirdoc加载网页或本地文件为文档ParseNodedoc (url \| local_dir)parsed_doc, link_urls, img_urlsHTML 转文本、按 chunk 切分、抽取链接与图片 URLImageToTextNodeimg_urlsimg_desc逐张调用视觉模型生成图片描述GenerateAnswerOmniNodeuser_prompt (...chunks...) img_descanswer结合文本与图片描述生成最终答案输入源自适应omni_scraper_graph.py 会根据source是否以http开头决定input_keyself.input_key url if source.startswith(http) else local_dir即传 URL 走网页抓取传本地路径走本地目录加载FetchNode的输入表达式url | local_dir正是为此设计的。图片转文本的容错处理image_to_text_node.py 对每张图片执行HumanMessage多模态请求若请求失败格式不兼容或模型异常会回退为字符串Error: incompatible image format or model failure.不会中断整条管线。图片模型默认使用 OpenAIImageToText它是ChatOpenAI的封装固定max_tokens256并请求描述provided image。答案生成的分块策略GenerateAnswerOmniNode 依据文档块数选择生成策略单块直接使用TEMPLATE_NO_CHUNKS_OMNI提示词generate_answer_node_omni_prompts.py同时注入页面文本与图片描述多块对每个 chunk 用TEMPLATE_CHUNKS_OMNI并行生成中间答案RunnableParallel再用TEMPLATE_MERGE_OMNI合并去重最终统一为 JSON 输出。三套提示词均要求找不到答案时输出NA并强制输出合法 JSON。schema存在时OpenAI/Mistral 走with_structured_output其他模型走 Pydantic 输出解析器。七、OmniSearchGraph搜索 → 抓取 → 聚合从 omni_search_graph.py 可以看出OmniSearchGraph 由 3 个节点组成SearchInternet → GraphIterator(OmniScraperGraph × N) → MergeAnswers节点职责SearchInternetNode根据user_prompt调用搜索引擎产出urls数量由max_results控制GraphIteratorNode对每个 URL 实例化一个OmniScraperGraph子图执行抓取结果汇总到resultsMergeAnswersNode将各页面的答案合并去重生成最终answer配置的隔离性设计omni_search_graph.py 在构造时对config和schema做了深拷贝safe_deepcopy/deepcopy避免子图实例间共享可变配置。这一设计被 tests/test_omni_search_graph.py 的两个测试直接验证修改外部 config 或 schema 不影响内部副本。测试还确认了图结构为 3 节点 2 边、graph_name OmniSearchGraph以及无答案时run()返回默认字符串No answer found.。八、结构化输出用 schema 约束结果原 README 提到统一数据输出其实现方式是可选传入 Pydantic schemafrom pydantic import BaseModel class Attraction(BaseModel): name: str description: str omni_scraper_graph OmniScraperGraph( promptList all attractions and describe them., sourcehttps://en.wikipedia.org/wiki/Chioggia, config{llm: {model: openai/gpt-4o}}, schemaAttraction, )传schema后generate_answer_omni_node.py 会对ChatOpenAI/ChatMistralAI使用with_structured_output(schema)其他模型使用get_pydantic_output_parser(schema)生成格式指令。未传 schema 时则退回JsonOutputParser输出仍是 JSON 但结构不受约束。九、从文档/测试佐证到的边界与限制基于仓库实际内容使用 Omni 系列需注意多格式支持依赖 LLM 理解而非内建解析器README 宣称支持 JSON、XML、HTML、CSV源码中实际由ParseNode的 HTML→文本转换parse_node.py与 LLM 提示词TEMPLATE_*_OMNI共同承担因此对格式的识别能力受模型能力影响图片处理默认开启max_images默认 5若不希望触发多模态请求需显式设max_images: 0无答案有兜底run()在最终状态缺失answer时返回No answer found.omni_scraper_graph.py密钥变量名示例使用OPENAI_APIKEYomni_search_openai.py与 README 中的OPENAI_API_KEY不一致运行时请以实际读取的变量名为准浏览器与登录态headless、storage_state、loader_kwargs会通过 abstract_graph.py 的set_common_params广播到所有节点用于需要登录或特殊渲染的站点。十、总结Omni 管线的定位与适用场景OmniScraperGraph面向给定 URL/本地文件 用户问题的单源多格式抽取输出统一 JSONOmniSearchGraph面向仅有用户问题的多源搜索场景内部复用 N 个 OmniScraperGraph 子图再合并答案本质上是搜索图与 Omni 抓取图的组合omni_search_graph.py两者共享同一套llm配置格式、max_images图片处理逻辑与 JSON 输出约定可参照 scrapegraphai/graphs/init.py 的导出清单按需导入。若需进一步扩展可在当前仓库中找到全部相关源码管线定义在 scrapegraphai/graphs/omni_scraper_graph.py 与 scrapegraphai/graphs/omni_search_graph.py提示词模板在 scrapegraphai/prompts/generate_answer_node_omni_prompts.py测试用例在 tests/test_omni_search_graph.py运行入口在 examples/omni_scraper_graph/omni_search_openai.py。赞分享网页爬虫人工智能AI 应用【免费下载链接】Scrapegraph-aiPython scraper based on AI项目地址https://gitcode.com/GitHub_Trending/sc/Scrapegraph-ai点击查看免费下载相关推荐GraphRAG Inputs 输入加载实战从多格式文档到 TextDocument 的统一读取管线GraphRAG Inputs 输入加载实战从多格式文档到 TextDocument 的统一读取管线 GraphRAG 索引流水线Indexing Pipe人工智能RAG知识图谱数据工程大模型AirSim 图像 API 实战指南从单张抓取到多模态视觉数据管线AirSim 图像 API 实战指南从单张抓取到多模态视觉数据管线 本指南以 AirSim 官方文档 docs/image_apis.md https://l自动驾驶人工智能深度学习强化学习计算机视觉科研BBOT 自定义 YARA 规则实战借助 excavate 模块在 HTTP 响应中深度挖掘敏感信息BBOT 自定义 YARA 规则实战借助 excavate 模块在 HTTP 响应中深度挖掘敏感信息 导读 BBOT递归互联网扫描器内置的 excavat网页爬虫人工智能AI 应用上一篇Hello-CTF密码学基础从古典密码到现代加密的完整解析下一篇从安装到生成go-jsonschema命令行工具使用详解新手也能轻松掌握创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表