プロダクショングレードのRAGシステムを構築し、LLMトークンコストを70%削減する方法
Advanced Bot Mitigation Engineer
主なポイント:
- クリーンマークダウンはLLMが本当に望む形式です。 生のHTMLはほとんどがナビゲーション、スクリプト、広告スロット、インラインスタイルで構成されており、文脈ウィンドウを無駄にし、取得品質を低下させるノイズです。Scrapeless
scrape_markdownは、ページの読みやすい本文をクリーンマークダウンとして返すので、埋め込みモデルに届くテキストは、そのページの内容を反映したものです。 - パイプラインは4つのステップです:発見→抽出→チャンク→埋め込み。 重要なURLを見つけ、各URLをクラウドブラウザでクリーンマークダウンとしてレンダリングし、マークダウンをモデルに合わせた重複するチャンクに分割し、ベクトルデータベースに埋め込んで永続化します。
- JavaScript重視のページやボット対策はプラットフォームで処理されます。 多くの高価値なソースはクライアントサイドレンダリングを通じてコンテンツを供給するか、ボットチャレンジの背後にあります。Scrapeless Scraping Browserは、リアルなアンチ検出クラウドブラウザでページをレンダリングしますので、戻ってくるマークダウンは完全に水分補給されたページであり、空のシェルではありません。
- 2つのインターフェース、1つのプリミティブ。 AIエージェントがパイプラインを駆動する際にはScrapeless MCPサーバーから
scrape_markdownを呼び出すか、スクリプトがループを所有している際にはPython SDKでクラウドブラウザセッションをミントします。双方とも同じアンチ検出クラウドブラウザを使用しています。 - ステートレスMCPツールはそのペイロードに
Response:\n\nをプレフィックスします。 MCPサーバーを介してscrape_markdownの出力を読み取る際には、そのプレフィックスをチャンク前に削除してください — これはあなたのコーパスから余分なヘッダーを除くための1行の修正です。 - アンチ検出クラウドブラウザ、195以上の国における住居プロキシ。 Scrapeless Scraping BrowserはJavaScriptレンダリング、住居プロキシの出口、およびフィンガープリンティングのランダム化(UA、タイムゾーン、WebGL、キャンバス)をすべてのセッションで処理しますので、コーパス構築スクリプトは回避プラミングではなく、テキスト品質に集中できます。
- 無料で始められます。 新しいScrapelessアカウントには無料のScraping Browserランタイムが含まれています — Scrapelessにサインアップしてください。
はじめに:モデルにページの外枠ではなく、テキストを供給する
言語モデルは、その読み取るテキストの質によってのみ優れたものとなります。ファインチューニングコーパスを編成している場合、自分のドキュメントの上にリトリーバル強化生成(RAG)ナレッジベースを構築している場合、またはエージェントをライブ市場データに基づかせている場合、入力ステージがすべての下流プロセスの限界を決定します。不良データは単なる不良データではなく — 浪費されたトークン、汚染された埋め込み、回答の代わりにクッキーバナーを表示する取得です。
問題なのは、現代のウェブが埋め込みモデルのためではなく、ブラウザや人間のために構築されているということです。典型的な記事ページは、実際のコンテンツ数千語が、ナビゲーションメニュー、シェアボタン、関連投稿グリッド、コメントウィジェット、クッキーノーティス、トラッキングスクリプト、インラインCSSなど、数万文字で包まれたものです。この生のHTMLを埋め込みモデルに提供すると、信号はマークアップに飲み込まれてしまいます。ノイズに加えて、増加するページの割合が、初期読み込み後にJavaScriptで主要コンテンツをレンダリングするため、単純なHTTPフェッチでは空のコンテナが返されます。他のページは完全に自動収集をブロックするボットチャレンジの背後にあります。
この投稿では、Scrapeless Scraping Browser上のPythonワークフローを通じて、乱れた公共ウェブページをクリーンでチャンクされた埋め込み準備テキストに変換する方法を説明します。パイプラインは4つのステップで構成されています — URLを発見する、クリーンマークダウンを抽出する、RAG用にチャンクする、ベクトルデータベースに埋め込む — scrape_markdownが抽出ステージで重労働を行い、任意のページの読みやすい本文をクリーンマークダウンとして返します。同じプリミティブのエージェントフレームワーク版については、LangChain統合投稿を参照してください。
あなたが構築できるもの
クリーンテキストの抽出は、広範なLLMおよびRAGシステムの基盤です:
- 自分のドキュメントに対するRAG。 ドキュメントサイトまたはナレッジベースをクローリングしてクリーンマークダウンにし、チャンク化して埋め込み、サポートエージェントが古いトレーニングカットオフではなく最新のドキュメントから回答できるようにします。
- ファインチューニングおよび継続学習のコーパス。 公開記事や参考文献から大規模で重複を排除したテキストデータセットを編成し、収集時にボイラープレートをすでに取り除くことを可能にします。
- エージェントのためのライブウェブグラウンディング。 エージェントがクエリ時に必要とするページをレンダリングし、クリーンマークダウンを提供することで、回答がそのページの最新の読みを引用するようにします。
- 競争および市場調査。 公開された製品ページ、ブログ投稿、リリースノートを分析者やLLMがクエリできる検索可能なベクトルインデックスに変換します。
- ニュースおよび研究監視。 出版社やジャーナルページを定期的に取り込み、Markdownに正規化し、移動する情報源全体に対してセマンティック検索のために埋め込みます。
- 内部セマンティック検索。 チームが依存する公共の参考資料に対してプライベートなリトリーバルレイヤーを構築し、定期的に更新します。
なぜScrapeless Scraping Browserなのか
スクレイプレス スクレイピング ブラウザは、ウェブクローラーやAIエージェントのために設計されたカスタマイズ可能な検出回避クラウドブラウザです。特にLLMおよびRAGテキストパイプラインに向けて、以下の機能を提供します:
- クリーンなMarkdown抽出。
scrape_markdownはURLをレンダリングし、読みやすい本文をMarkdown形式で返します — 見出し、段落、リスト、表、リンクが保持されます; ナビゲーション、スクリプト、広告枠、インラインスタイルは削除されます。これは埋め込みモデルが最もよく読み取る形式です。 - クラウド側JavaScriptレンダリング。 完全なChromiumが抽出前にページを水和させるため、シングルページアプリ、遅延読み込みされたセクション、初回リクエスト後に挿入されたコンテンツがキャッチされ、見逃されません。
- 195か国以上の住宅プロキシ。 地理的に制約されたページは、現地の読者が見るコンテンツを返し、各セッションで自動的にローテーションされるため、実際の記事と地域ブロックページとの違いがあります。
- すべてのセッションでの検出回避フィンガープリンティング — UA、タイムゾーン、言語、画面解像度、WebGL、およびキャンバスが各セッションごとにランダム化されるため、高価値ソースに対してリクエストごとのフィンガープリンティング調整なしでアクセス可能です。
- 1つのプリミティブ、2つの表面。 同じクラウドブラウザがエージェント駆動のパイプライン用のMCPツールとして、またスクリプト駆動のパイプライン用のPython SDKセッションとしてアクセス可能なため、同じ抽出ステップがどちらのアーキテクチャにも組み込まれます。
無料プランでAPIキーを取得するには、Scrapelessにアクセスしてください。
前提条件
- Python 3.10以上。
- ScrapelessアカウントとAPIキー — app.scrapeless.comでサインアップし、設定 → APIキー管理からキーをコピーしてください。
- 埋め込みモデルAPIキー — 埋め込む予定がある場合(以下の例はOpenAIを使用していますが、どの埋め込みプロバイダーでも1行を置き換えることで動作します)。
pipおよびvenvに関する基本的な知識。
完全なSDKおよびツールリファレンスは、docs.scrapeless.comにあります。
インストール
同じクラウドブラウザにアクセスする方法は2つあります。パイプラインを駆動する者 — エージェントまたはスクリプトに合った方を選択してください。
オプションA — Python SDK(スクリプト駆動)
discover → extract → chunk → embedループを所有するスクリプトの場合、Scrapeless Python SDKと使用する予定の埋め込みおよびベクトルストアライブラリをインストールします:
bash
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install scrapeless openai chromadb tiktoken
現在のシェルのためにAPIキーをエクスポートします。SDKは自動的に環境変数からSCRAPELESS_API_KEYを読み取ります:
bash
export SCRAPELESS_API_KEY="your_api_token_here"
export OPENAI_API_KEY="your_openai_token_here"
オプションB — MCPサーバー(エージェント駆動)
ツールを呼び出すAIエージェントの場合、Scrapeless MCPサーバーを実行します。これにより、任意のMCP対応クライアントにscrape_markdown、scrape_html、google_search、および一連のブラウザツールが提供されます:
bash
npx -y scrapeless-mcp-server
コマンドを指示するMCPクライアントに向け、サーバー設定の中でAPIキーをSCRAPELESS_KEY環境変数として渡します。エージェントは次にscrape_markdownを直接呼び出すことができます。
パイプラインの概観
URLを発見する クリーンなテキストを抽出 チャンクに分割 埋め込み + ストレージ
┌──────────────┐ ┌──────────────────┐ ┌──────────────┐ ┌──────────────┐
│ google_search│ ────► │ scrape_markdown │ ────► │ ~500–1000トークン │ ────► │ チャンクを │
│ またはサイトマップ │ │ (クラウドブラウザ │ │ 重複部分に分割 │ │ ベクトルDBに │
│ またはシードリスト │ │ レンダリング + クリーニング) │ │ │ │ アップサート │
└──────────────┘ └──────────────────┘ └──────────────┘ └──────────────┘
4つのステージ、クリーンな分離。発見はどのページがコーパスに入るかを決定し、抽出はどれだけクリーンなテキストであるかを決定し、チャンク化はどれだけ取得可能であるかを決定し、埋め込みは検索可能にします。Scrapelessは最初の2つのステージを所有します — 生のウェブが反撃するところ — そして標準ライブラリは最後の2つを所有します。
ステップ1 — URLを発見する
コーパスはURLのリストから始まります。ほとんどすべてのケースをカバーする3つの一般的なソース:
- 持っているシードリストまたはサイトマップ — 最も簡単なケース; ステップ2に直接進みます。
- サイトクロール — セクションのルートから開始し、ドメイン内のリンクを限られた深さまで追います。
- 検索発見 — 関連するページが事前に知られていない場合、検索します。
Scrapeless MCPサーバーには、組織的な結果を構造化された行として返すgoogle_searchツールがあり、特定のトピックのソースURLを発見するためのクリーンな方法です。各行にはposition、title、link、snippet、およびsourceが含まれています:
python
# discover.py — 検索クエリから候補のURLを集める
# (MCPツールの引数はキャメルケース; これが返される形を示します)
results = [
json
{"position": 1, "title": "検索拡張生成の説明", "link": "https://example.com/guides/rag-explained", "source": "example.com"},
{"position": 2, "title": "RAGのためのチャンク戦略", "link": "https://example.com/blog/chunking-strategies", "source": "example.com"}
ステップ2 — scrape_markdownでクリーンなMarkdownを抽出
ここがコーパスの質を決定付けるステージです。scrape_markdownは、URLを検出防止のクラウドブラウザでレンダリングします — JavaScriptが実行され、ページがハイドレートされ、住宅用イーグレスがコンテンツの到達可能性を保ち、読みやすい本体をクリーンなMarkdownとして返します。見出しは見出しのまま、リストはリストのまま、テーブルはテーブルのままで、コンテンツでないものは全て削除されます。
エージェント駆動(MCP)
エージェントがツールを呼び出すと、ツールの結果としてMarkdownを受け取ります。コーパスの衛生に関する1つの詳細は、ステートレスMCPツールがそのテキストペイロードをResponse:\n\nでプレフィックスすることです。 コーパスにテキストが入る前にこのヘッダーを削除してください。さもなくば、最初のチャンクの先頭に配置されます。
python
# clean_mcp_payload.py — チャンクする前にMCPツールの結果を正規化
PREFIX = "Response:\n\n"
def clean_markdown(tool_result: str) -> str:
"""MCP scrape_markdownの結果からステートレスツール 'Response:' プレフィックスを削除します。"""
if tool_result.startswith(PREFIX):
tool_result = tool_result[len(PREFIX):]
return tool_result.strip()
スクリプト駆動(Python SDK)
スクリプトがループを所有する場合は、SDKでクラウドブラウザのセッションを発行し、各URLをレンダリングします。SDKは環境からSCRAPELESS_API_KEYを読み取り、proxy_countryで住宅用イーグレスを指定します(SDKではスネークケース)。
python
# extract.py — 発見された各URLをクリーンなMarkdownとしてレンダリング
from scrapeless import Scrapeless
from scrapeless.types import ICreateBrowser
client = Scrapeless() # SCRAPELESS_API_KEYを読み取ります
session = client.browser.create(
ICreateBrowser(proxy_country="US", session_ttl=240)
)
def fetch_markdown(url: str) -> str:
"""クラウドブラウザでURLをレンダリングし、クリーンなMarkdownの本文テキストを返します。"""
# セッションはsession.browser_ws_endpointにCDPエンドポイントを提供します;
# それを駆使して`url`にナビゲートし、ページがハイドレートされるのを待ち、
# その後、コーパスのためにクリーンなMarkdownの本文を読み取ります。
# `render_to_markdown`は自作のヘルパーです:CDPエンドポイントを駆使してナビゲートし、
# ハイドレーションを待った後、クリーンなHTMLをMarkdownに変換します。
# ヘルパーを書く手間なくターンキー結果が必要な場合は、上記のMCP `scrape_markdown`ツールを使用
# してください。それがMarkdownを直接返します。
markdown = render_to_markdown(session, url)
return markdown.strip()
documents = []
for url in urls:
text = fetch_markdown(url)
if len(text) > 200: # ほぼ空の/ブロックページをスキップ
documents.append({"url": url, "text": text})
最後の短い長さガードは保持する価値があります:数十文字しかMarkdownが返されないページは通常、同意の壁や空のコンテナであり、記事ではなく、コーパスを汚染すべきではありません。
無料プランでAPIキーを取得しましょう:Scrapeless
Markdown か HTML か?
scrape_markdownとscrape_htmlは同じレンダリングを提供します。違いは、戻ってくるものとそれに対して行うことです:
scrape_markdown |
scrape_html |
|
|---|---|---|
| 出力 | クリーンで読みやすいMarkdown | 完全にレンダリングされたHTML |
| ボイラープレート | ナビゲーション、スクリプト、広告が削除される | 存在 — 自分で削除 |
| 最適 | LLM訓練とRAG入力 | カスタムCSSセレクター抽出 |
| 下流のトークンコスト | 低 — コンテンツのみ | 高 — マークアップが含まれる |
| 構造保持 | 見出し、リスト、テーブル、リンク | 完全なDOM |
LLMまたはRAGコーパスでは、Markdownがデフォルトです。埋め込みモデルにコンテンツのみを渡し、DOMの回転に対してCSSセレクタよりも耐性があり、下流の各段階でトークンコストがはるかに少なくなります。特定のレイアウトに対して独自のセレクタを実行する必要がある場合はのみ、scrape_htmlを使用してください。
ステップ3 — RAGのためのチャンク化
埋め込みモデルには有限の入力サイズがあり、検索は保存された各ユニットが全体の文書ではなく一貫したパッセージである時に最も効果的です。チャンク化は、クリーンなMarkdownを重複するウィンドウに分割します。実用的なデフォルトは**1チャンクあたり500–1000トークン、オーバーラップは10–15%**です — 完全なアイデアを保持するには十分大きく、検索の精度を保つには十分小さく、境界を越えて分割された文が少なくとも1つのチャンクで全体として表示されるようにします。
python
# chunk.py — クリーンなMarkdownをトークンサイズの重複したチャンクに分割
import tiktoken
enc = tiktoken.get_encoding("cl100k_base")
ja
def chunk_text(text: str, max_tokens: int = 800, overlap: int = 100):
"""クリーンなMarkdownに対して重複するトークンウィンドウを生成します。"""
tokens = enc.encode(text)
step = max_tokens - overlap
for start in range(0, len(tokens), step):
window = tokens[start:start + max_tokens]
if not window:
break
yield enc.decode(window)
chunks = []
for doc in documents:
for i, piece in enumerate(chunk_text(doc["text"])):
chunks.append({
"id": f"{doc['url']}#chunk-{i}",
"url": doc["url"],
"chunk_index": i,
"text": piece,
})
クリーンなMarkdownがすでに入力されているため、チャンクャーはクッキーバナーや`<script>`ブロックに苦労することはありません。トークンウィンドウの前にMarkdownの見出しで分割することで、関連するコンテンツをさらに一緒に保つことができます — セクション内でチャンクし、2つのセクションをまたがるのではなく — ソース文書に明確な見出し構造がある場合。
単一のチャンクレコードは次のようになります:
```json
{
"id": "https://example.com/guides/rag-explained#chunk-0",
"url": "https://example.com/guides/rag-explained",
"chunk_index": 0,
"token_count": 800,
"text": "## Retrieval-Augmented Generation\n\nRAGは、クエリ時に最も関連性の高い節を取得し、それを文脈としてモデルに渡すことによって、言語モデルを外部コーパスに基づかせます。取得の質は、基本的にソーステキストがどれだけクリーンに抽出され、チャンク化されたかに直接依存します ..."
}
ステップ4 — 埋め込みを行い、ベクターデータベースに永続化
最終段階では、各チャンクをベクトルに変換し、取得のために保存します。以下の例では、ローカルのChromaストアとOpenAIの埋め込みを使用します。pgvector、Pinecone、または他のベクターデータベースでも形状は同じです — クライアントを入れ替え、レコードはそのままにします:
python
# embed.py — 各チャンクを埋め込み、ベクトルストアにアップサートします
import chromadb
from openai import OpenAI
oai = OpenAI()
db = chromadb.PersistentClient(path=".chroma")
collection = db.get_or_create_collection("web_corpus")
def embed(texts: list[str]) -> list[list[float]]:
resp = oai.embeddings.create(model="text-embedding-3-small", input=texts)
return [d.embedding for d in resp.data]
batch = chunks[:64] # バッチで埋め込む
collection.upsert(
ids=[c["id"] for c in batch],
documents=[c["text"] for c in batch],
embeddings=embed([c["text"] for c in batch]),
metadatas=[{"url": c["url"], "chunk_index": c["chunk_index"]} for c in batch],
)
urlとchunk_indexメタデータは各ベクトルに付随するため、取得がチャンクを示す際には、ソースページを引用し、より完全な文脈のために隣接するチャンクを再構成することができます。そのメタデータは、idでアップサートを行うことができる所以でもあります — ページを更新すると、そのチャンクは重複することなくその場で置き換わります。
取得するもの
ベクターストアに格納されるコーパスは、クリーンで、埋め込まれた、ソースリンク付きのチャンクのリストです。取得したレコードは次のようになります:
json
{
"id": "https://example.com/blog/chunking-strategies#chunk-2",
"document": "### Overlap\n\n隣接するチャンク間での10〜15%のオーバーラップは、境界にある文が少なくとも1つのウィンドウ内で保持され、2つのアイデア間の境目をターゲットにしたクエリのリコールを向上させます ...",
"metadata": {
"url": "https://example.com/blog/chunking-strategies",
"chunk_index": 2
},
"distance": 0.18
}
// スキーマはステップ4のアップサートが発行したものを正確に反映しています。フィールド値は例示的なサンプルです。
この処理がライブウェブに対して実行されたときに期待できることについてのいくつかの率直な観察:
- Markdownの質はページの構造に関連します。 クリーンな意味論的HTMLがあるページは素晴らしいMarkdownに変換されます。一般的な
<div>スープから作られたページは受け入れ可能に変換されますが、サイドバーのキャプションが本文に統合されることがあります。大きなコーパスを信頼する前に、変換されたページのサンプルをスポットチェックしてください。 - 水分補給のタイミングはサイトによって異なります。 ほとんどのページはMarkdownが読まれる時点で完全にレンダリングされていますが、一部は遅延リクエストを通じて主要なコンテンツを水分補給します。そのため、読み取り前にページが落ち着くのを許可してください。
- 二つのレベルでの重複排除。 認識時に重複URLを削除し、埋め込み前にほぼ重複するチャンクを削除します(ハッシュや類似度閾値) — シンジケートされた記事やボイラープレートのフッターは、コーパスを膨張させ、取得に偏りをもたらす可能性があります。
- 地域による変動コンテンツの出口地域を固定します。 コンテンツをローカライズするサイトは、地域によって異なるテキストを返します。コーパスで保持したいバージョンの地域に対して
proxy_countryを設定し、データセットを一貫性のあるものにします。 - 長さのガードを維持します。 数十文字しか返さないページは通常、同意の壁や空のコンテナであり、コンテンツではありません — チャンク化の前にそれを排除してください。
結論:スケールするクリーンテキストパイプラインを構築します
Discover → Extract → Chunk → Embedの形状は、大体60行のPythonコードに収束します。荷重を支えるステージは抽出であり、`scrape_markdown`がそれを担います:反検出のクラウドブラウザがページをレンダリングし、住宅の出口がそれをアクセス可能に保ち、戻ってくるのはクリーンなMarkdownとして読み取れるコンテンツの本文です — 埋め込みモデルが最もよく読み取る形式です。その後、チャンク化と埋め込みは、すでにクリーンなテキストに対する標準ライブラリ作業です。
同じScrapeless Scraping Browserのプリミティブが、型付け出力とベクターストアと接続されたエージェントフレームワークに組み込まれた例については、[LangChain統合投稿](https://www.scrapeless.com/ja/blog/langchain-scrapeless-scraping-browser-2026)を参照してください。検索、レンダリング、抽出を機能するシステムに構成するさらなるエンドツーエンドパターンについては、[AIエージェントのユースケース投稿](https://www.scrapeless.com/ja/blog/ai-agent-use-cases-scrapeless-2026)をご覧ください。すべてのパターンに共通するもの:領域を固定し、HTMLではなくMarkdownを返し、オーバーラップを持ってチャンク化し、埋め込む前に重複を排除します。
---
## AI駆動のデータパイプラインを構築する準備は整いましたか?
コミュニティに参加して無料プランを取得し、Scrapeless上でLLMとRAGデータパイプラインを構築している開発者とつながりましょう: [Discord](https://discord.gg/VU2vtbq7Q2) · [Telegram](https://t.me/scrapeless)。
無料のScraping Browserランタイムにサインアップして、上記のパターンをあなたのパイプラインに必要なソース、領域、チャンクサイズに適応させてください。[Scrapeless](https://app.scrapeless.com/passport/login/?utm_source=website&utm_medium=blog&utm_campaign=scrapingbrowser&utm_term=scrapeforllm)でサインアップしてください。プランと制限については、[scrapeless.com/en/pricing](https://www.scrapeless.com/ja/pricing)をご覧ください。
---
## FAQ
**Q: LLMまたはRAGコーパスのためにウェブサイトのテキストをスクレイピングすることは合法ですか?**
公開されているデータのスクレイピングは、ほとんどの法域で広く許可されていますが、ルールは国やサイトの利用規約によって異なります。ターゲットサイトの利用規約を確認し、適用可能な場合は`robots.txt`を尊重し、合法的な根拠なしに個人データを収集せず、商業規模のコーパスについては法律相談を受けてください。トレーニングやRAGデータセットを構築することは、公共のデータに合法的にアクセスするという基本的な義務を変更しません。
**Q: LLM入力に生のHTMLではなくMarkdownを使用するのはなぜですか?**
生のHTMLは主にマークアップ — ナビゲーション、スクリプト、広告スロット、インラインスタイル — で構成されており、内容の信号を希薄化し、トークンコストを増大させ、埋め込みを汚染します。`scrape_markdown`からのクリーンなMarkdownは、実際にページが関係している見出し、段落、リスト、表、リンクを保持し、その他の部分を削除するため、埋め込みモデルはコンテンツだけを読み取ります。Markdownはまた、CSSセレクターによる抽出よりもDOMの変更に耐えられます。
**Q: RAGに対してどのチャンクサイズを使用すべきですか?**
実用的なデフォルトは、チャンクごとに500〜1000トークンで10〜15%のオーバーラップです。小さなチャンクは検索精度を上げますが、アイデアを分割する可能性があります;大きなチャンクはより多くのコンテキストを保持しますが、関連性が希薄になる可能性があります。埋め込みモデルの入力サイズやクエリに応じて調整してください — 短い事実の検索は小さなチャンクに有利で、合成の質問は大きなチャンクに有利です。トークンウィンドウ化の前にMarkdownの見出しで分割すると、関連するコンテンツを一緒に保つことができます。
**Q: プロキシは必要ですか?**
はい、収集する価値のあるほとんどの公開ソースには必要です。住宅の出口は、地理的に関連づけられたページやボット対策のページをアクセス可能に保ち、JavaScriptが重いページが実際のコンテンツをレンダリングするために必要です。Scrapeless Scraping Browserは195か国以上の住宅プロキシを介してルーティングされます;`proxy_country`を設定して、希望するコンテンツのバージョンの地域を固定してください。
**Q: コーパスを重複除去し、クリーンにするにはどうすればよいですか?**
二つのレベルで重複を排除します:発見時に重複URLを削除し、埋め込みの前にコンテンツハッシュや類似性の閾値を使用して類似のチャンクを削除します。`scrape_markdown`はすでにボイラープレートを削除しているため、残りのクリーンアップは軽量です — ほぼ空のページを捨てるための長さガードや、オプションの見出しに気付いた分割が通常は十分です。
**Q: MCP `scrape_markdown`の結果はなぜ`Response:`で始まるのですか?**
Scrapeless MCPサーバーのステートレスツールは、テキストペイロードを`Response:\n\n`で接頭辞として付けます。これは輸送層ヘッダーであり、ページコンテンツの一部ではありません。チャンク化の前にそれを取り除いてください — ステップ2の一行の`clean_markdown`ヘルパーがそれを処理します — そうすれば、接頭辞が最初のチャンクの先頭に現れません。
**Q: AIエージェントなしでこれを実行できますか?**
はい。ステップ2のPython SDKパスは、エージェントが関与することなく、発見→抽出→チャンク→埋め込みループを完全に所有します。MCPサーバーは、エージェントが収集するページを決定する際の推奨パスです;スクリプトがそれを行う場合は、SDKが推奨されるパスです。
Scrapelessでは、適用される法律、規制、およびWebサイトのプライバシーポリシーを厳密に遵守しながら、公開されているデータのみにアクセスします。 このブログのコンテンツは、デモンストレーションのみを目的としており、違法または侵害の活動は含まれません。 このブログまたはサードパーティのリンクからの情報の使用に対するすべての責任を保証せず、放棄します。 スクレイピング活動に従事する前に、法律顧問に相談し、ターゲットウェブサイトの利用規約を確認するか、必要な許可を取得してください。



