> ## Documentation Index
> Fetch the complete documentation index at: https://developer.qaip.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# クロール

> QAIPでWebサイトをクロールしてコンテンツを取得

WebサイトのURLを指定してリンクを辿るクロールや、URLリストを指定した直接ダウンロードによって、コンテンツを収集します。

ジョブ作成時に「URL指定」と「URLリスト」の2つのモードを選択できます。

| モード        | 用途                       |
| ---------- | ------------------------ |
| **URL指定**  | 開始URLからリンクを辿ってサイト全体をクロール |
| **URLリスト** | 指定したURLのファイルを直接ダウンロード    |

## クロールジョブの作成（URL指定）

開始URLからリンクを辿り、同一ホスト（開始URLと同じホスト名）のページをクロールします。

```mermaid theme={null}
flowchart TD
   A["スタート: example.com"] --> B[example.com/docs]
   A --> C[example.com/foo.html]
   C --> D[example.com/bar.html]
   A -->|❌ 異なるドメイン| E[sub.example.com]

   classDef grayed fill:#ccc,stroke:#888,color:#666;
   class E grayed;
```

<Steps>
  <Step title="ダッシュボードから「クロール」を選択">
    <img src="https://mintcdn.com/qaip/JULJYwLLg6eNrOP5/images/quickstart/crawl_dashboard.png?fit=max&auto=format&n=JULJYwLLg6eNrOP5&q=85&s=b3d252940ad66eeeb548b20c0d41ef20" alt="クロールのダッシュボード" width="1913" height="977" data-path="images/quickstart/crawl_dashboard.png" />
  </Step>

  <Step title="「新規ジョブ作成」をクリック">
    <img src="https://mintcdn.com/qaip/UvOXSE3V3T79bHXg/images/quickstart/crawl_job.png?fit=max&auto=format&n=UvOXSE3V3T79bHXg&q=85&s=04290dcea2b04501b4f28dede45e2f49" alt="クロールのジョブ作成モーダル" width="1920" height="1765" data-path="images/quickstart/crawl_job.png" />
  </Step>

  <Step title="「URL指定」タブで必要な情報を入力">
    * **URL**: クロール開始地点のURL
    * **最大深度**: リンクを辿る階層数（デフォルト: 1）
    * **最大取得ファイル数**: 取得するファイル数（デフォルト: 100）
  </Step>
</Steps>

<Warning>
  取得でエラーが発生した場合は最大取得ファイル数より少ない数で終了することがあります。
</Warning>

<Warning>
  クロールに時間がかかりすぎる場合はジョブが停止します。<br />
  必要に応じて最大深度か最大取得ファイル数を調整するか、パスフィルターを設定してください。
</Warning>

## クロールジョブの作成（URLリスト）

ダウンロードしたいURLが決まっている場合は、URLリストモードを使用してファイルを直接ダウンロードできます。リンクを辿る必要がないため、異なるドメインのURLも混在させることができます。

<Steps>
  <Step title="ダッシュボードから「クロール」を選択">
    <img src="https://mintcdn.com/qaip/JULJYwLLg6eNrOP5/images/quickstart/crawl_dashboard.png?fit=max&auto=format&n=JULJYwLLg6eNrOP5&q=85&s=b3d252940ad66eeeb548b20c0d41ef20" alt="クロールのダッシュボード" width="1913" height="977" data-path="images/quickstart/crawl_dashboard.png" />
  </Step>

  <Step title="「新規ジョブ作成」をクリック、「URLリスト」タブを選択">
    <img src="https://mintcdn.com/qaip/UvOXSE3V3T79bHXg/images/quickstart/crawl_job_urllist.png?fit=max&auto=format&n=UvOXSE3V3T79bHXg&q=85&s=eb8e92ac582eeeaae17d22798c5fccf4" alt="クロールのジョブ作成モーダル(URLリスト)" width="1920" height="1092" data-path="images/quickstart/crawl_job_urllist.png" />
  </Step>

  <Step title="URLリストを入力">
    1行に1つのURLを入力します。`#` で始まる行はコメントとして無視されます。

    ```
    https://example.com/docs/guide.pdf
    https://example.com/docs/tutorial.pdf
    # 以下はサンプルページ
    https://example.com/samples/demo.html
    ```
  </Step>
</Steps>

<Info>
  URLリストモードではリンクの探索を行わないため、パスフィルターや最大深度などのクロール設定は不要です。最大取得ファイル数はURL件数に自動で合わせられ、ダウンロード上限として適用されます。
</Info>

## クロール設定の詳細（URL指定モード）

以下の設定はURL指定モードでのみ使用できます。

### パスフィルター

特定のURLのパスのみを含めたい場合は、正規表現を使用することで辿るリンクを制限できます

#### 例

* URL: [https://example.com/docs](https://example.com/docs)
* パスフィルター: `^/docs/`

```mermaid theme={null}
flowchart TD
   A["スタート: /docs"] --> B["/docs/introduction.html"]
   A --> C["/docs/quickstart.html"]
   A --> |❌ docsディレクトリではない| D["/"]
   D --> E["/bar.html"] 
   D --> F["/docs/orphan.html"]
   C --> G["/docs/example.html"]

   classDef grayed fill:#ccc,stroke:#888,color:#666;
   class D grayed;
   class E grayed;
   class F grayed;
```

* `/docs` から辿れる `/docs/quickstart.html` ・ `/docs/introduction.html` ・ `/docs/example.html` はクロールされます。
* `/docs` の上位のディレクトリはクロールされません。
* `/docs` から辿れない `/docs/orphan.html` はパスに `/docs` が含まれていたとしてもクロールされません。パスフィルターに含まれるのはあくまでクロール対象のURLのパスであり、クロール開始地点から辿れるURLに限定されます。

### コンテンツパターン

リンクを辿った後に取り込むコンテンツを指定できます：

```
.*\.(pdf|pptx)$          # pdfとpptxファイルのみを含める
.*\?utm_.*               # UTMパラメータ付きURLのみを含める
```

<Info>
  パスフィルターは前処理的に、コンテンツパターンは後処理的に動作します。
</Info>

### HTMLファイルのみをダウンロード

HTMLファイルのみをダウンロードするオプションを有効にできます。

### ヘッドレスブラウザの使用

javascriptで動的に生成されるコンテンツを取得するためにヘッドレスブラウザを使用できます。

<Warning>
  ヘッドレスブラウザはリソースを多く消費するため、使用する場合は最大深度か最大取得ファイル数を小さくすることをお勧めします。
</Warning>

## クロールファイル内容のダウンロード

`/search`、`GET /contents/{id}`、`POST /completions` の citations で返る `content.source_id` から、クロール時に保存されたファイル内容をダウンロードできます。

```bash theme={null}
curl -L \
  -H "x-api-key: $QAIP_API_KEY" \
  -o source.raw \
  "https://api.qaip.example.com/api/v1/sources/{source_id}/raw"
```

`GET /sources/{source_id}/raw` はクロール由来の `source_id` のみ対象です。local\_file の `source_id` は `GET /sources/{source_id}` で詳細を取得します。

他のデータソースへ広げる場合は、各データソースの永続化済みファイル内容と所有チェックを `source_id` から解決する必要があります。現時点では crawl のみ対応しています。

<Warning>
  この API はテナント所有チェックで保存済みファイル内容全体を返します。チャンク単位の認可ポリシーは適用されないため、enforce 運用のテナントでエンドユーザーへ raw を提供する場合は、アプリ側で principal ごとの提供可否を制御してください。
</Warning>

<Info>
  大量に取得する場合は `source_id` ごとに逐次呼び出します。現時点では一括ダウンロード API はありません。
</Info>

## ダウンロードするファイル拡張子

[共通でサポートされているファイル形式](/docs/datasources#対応しているファイル形式)に加えて、以下の拡張子のファイルがダウンロードされます。<br />

* bin
* css
* csv
* gif
* gz
* js
* json
* py
* svg
* xml
* zip
