# Web スクレイピング

> Google 検索の結果、Web ページやサイトのテキスト、RSS や Atom フィードの項目、TikTok の投稿を取得し、JSON として AI ノードやリストのノードに渡します。

Source: https://nodaro.ai/ja/docs/nodes/automate/web-scrape

**Web スクレイピング**（Web Scrape）ノードは、Web からコンテンツを取得し、項目の JSON リストとして返します。ソースは 4 つあります。Google 検索の結果、Web ページまたはサイト全体のテキスト、RSS や Atom フィードの項目、TikTok プロフィールの最近の投稿です。結果を[**プロンプト**（Prompt）](https://nodaro.ai/docs/nodes/automate/prompt)ノードに接続すると、要約や書き換えができます。[**フィールドを抽出**（Extract Field）](https://nodaro.ai/docs/nodes/automate/extract-field)に接続すると、項目ごとに 1 回ずつ生成を実行できます。

- Found in: Automate › Get Content
- Output: data
- API type: `web-scrape`

## 使いどころ
- キーワードの検索結果を、コンテンツ制作のワークフローに取り込みます。
- Web ページやサイトを Markdown として読み取り、プロンプトノードで要約したり、事実を抽出したりします。
- ニュースサイト、ブログ、YouTube チャンネルの最新の項目を、スケジュールに従って読み取ります。
- TikTok プロフィールの最近の投稿を集めて、分析や新しいアイデアに役立てます。

## クイックスタート
### ノードを追加する
キャンバス上で Tab を押し、**自動化 › コンテンツ取得 › Web スクレイピング**を選びます。

### ソースを選ぶ
設定パネルを開き、**ソース**を選んで、そのフィールドを入力します。たとえば、**Google Search** では**クエリ**を入力します。**実行**ボタンには、そのソースの料金が表示されます。

### 実行する
**実行**をクリックします。最初のいくつかの項目がノードに表示され、設定パネルの**結果**タブにすべての項目が一覧表示されます。

### 項目を使う
**JSON** 出力を、JSON をテキストとして読み取る[プロンプト](https://nodaro.ai/docs/nodes/automate/prompt)ノードに接続するか、すべての項目から 1 つのフィールドを取り出す[フィールドを抽出](https://nodaro.ai/docs/nodes/automate/extract-field)に接続します。

Workflow: 毎朝、スケジュールトリガーがワークフロー全体を実行します。Web スクレイピングがニュースフィードを読み取り、プロンプトノードが要約を書き、Telegram 投稿がその要約をチャンネルに送ります。

- Web スクレイピング → プロンプト (プロンプト)
- プロンプト → Telegram 投稿

## ソース
| ソース | 返すもの | フィールド |
| --- | --- | --- |
| **Google Search** | クエリに対する最大 10 件の検索結果 | **クエリ**。**最大結果数**：1〜10、デフォルトは 5。**国コード**：結果を地域に合わせるための、`us` のような 2 文字のコード。 |
| **Web サイトのコンテンツ（Markdown）** | 1 ページ、またはサイトの最大 20 ページのテキスト（Markdown 形式） | **開始 URL**：ブラウザーに入力するときと同じアドレス。`https://` は省略できます。**クロールモード**：**単一ページ**（デフォルト）か、開始アドレスからサイト内のリンクをたどる**サイトをクロール、最大 20 ページ**。 |
| **RSS フィード** | RSS または Atom フィードの項目 | **フィードの URL**：`https://` は付けても付けなくてもかまいません。**結果の上限**：1〜50、デフォルトは 10。 |
| **TikTok** | プロフィールの最近の投稿、または 1 件の投稿 | **プロフィールまたは投稿の URL**：`https://` は付けても付けなくてもかまいません。**結果の上限**：1〜20、デフォルトは 10。 |

どのテキストフィールドでも `{}` を使えます。**URL／クエリ**入力にノードが接続されていると、そのノードのテキストが `{}` に入ります。これにより、[**テキスト**（Text）](https://nodaro.ai/docs/nodes/automate/text)ノードや[**リスト**（List）](https://nodaro.ai/docs/nodes/automate/list)ノードで、クエリやアドレスを指定できます。

## RSS と Atom のフィード
**RSS フィード**ソースは、RSS 2.0（古い 0.9x と 1.0 を含む）と Atom の、両方のフィード形式を読み取ります。YouTube チャンネルのフィード（`https://www.youtube.com/feeds/videos.xml?channel_id=...`）、GitHub の `releases.atom` フィード、ほとんどのブログプラットフォームが公開しているフィードにも対応しています。

フィードの形式にかかわらず、どの項目にも同じ 5 つのフィールドがあります。

| フィールド | 内容 |
| --- | --- |
| `title` | 項目のタイトル |
| `url` | 項目へのリンク。項目にリンクがない場合は空になります。 |
| `description` | 項目の概要または本文。HTML を含むことがあります。 |
| `pubDate` | 公開日。日付を読み取れる場合は ISO 8601 形式 |
| `guid` | 項目の一意の ID。ID がない場合はリンク |

フィードのサーバーに一時的な問題がある場合、ノードは再試行し、30 秒以内に最大 3 回までリクエストを送ります。時間切れになった実行は、「RSS fetch timed out」というエラーで失敗します。Web ページやエラーページなど、フィード以外のものを返すアドレスでは、実行が失敗します。エラーには、そのアドレスが何を返したかが示されます。

## 結果
実行が終わると、ノードに最初のいくつかの項目が表示されます。設定パネルの**結果**タブには、すべての項目が一覧表示されます。表示は**リスト**と**生の JSON** を切り替えられ、**JSON をコピー**と **JSON をダウンロード**のボタンもあります。各項目には、検索結果のページ、フィードの項目、TikTok の動画など、取得元へのリンクがあります。結果を使う前に、リンク先で内容を確認してください。

出力の **JSON** は、項目のリストです。よくある使い方は次の 3 つです。

- **要約する、書き換える**：[プロンプト](https://nodaro.ai/docs/nodes/automate/prompt)ノードの**プロンプト**入力に接続します。JSON はテキストとして渡されます。
- **1 つのフィールドを取り出す**：[フィールドを抽出](https://nodaro.ai/docs/nodes/automate/extract-field)に接続します。たとえば、フィードのすべての項目の `title` を、リストとして取得できます。
- **項目ごとに 1 回実行する**：抽出した値のリストを生成ノードに送ると、ノードは値ごとに 1 回ずつ実行されます。[リストとバッチ処理](https://nodaro.ai/docs/concepts/lists-and-batching)を参照してください。

## クレジット
| ソース | 1 回の実行あたりのクレジット |
| --- | --- |
| Google Search | 30 |
| Web サイトのコンテンツ（単一ページ） | 10 |
| Web サイトのコンテンツ（サイトのクロール） | 50 |
| RSS フィード | 10 |
| TikTok | 10 |

ノードの**実行**ボタン、各クロールモードの横の料金、ワークフローの実行の合計には、いずれも実際に支払う料金が表示されます。

- **失敗した実行のクレジットは、全額返還されます。**
- **何も見つからなかった実行には、料金がかかります。**実行自体は完了しているため、そのソースの料金がかかります。ノードには、空の結果と並んで、最後に成功した結果が残ります。RSS フィードソースでは、フィードとして正しく読み取れても項目がない場合は、何も見つからなかったものとして扱われます。

## 時間のかかるクロール
サイトのクロールは最大 20 ページをたどるため、数分かかることがよくあります。エディターでも、ワークフローの実行でも、特に操作は必要ありません。ノードが待機し、クロールが終わるとページがノードに表示されます。バックグラウンドでクロールが終わった後にワークフローを開き直した場合も、結果は表示されます。

セルフホスティング環境では、Google Search、Web サイトのコンテンツ、TikTok の各ソースに、[プロバイダーキー](https://nodaro.ai/docs/self-hosting/provider-keys)で説明している Web スクレイピング用のキーか、[Nodaro Cloud への接続](https://nodaro.ai/docs/self-hosting/cloud-connect)が必要です。RSS フィードソースには、どちらも必要ありません。

## ヒント
- **まず 1 ページで試す**：**サイトをクロール**に料金を払う前に、**単一ページ**で、サイトが役に立つテキストを返すかを確認します。
- **定期的に取得する**：毎日のダイジェストや、ニュースに合わせて動くワークフローには、[**スケジュールトリガー**（Schedule Trigger）](https://nodaro.ai/docs/nodes/automate/schedule-trigger)をワークフローに追加します。
- **必要なものだけを残す**：項目ごとに 1 回実行されるノードの前で、`title` などのフィールドを 1 つだけ抽出します。そうすると、各実行に短く整ったテキストが渡されます。

## API から
`POST /v1/web-scrape` で、コードからノードを実行できます。サイトのクロールは、1 回の HTTP リクエストの上限である約 100 秒を超えることがあるため、クロールでは `"respondAsync": true` を送ってください。この場合、呼び出しはすぐに `jobId` を返します。ページは、完了したジョブから `GET /v1/jobs/:id` で読み取ります。このフラグを付けない場合、リクエストはスクレイピングが終わるまで開いたままになります。リクエストの上限を超えたクロールは、ジョブ自体は完了して料金も請求されますが、応答が途中で切断されます。[単体のノードを実行する](https://nodaro.ai/docs/developers/api/nodes)と[ジョブ](https://nodaro.ai/docs/developers/api/jobs)を参照してください。

## Frequently asked questions

### Web スクレイピングノードでは、何を取得できますか？

Google 検索の結果、1 つの Web ページまたはサイトの最大 20 ページのテキスト（Markdown 形式）、RSS や Atom フィードの項目、TikTok プロフィールの最近の投稿を取得できます。どのソースも、項目の JSON リストを返します。

### Web スクレイピングには何クレジットかかりますか？

ソースによって異なります。1 回の実行につき、Google 検索は 30 クレジット、1 つの Web ページは 10 クレジット、最大 20 ページのサイトのクロールは 50 クレジット、RSS や Atom フィードは 10 クレジット、TikTok は 10 クレジットです。失敗した実行のクレジットは、全額返還されます。

### Web スクレイピングで Web サイト全体を読み取れますか？

はい。「Web サイトのコンテンツ（Markdown）」を選び、「クロールモード」を「サイトをクロール、最大 20 ページ」に設定します。ノードは開始アドレスからサイト内のリンクをたどって最大 20 ページを読み取り、各ページを Markdown で返します。

### フィードや検索の結果を毎日チェックするにはどうすればよいですか？

ワークフローにスケジュールトリガーを追加し、毎日 9:00 などのスケジュールを設定して、スケジュールをオンにします。スケジュールによる実行のたびに新しい結果が取得され、Web スクレイピングの後に続くノードが実行されます。

### スクレイピングで何も見つからなかった場合はどうなりますか？

実行は完了し、料金が請求されます。ノードには、空の結果と並んで、最後に成功した結果が残ります。フィードの場合は、フィード以外のものを返すアドレスでは実行が失敗し、クレジットは返還されます。
