Scrapegraph 抓取工具
ScrapegraphScrapeTool
Section titled “ScrapegraphScrapeTool”ScrapegraphScrapeTool 旨在利用 Scrapegraph AI 的 SmartScraper API 智能提取网站内容。该工具提供了由 AI 驱动的高级网页抓取能力,适合有针对性的数据收集和内容分析任务。与传统网页抓取器不同,它能够理解网页的上下文和结构,并根据自然语言提示提取最相关的信息。
要使用此工具,你需要安装 Scrapegraph Python 客户端:
uv add scrapegraph-py你还需要将 Scrapegraph API key 设置为环境变量:
export SCRAPEGRAPH_API_KEY="your_api_key"你可以在 Scrapegraph AI 获取 API key。
要有效使用 ScrapegraphScrapeTool,请按以下步骤进行:
- 安装依赖:使用上面的命令安装所需包。
- 设置 API Key:将 Scrapegraph API key 设置为环境变量,或在初始化时提供。
- 初始化工具:使用必要参数创建工具实例。
- 定义提取提示词:使用自然语言提示词指导特定内容的提取。
下面示例演示如何使用 ScrapegraphScrapeTool 从网站中提取内容:
from crewai import Agent, Task, Crewfrom 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,)
# 创建并运行 crewcrew = 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 理解网页结构并从网站中提取内容的强大方式。通过让智能体使用自然语言提示词定位特定信息,它使网页抓取任务更高效、更聚焦。对于需要从网页中提取特定信息的数据提取、内容监控和研究任务,这个工具都非常有用。