Scrapegraph-ai:一句话让网页变结构化数据
【免费下载链接】Scrapegraph-aiPython scraper based on AI项目地址: https://gitcode.com/GitHub_Trending/sc/Scrapegraph-ai
做竞品调研时,你大概也遇到过这种活:把十几家公司的官网描述、创始人名单、社媒入口逐一抄进表格。手工复制太慢,写选择器又烦——每家页面结构都不一样,div.news > h2这种 XPath 维护起来心累。Scrapegraph-ai 是一个基于 LLM 和图(Graph)逻辑的 Python 网页抓取库:你用一句自然语言告诉它要什么,它直接返回结构化 JSON,页面获取、清洗、提问、作答都在内部完成。
项目定位:AI 驱动的 Python 网页抓取库
一句话概括:Scrapegraph-ai 把「抓取网页 → 清洗内容 → 让 LLM 按你的提问作答」封装成一条条可插拔的流水线,输入是一个 prompt 和一个 source(网址或本地文件路径),输出是一个字典。
它适合:页面结构不稳定或经常变、需要快速验证数据能提取出来、目标页面数量不多(个位数到几十个)的场景,包括 HTML、JSON、XML、Markdown 等本地文档的解析。
它不适合:成千上万页面的大规模采集。每一次抓取都要真实调用 LLM,有 token 成本和延迟,批量跑既慢又贵。这类场景更适合先用它的 ScriptCreatorGraph 生成一段固定脚本,再脱离 LLM 批量执行。
安装与第一次运行 Scrapegraph-ai
环境上只需要 Python >=3.10(项目pyproject.toml声明的是>=3.10,<4.0)。官方建议在虚拟环境里装,避免依赖冲突。
pip install scrapegraphai playwright install # 抓取网页内容必需,安装浏览器内核 ollama pull llama3.2 # 拉取一个本地模型,零 API 成本如果你要改源码而不是装发布版,可以克隆仓库后pip install -e .:git clone https://gitcode.com/GitHub_Trending/sc/Scrapegraph-ai。
装好后用最小示例跑通第一个可见结果。下面这段直接就能执行,模型走 Ollama 本地部署,不需要任何 API key:
from scrapegraphai.graphs import SmartScraperGraph graph_config = { "llm": {"model": "ollama/llama3.2", "format": "json"}, # 本地模型,JSON 输出 "verbose": True, # 控制台打印调试信息 "headless": True, # 隐藏浏览器窗口 } graph = SmartScraperGraph( prompt="提取公司描述、创始人和社交媒体链接", source="https://scrapegraphai.com/", config=graph_config, ) print(graph.run())run()返回一个字典,键由 LLM 按 prompt 语义生成,典型结果是description、founders(姓名/职位/LinkedIn 的列表)、social_media_links这类字段。看到输出后,后面再谈原理。
从 URL 到 JSON:数据在图里怎么流动
以最常用的 SmartScraperGraph 为例,run()内部按固定链路串起三类节点,全部定义在scrapegraphai/nodes/目录:
- FetchNode:用 Playwright 打开页面取回 HTML。
source不以http开头时,它改为读取本地文件,这就是「同一个图也能解析本地文档」的原因。 - ParseNode:剥掉 HTML 标签,按
model_tokens把长文切成 LLM 能装下的片段。 - GenerateAnswerNode:把你的 prompt 和页面片段一起交给 LLM,产出最终答案。
format: "json"让它输出字典而不是自由文本。
配置项会改变图的形状:reattempt: True时插入一个 ConditionalNode,答案是空或"NA"就自动再问一次 LLM 重新生成;html_mode决定 ParseNode 是否保留原始 HTML 标签;reasoning再前置一个推理节点。换模型也只需改llm段——本地模型写ollama/前缀(Ollama 默认地址http://localhost:11434,可用base_url覆盖),云端模型加一行api_key即可,比如openai/gpt-4o-mini。
完整用例:提取公司创始人并校验开销
把任务具体化:从公司官网提取所有创始人,并且要能回答「这次抓取烧了多少 token」。锁字段用 Pydantic 模型,校验用库自带的执行信息工具,导入只有两行:from pydantic import BaseModel, Field和from scrapegraphai.utils import prettify_exec_info。
class FounderInfo(BaseModel): name: str = Field(description="创始人姓名") role: str = Field(description="职位") linkedin: str = Field(description="LinkedIn 链接") graph = SmartScraperGraph( prompt="列出该公司的创始人", source="https://scrapegraphai.com/", schema=FounderInfo, # 用 Pydantic 模型锁定输出字段 config=graph_config, ) graph.run() print(prettify_exec_info(graph.get_execution_info())) # 逐节点 Token/成本/耗时schema参数把输出钉死在FounderInfo的三个字段上,LLM 不会再自由发挥键名。prettify_exec_info打印的表格里有每个节点的 Token 数、美元成本和耗时,调 prompt 或换模型时,这是你判断「改动值不值」的依据。
多个页面共用同一个 prompt 时,换成SmartScraperMultiGraph,source传列表即可,LLM 调用并行执行:
from scrapegraphai.graphs import SmartScraperMultiGraph graph = SmartScraperMultiGraph( prompt="总结这个页面的主营业务", source=["https://a.example.com/", "https://b.example.com/"], config=graph_config, ) print(graph.run())与传统爬虫方案的对比
| 维度 | Scrapegraph-ai | 传统选择器(BeautifulSoup 等) | Selenium 自动化 |
|---|---|---|---|
| 页面结构变化 | 基本不敏感,prompt 不变即可 | 选择器全部重写 | 定位器需维护 |
| 动态渲染页面 | Playwright 直接等待渲染完成 | 拿到的可能只是空壳 HTML | 支持 |
| 输出形态 | 自然语言驱动的 JSON 字典 | 需自己组装结构 | 需自己组装结构 |
| 单页成本 | 每次调用 LLM,有 token 费用和秒级延迟 | 近乎为零 | 近乎为零 |
| 千页级批量 | 不适合,可先生成脚本再批量 | 适合 | 适合但慢 |
判断标准很简单:页面少、结构乱、要快,用 Scrapegraph-ai;页面多、结构稳定,回到传统方案,或者让它帮你生成脚本。
常见问题 FAQ
必须买 API key 吗?不必须。装好 Ollama、ollama pull一个模型后就能全本地运行。想用云端模型(OpenAI、Groq、Azure、Gemini 等),在llm配置里加api_key一行即可。
提取结果不准确或为空怎么办?配置里加"reattempt": True,空答案会自动重试一次;用additional_info往默认 prompt 里补充背景;用schema锁定字段。这三个是官方配置文档里列出的常用开关。
为什么运行时会闪出一个浏览器窗口?headless: False时 Playwright 会打开浏览器、取完 HTML 立刻关闭,方便你确认抓的是哪个页面。生产环境设headless: True即可。
能处理本地文件而不是网址吗?可以。source不以http开头就按本地路径处理,.html、.md、.json、.xml文件都可以直接喂进去,仓库里各格式都有现成示例。
怎么控制抓取行为?代理、缓存目录、附加上下文都走config:loader_kwargs.proxy配代理(支持自动轮换或自有代理服务器),cache_path设置缓存目录,additional_info补充说明。完整清单见下方配置文档。
进阶方向与资源
往上走的路大致有三条:用 SearchGraph 从搜索引擎前 n 条结果里批量提取(max_results控制条数);用 ScriptCreatorGraph 让 LLM 写一段固定 Python 脚本,之后脱离模型批量跑;装scrapegraphai[burr]后在配置里加burr_kwargs,用 Burr 的 Web 界面实时观察图执行状态。
仓库内的入口都给了相对路径,不用满世界找:
- 各流水线示例:examples/,按 ollama / openai 分目录
- 配置项详解:docs/source/scrapers/graph_config.rst
- 支持的模型清单:docs/source/scrapers/llm.rst
- 所有图的源码:scrapegraphai/graphs/
另提醒一句:库默认收集匿名遥测,介意可以在环境变量里设SCRAPEGRAPHAI_TELEMETRY_ENABLED=false关闭。把第一个页面的 JSON 跑出来,剩下的只是换 prompt 和换图的事。
【免费下载链接】Scrapegraph-aiPython scraper based on AI项目地址: https://gitcode.com/GitHub_Trending/sc/Scrapegraph-ai
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考