Selenium 抓取器
SeleniumScrapingTool
Section titled “SeleniumScrapingTool”SeleniumScrapingTool 专为高效网页抓取任务打造。
它允许通过 CSS 选择器精确提取网页中的内容。
其设计适用于广泛的抓取需求,并且对任意提供的网站 URL 都具有灵活性。
要使用此工具,你需要安装 CrewAI tools 包和 Selenium:
pip install 'crewai[tools]'uv add selenium webdriver-manager你还需要确保系统已安装 Chrome,因为该工具使用 Chrome WebDriver 进行浏览器自动化。
下面示例演示如何将 SeleniumScrapingTool 与 CrewAI 智能体一起使用:
from crewai import Agent, Task, Crew, Processfrom crewai_tools import SeleniumScrapingTool
# 初始化工具selenium_tool = SeleniumScrapingTool()
# 定义一个使用该工具的智能体web_scraper_agent = Agent( role="Web Scraper", goal="使用 Selenium 从网站中提取信息", backstory="擅长从动态网站提取内容的网页抓取专家。", tools=[selenium_tool], verbose=True,)
# 示例任务:从网站抓取内容scrape_task = Task( description="提取 example.com 主页的主要内容。使用 CSS 选择器 'main' 定位主内容区域。", expected_output="example.com 主页的主要内容。", agent=web_scraper_agent,)
# 创建并运行 crewcrew = Crew( agents=[web_scraper_agent], tasks=[scrape_task], verbose=True, process=Process.sequential,)result = crew.kickoff()你也可以使用预定义参数初始化工具:
# 使用预定义参数初始化工具selenium_tool = SeleniumScrapingTool( website_url='https://example.com', css_element='.main-content', wait_time=5)
# 定义一个使用该工具的智能体web_scraper_agent = Agent( role="Web Scraper", goal="使用 Selenium 从网站中提取信息", backstory="擅长从动态网站提取内容的网页抓取专家。", tools=[selenium_tool], verbose=True,)SeleniumScrapingTool 在初始化时接受以下参数:
- website_url:可选。要抓取的网站 URL。如果在初始化时提供,智能体在使用该工具时就无需再指定它。
- css_element:可选。要提取元素的 CSS 选择器。如果在初始化时提供,智能体在使用该工具时就无需再指定它。
- cookie:可选。包含 cookie 信息的字典,适用于模拟登录会话以访问受限内容。
- wait_time:可选。抓取前的延迟(秒),用于让网站和任何动态内容充分加载。默认值为
3秒。 - return_html:可选。是否返回 HTML 内容而不仅仅是文本。默认值为
False。
在与智能体一起使用时,智能体需要提供以下参数(除非它们已在初始化时指定):
- website_url:必需。要抓取的网站 URL。
- css_element:必需。要提取元素的 CSS 选择器。
智能体集成示例
Section titled “智能体集成示例”下面是如何将 SeleniumScrapingTool 与 CrewAI 智能体集成的更详细示例:
from crewai import Agent, Task, Crew, Processfrom crewai_tools import SeleniumScrapingTool
# 初始化工具selenium_tool = SeleniumScrapingTool()
# 定义一个使用该工具的智能体web_scraper_agent = Agent( role="Web Scraper", goal="从动态网站中提取并分析信息", backstory="""你是一名擅长从需要浏览器自动化的动态网站中提取 内容的网页抓取专家。你对 CSS 选择器有丰富的知识,能够识别 任意网站上用于定位特定内容的正确选择器。""", tools=[selenium_tool], verbose=True,)
# 为智能体创建任务scrape_task = Task( description=""" 从 {website_url} 这个新闻网站提取以下信息:
1. 所有精选文章的标题(CSS 选择器:'.headline') 2. 这些文章的发布日期(CSS 选择器:'.pub-date') 3. 如有作者姓名,则提取作者名(CSS 选择器:'.author')
将这些信息整理成结构化格式,并将每篇文章的详情归组。 """, expected_output="包含文章标题、发布日期和作者的结构化列表。", agent=web_scraper_agent,)
# 运行任务crew = Crew( agents=[web_scraper_agent], tasks=[scrape_task], verbose=True, process=Process.sequential,)result = crew.kickoff(inputs={"website_url": "https://news-example.com"})SeleniumScrapingTool 使用 Selenium WebDriver 自动化浏览器交互:
class SeleniumScrapingTool(BaseTool): name: str = "Read a website content" description: str = "A tool that can be used to read a website content." args_schema: Type[BaseModel] = SeleniumScrapingToolSchema
def _run(self, **kwargs: Any) -> Any: website_url = kwargs.get("website_url", self.website_url) css_element = kwargs.get("css_element", self.css_element) return_html = kwargs.get("return_html", self.return_html) driver = self._create_driver(website_url, self.cookie, self.wait_time)
content = self._get_content(driver, css_element, return_html) driver.close()
return "\n".join(content)该工具会执行以下步骤:
- 创建一个无头 Chrome 浏览器实例
- 导航到指定 URL
- 等待指定时间以让页面加载完成
- 如果提供了 cookie,则添加它们
- 根据 CSS 选择器提取内容
- 以文本或 HTML 形式返回提取内容
- 关闭浏览器实例
处理动态内容
Section titled “处理动态内容”SeleniumScrapingTool 对于抓取通过 JavaScript 加载的动态内容的网站特别有用。通过使用真实的浏览器实例,它可以:
- 在页面上执行 JavaScript
- 等待动态内容加载
- 在需要时与元素交互
- 提取仅靠简单 HTTP 请求无法获取的内容
你可以调整 wait_time 参数,以确保所有动态内容在提取前都已加载完成。
SeleniumScrapingTool 提供了一种通过浏览器自动化从网站中提取内容的强大方式。通过让智能体像真实用户一样与网站交互,它使抓取动态内容成为可能,而这些内容使用更简单的方法往往难以或无法提取。对于涉及现代 Web 应用、JavaScript 渲染内容的研究、数据收集和监控任务,这个工具非常有用。