> ## Documentation Index
> Fetch the complete documentation index at: https://crewai.burt.pe.kr/llms.txt
> Use this file to discover all available pages before exploring further.

# Spider Scraper

> SpiderTool은 Spider를 사용해 지정된 웹사이트의 콘텐츠를 추출하고 읽도록 설계되었다.

# `SpiderTool`

## 설명

[Spider](https://spider.cloud/?ref=crewai)는 [가장 빠른](https://github.com/spider-rs/spider/blob/main/benches/BENCHMARKS.md#benchmark-results) 오픈 소스 스크래퍼이자 크롤러로, LLM(대형 언어 모델)에 바로 사용할 수 있는 데이터를 제공한다. 이 도구는 어떤 웹사이트든 순수한 HTML, 마크다운, 메타데이터 또는 텍스트로 변환하며, AI를 활용해 커스텀 액션으로 크롤링할 수 있는 기능을 제공한다.

## 설치

`SpiderTool`을 사용하려면 [Spider SDK](https://pypi.org/project/spider-client/)와 `crewai[tools]` SDK를 다운로드해야 한다:

```shell theme={null}
pip install spider-client 'crewai[tools]'
```

## 예제

이 예제는 `SpiderTool`을 사용해 에이전트가 웹사이트를 스크랩하고 크롤링할 수 있도록 설정하는 방법을 보여준다. Spider API에서 반환된 데이터는 이미 LLM에서 바로 사용할 수 있도록 준비되어 있으므로 추가적인 정제 작업이 필요하지 않다.

```python theme={null}
from crewai_tools import SpiderTool

def main():
    spider_tool = SpiderTool()

    searcher = Agent(
        role="웹 리서치 전문가",
        goal="특정 URL에서 관련 정보를 찾는다",
        backstory="웹을 매우 잘 활용하는 전문 웹 리서치 전문가",
        tools=[spider_tool],
        verbose=True,
    )

    return_metadata = Task(
        description="https://spider.cloud를 스크랩하고, 1개의 제한과 메타데이터 활성화",
        expected_output="spider.cloud의 메타데이터와 10단어 요약",
        agent=searcher
    )

    crew = Crew(
        agents=[searcher],
        tasks=[
            return_metadata,
        ],
        verbose=2
    )

    crew.kickoff()

if __name__ == "__main__":
    main()
```

## 인자

| 인자                      | 타입       | 설명                                                                                                            |
| :---------------------- | :------- | :------------------------------------------------------------------------------------------------------------ |
| **api\_key**            | `string` | Spider API 키를 지정한다. 지정하지 않으면 환경 변수에서 `SPIDER_API_KEY`를 찾는다.                                                   |
| **params**              | `object` | 요청에 대한 선택적 매개변수. 기본값은 `{"return_format": "markdown"}`로, LLM에 최적화된 콘텐츠를 반환한다.                                  |
| **request**             | `string` | 수행할 요청 타입 (`http`, `chrome`, `smart`). `smart`는 기본적으로 HTTP를 사용하며, 필요한 경우 JavaScript 렌더링으로 전환한다.               |
| **limit**               | `int`    | 웹사이트당 최대 크롤링 페이지 수. `0`으로 설정하거나 생략하면 제한 없이 크롤링한다.                                                             |
| **depth**               | `int`    | 최대 크롤링 깊이. `0`으로 설정하면 제한 없이 크롤링한다.                                                                            |
| **cache**               | `bool`   | HTTP 캐싱을 활성화해 반복 실행 속도를 높인다. 기본값은 `true`이다.                                                                   |
| **budget**              | `object` | 크롤링 페이지에 대한 경로 기반 제한을 설정한다. 예를 들어 `{"*":1}`은 루트 페이지만 크롤링한다.                                                   |
| **locale**              | `string` | 요청에 대한 로케일을 지정한다. 예: `en-US`.                                                                                 |
| **cookies**             | `string` | 요청에 사용할 HTTP 쿠키를 지정한다.                                                                                        |
| **stealth**             | `bool`   | Chrome 요청에 대해 탐지를 피하기 위해 스텔스 모드를 활성화한다. 기본값은 `true`이다.                                                        |
| **headers**             | `object` | 모든 요청에 대한 HTTP 헤더를 키-값 쌍의 맵으로 지정한다.                                                                           |
| **metadata**            | `bool`   | 페이지와 콘텐츠에 대한 메타데이터를 저장해 AI 상호 운용성을 높인다. 기본값은 `false`이다.                                                       |
| **viewport**            | `object` | Chrome 뷰포트의 크기를 설정한다. 기본값은 `800x600`이다.                                                                       |
| **encoding**            | `string` | 인코딩 타입을 지정한다. 예: `UTF-8`, `SHIFT_JIS`.                                                                        |
| **subdomains**          | `bool`   | 크롤링에 서브도메인을 포함시킨다. 기본값은 `false`이다.                                                                            |
| **user\_agent**         | `string` | 커스텀 HTTP 사용자 에이전트를 지정한다. 기본값은 랜덤 에이전트이다.                                                                      |
| **store\_data**         | `bool`   | 요청에 대한 데이터 저장을 활성화한다. `storageless`가 설정된 경우 이를 재정의한다. 기본값은 `false`이다.                                         |
| **gpt\_config**         | `object` | AI가 크롤링 액션을 생성하도록 허용하며, `"prompt"`에 대한 배열을 통해 선택적 체이닝 단계를 설정할 수 있다.                                           |
| **fingerprint**         | `bool`   | Chrome에 대한 고급 지문 인식을 활성화한다.                                                                                   |
| **storageless**         | `bool`   | AI 임베딩을 포함한 모든 데이터 저장을 방지한다. 기본값은 `false`이다.                                                                  |
| **readability**         | `bool`   | [Mozilla의 readability](https://github.com/mozilla/readability)를 통해 콘텐츠를 사전 처리해 읽기 쉽게 만든다. LLM에 적합한 콘텐츠를 제공한다. |
| **return\_format**      | `string` | 데이터 반환 형식을 지정한다: `markdown`, `raw`, `text`, `html2text`. 기본 페이지 형식을 원한다면 `raw`를 사용한다.                         |
| **proxy\_enabled**      | `bool`   | 네트워크 수준의 차단을 피하기 위해 고성능 프록시를 활성화한다.                                                                           |
| **query\_selector**     | `string` | 마크업에서 콘텐츠를 추출하기 위한 CSS 쿼리 선택자를 지정한다.                                                                          |
| **full\_resources**     | `bool`   | 웹사이트에 연결된 모든 리소스를 다운로드한다.                                                                                     |
| **request\_timeout**    | `int`    | 요청에 대한 타임아웃을 초 단위로 설정한다 (5-60). 기본값은 `30`이다.                                                                  |
| **run\_in\_background** | `bool`   | 요청을 백그라운드에서 실행한다. 데이터 저장 및 대시보드 크롤링 트리거에 유용하다. `storageless`가 설정된 경우 효과가 없다.                                  |
