跳转到内容

Scrapegraph 抓取工具

ScrapegraphScrapeTool 旨在利用 Scrapegraph AI 的 SmartScraper API 智能提取网站内容。该工具提供了由 AI 驱动的高级网页抓取能力,适合有针对性的数据收集和内容分析任务。与传统网页抓取器不同,它能够理解网页的上下文和结构,并根据自然语言提示提取最相关的信息。

要使用此工具,你需要安装 Scrapegraph Python 客户端:

Terminal window
uv add scrapegraph-py

你还需要将 Scrapegraph API key 设置为环境变量:

Terminal window
export SCRAPEGRAPH_API_KEY="your_api_key"

你可以在 Scrapegraph AI 获取 API key。

要有效使用 ScrapegraphScrapeTool,请按以下步骤进行:

  1. 安装依赖:使用上面的命令安装所需包。
  2. 设置 API Key:将 Scrapegraph API key 设置为环境变量,或在初始化时提供。
  3. 初始化工具:使用必要参数创建工具实例。
  4. 定义提取提示词:使用自然语言提示词指导特定内容的提取。

下面示例演示如何使用 ScrapegraphScrapeTool 从网站中提取内容:

from crewai import Agent, Task, Crew
from crewai_tools import ScrapegraphScrapeTool
# 初始化工具
scrape_tool = ScrapegraphScrapeTool(api_key="your_api_key")
# 定义一个使用该工具的智能体
web_scraper_agent = Agent(
role="Web Scraper",
goal="从网站中提取特定信息",
backstory="擅长网页抓取、可以从网页中提取目标内容的专家。",
tools=[scrape_tool],
verbose=True,
)
# 示例任务:从电商网站提取产品信息
scrape_task = Task(
description="从 example.com 的精选产品区域提取产品名称、价格和描述。",
expected_output="包含名称、价格和描述的结构化产品信息列表。",
agent=web_scraper_agent,
)
# 创建并运行 crew
crew = Crew(agents=[web_scraper_agent], tasks=[scrape_task])
result = crew.kickoff()

你也可以使用预定义参数初始化工具:

# 使用预定义参数初始化工具
scrape_tool = ScrapegraphScrapeTool(
website_url="https://www.example.com",
user_prompt="提取所有产品价格和描述",
api_key="your_api_key"
)

ScrapegraphScrapeTool 在初始化时接受以下参数:

  • api_key:可选。你的 Scrapegraph API key。如果未提供,它会查找 SCRAPEGRAPH_API_KEY 环境变量。
  • website_url:可选。要抓取的网站 URL。如果在初始化时提供,智能体在使用该工具时就无需再指定它。
  • user_prompt:可选。用于内容提取的自定义指令。如果在初始化时提供,智能体在使用该工具时就无需再指定它。
  • enable_logging:可选。是否为 Scrapegraph 客户端启用日志。默认值为 False

当你与智能体一起使用 ScrapegraphScrapeTool 时,智能体需要提供以下参数(除非它们已在初始化时指定):

  • website_url:要抓取的网站 URL。
  • user_prompt:可选。用于内容提取的自定义指令。默认值为 “Extract the main content of the webpage”。

该工具会根据提供的提示词返回提取出的内容。

# 使用该工具与智能体配合的示例
web_scraper_agent = Agent(
role="Web Scraper",
goal="从网站中提取特定信息",
backstory="擅长网页抓取、可以从网页中提取目标内容的专家。",
tools=[scrape_tool],
verbose=True,
)
# 为智能体创建任务以提取特定内容
extract_task = Task(
description="提取 example.com 的主标题和摘要",
expected_output="网站的主标题和摘要",
agent=web_scraper_agent,
)
# 运行任务
crew = Crew(agents=[web_scraper_agent], tasks=[extract_task])
result = crew.kickoff()

ScrapegraphScrapeTool 可能会抛出以下异常:

  • ValueError:API key 缺失或 URL 格式无效时。
  • RateLimitError:当 API 速率限制被超出时。
  • RuntimeError:当抓取操作失败(网络问题、API 错误)时。

建议为智能体提供关于潜在错误的妥善处理指令:

# 创建包含错误处理指令的任务
robust_extract_task = Task(
description="""
提取 example.com 的主标题。
请注意你可能会遇到以下错误:
- URL 格式无效
- API key 缺失
- 触发速率限制
- 网络或 API 错误
如果遇到任何错误,请清楚说明哪里出了问题,
并建议可能的解决方案。
""",
expected_output="提取到的标题,或者清楚的错误说明",
agent=web_scraper_agent,
)

Scrapegraph API 的速率限制会根据订阅计划而变化。请考虑以下最佳实践:

  • 在处理多个 URL 时,在请求之间加入适当延迟。
  • 在应用中优雅地处理速率限制错误。
  • 在 Scrapegraph 控制台中检查你的 API 计划限制。

ScrapegraphScrapeTool 使用 Scrapegraph Python 客户端与 SmartScraper API 交互:

class ScrapegraphScrapeTool(BaseTool):
"""
使用 Scrapegraph AI 智能抓取网站内容的工具。
"""
# Implementation details...
def _run(self, **kwargs: Any) -> Any:
website_url = kwargs.get("website_url", self.website_url)
user_prompt = (
kwargs.get("user_prompt", self.user_prompt)
or "Extract the main content of the webpage"
)
if not website_url:
raise ValueError("website_url is required")
# 验证 URL 格式
self._validate_url(website_url)
try:
# 发起 SmartScraper 请求
response = self._client.smartscraper(
website_url=website_url,
user_prompt=user_prompt,
)
return response
# Error handling...

ScrapegraphScrapeTool 提供了一种利用 AI 理解网页结构并从网站中提取内容的强大方式。通过让智能体使用自然语言提示词定位特定信息,它使网页抓取任务更高效、更聚焦。对于需要从网页中提取特定信息的数据提取、内容监控和研究任务,这个工具都非常有用。