跳转到内容

网站元素抓取工具

ScrapeElementFromWebsiteTool 旨在使用 CSS 选择器从网站中提取特定元素。该工具让 CrewAI 智能体能够抓取网页中的目标内容,因此在只需要网页特定部分的数据提取任务中非常有用。

要使用此工具,你需要安装所需依赖:

Terminal window
uv add requests beautifulsoup4

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

  1. 安装依赖:使用上面的命令安装所需包。
  2. 确定 CSS 选择器:确定你要从网站提取的元素对应的 CSS 选择器。
  3. 初始化工具:使用必要参数创建工具实例。

下面示例演示如何使用 ScrapeElementFromWebsiteTool 从网站中提取特定元素:

from crewai import Agent, Task, Crew
from crewai_tools import ScrapeElementFromWebsiteTool
# 初始化工具
scrape_tool = ScrapeElementFromWebsiteTool()
# 定义一个使用该工具的智能体
web_scraper_agent = Agent(
role="Web Scraper",
goal="从网站中提取特定信息",
backstory="擅长网页抓取、可以从网页中提取目标内容的专家。",
tools=[scrape_tool],
verbose=True,
)
# 示例任务:从新闻网站提取标题
scrape_task = Task(
description="提取 CNN 首页的主要标题。使用 CSS 选择器 '.headline' 定位标题元素。",
expected_output="CNN 主页上的主要标题列表。",
agent=web_scraper_agent,
)
# 创建并运行 crew
crew = Crew(agents=[web_scraper_agent], tasks=[scrape_task])
result = crew.kickoff()

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

# 使用预定义参数初始化工具
scrape_tool = ScrapeElementFromWebsiteTool(
website_url="https://www.example.com",
css_element=".main-content"
)

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

  • website_url:可选。要抓取的网站 URL。如果在初始化时提供,智能体在使用该工具时就无需再指定它。
  • css_element:可选。要提取元素的 CSS 选择器。如果在初始化时提供,智能体在使用该工具时就无需再指定它。
  • cookies:可选。包含随请求发送的 cookie 的字典。这对于需要认证的网站很有用。

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

  • website_url:要抓取的网站 URL。
  • css_element:要提取元素的 CSS 选择器。

该工具会返回与 CSS 选择器匹配的所有元素的文本内容,并用换行符连接。

# 使用该工具与智能体配合的示例
web_scraper_agent = Agent(
role="Web Scraper",
goal="从网站中提取特定元素",
backstory="擅长使用 CSS 选择器提取目标内容的网页抓取专家。",
tools=[scrape_tool],
verbose=True,
)
# 为智能体创建任务以提取特定元素
extract_task = Task(
description="""
从 example.com 的精选产品区域提取所有产品标题。
使用 CSS 选择器 '.product-title' 定位标题元素。
""",
expected_output="网站上的产品标题列表",
agent=web_scraper_agent,
)
# 通过 crew 运行任务
crew = Crew(agents=[web_scraper_agent], tasks=[extract_task])
result = crew.kickoff()

ScrapeElementFromWebsiteTool 使用 requests 库获取网页,并使用 BeautifulSoup 解析 HTML 并提取指定元素:

class ScrapeElementFromWebsiteTool(BaseTool):
name: str = "Read a website content"
description: str = "A tool that can be used to read a website content."
# Implementation details...
def _run(self, **kwargs: Any) -> Any:
website_url = kwargs.get("website_url", self.website_url)
css_element = kwargs.get("css_element", self.css_element)
page = requests.get(
website_url,
headers=self.headers,
cookies=self.cookies if self.cookies else {},
)
parsed = BeautifulSoup(page.content, "html.parser")
elements = parsed.select(css_element)
return "\n".join([element.get_text() for element in elements])

ScrapeElementFromWebsiteTool 提供了一种使用 CSS 选择器从网站中提取特定元素的强大方式。通过让智能体只针对所需内容进行抓取,它使网页抓取任务更高效、更聚焦。对于需要从网页中提取特定信息的数据提取、内容监控和研究任务,这个工具都非常有用。