网站元素抓取工具
ScrapeElementFromWebsiteTool
Section titled “ScrapeElementFromWebsiteTool”ScrapeElementFromWebsiteTool 旨在使用 CSS 选择器从网站中提取特定元素。该工具让 CrewAI 智能体能够抓取网页中的目标内容,因此在只需要网页特定部分的数据提取任务中非常有用。
要使用此工具,你需要安装所需依赖:
uv add requests beautifulsoup4要有效使用 ScrapeElementFromWebsiteTool,请按以下步骤进行:
- 安装依赖:使用上面的命令安装所需包。
- 确定 CSS 选择器:确定你要从网站提取的元素对应的 CSS 选择器。
- 初始化工具:使用必要参数创建工具实例。
下面示例演示如何使用 ScrapeElementFromWebsiteTool 从网站中提取特定元素:
from crewai import Agent, Task, Crewfrom 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,)
# 创建并运行 crewcrew = 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 选择器从网站中提取特定元素的强大方式。通过让智能体只针对所需内容进行抓取,它使网页抓取任务更高效、更聚焦。对于需要从网页中提取特定信息的数据提取、内容监控和研究任务,这个工具都非常有用。