概要
LLM向けにWebページをMarkdownに変換するにはどうすればいいですか?
ページを取得し、本文だけを残してから、見出し・リスト・表・リンクをMarkdownに変換し、モデルの予算に合わせて長さを制限します。手作業、オープンソースライブラリ、またはAPI呼び出し1回で行えます:WebReaderAPIは1ページあたり1クレジットでMarkdownとメタデータを返し、2026年10月時点で$0.07/1Kページから利用できます。KYC不要、暗号資産で支払い。
WebページからMarkdownを得る3つの方法
| 手作業 | ブラウザまたはそのリーダービューからテキストをコピーします。数ページなら十分です |
|---|---|
| オープンソースライブラリ | 自分のフェッチャー内でReadability、Trafilatura、MarkItDown、Crawl4AIを使います |
| WebリーダーAPI | GET https://webreaderapi.com/api/v1/read?url=…はMarkdown、タイトル、著者、日付を返します |
| 長さの制御 | WebReaderAPIでmax_charsを使うか、変換後に自分でテキストを切り詰めます |
| JavaScriptページ | ヘッドレスブラウザが必要です。WebReaderAPIは必要なときに2クレジットでレンダリングします |
どの方法を使うべきですか?
量と、どれだけのインフラを自分で運用したいかで選びます。
| 方法 | 向いている用途 | 自分で対応する範囲 |
|---|---|---|
| コピー&ペースト | 数ページ、一度きりのプロンプト | 手作業でのクリーニング |
| コード内のライブラリ | 安定した量、完全な制御 | 取得、ブラウザ、robots.txt、PDF、リトライ |
| WebリーダーAPI | 多くのサイトを読むエージェントやパイプライン | リクエストと結果のみ |
ライブラリは制御を提供し、ページごとの料金はかかりません。コストは運用面です。JavaScriptページ用のヘッドレスブラウザ、robots.txtのチェック、文字セットとリダイレクトの処理、そしてPDF用の別経路が必要です。APIはそれらすべてを1回のHTTP呼び出しにまとめます。
優れたMarkdownが保持すべきもの、削除すべきものは何ですか?
優れたMarkdownは、意味を持つすべての要素を保持し、レイアウトやマーケティングのためだけに存在するものはすべて削除します。
- 見出しを保持し、
#、##、###として扱います。これによりモデルとチャンカーに各トピックの開始位置が伝わります。 - リストと表を保持し、Markdownのリストとパイプ表として扱います。これにより手順と数字が読みやすく保たれます。
- リンクを保持し、
[text](url)として扱います。これによりアシスタントは出典を引用し、たどることができます。 - コードブロックを保持し、フェンスで囲みます。ページに言語が表示されている場合は言語も付けます。
- メニュー、Cookie通知、広告、関連記事ウィジェット、フッターは削除します。これらはすべてのページで繰り返され、検索・取得を汚染します。
実際のページをいくつか使って結果を確認してください。抽出ツールの結果が最も分かれるのは、フォーラム、長い表、複数の記事を含むページです。
MarkdownはHTMLよりどれくらい小さくなりますか?
通常はるかに小さくなります。ページの装飾やマークアップが消えるためです。Cloudflareが2026年2月12日にMarkdown for Agents機能を開始したとき、その例のページはHTMLで16,180トークンからMarkdownで3,150トークンになり、約80%減りました。
実際の比率はサイトによって異なります。長い記事は、重いテンプレートに包まれた短いページに比べて、割合としてはあまり小さくなりません。予算を決める前に、自分のソースで測定してください。
ページをモデルのトークン予算内に収めるにはどうすればよいですか?
モデルに届く前にテキストに上限を設け、残りを見出しに沿って分割します。WebReaderAPIでは、max_charsパラメータがMarkdownを1,000〜500,000文字の設定した長さで切り詰めます。word_countフィールドは記事全体がどれくらいの長さだったかを示すので、エージェントは残りを読む価値があるかどうかを判断できます。
検索・取得用途では、まず見出しで分割し、それから長いセクションを切ります。自分の見出しで始まるチャンクはトピックを保ちますが、長いページから文の途中で切られたチャンクは保ちません。
import os
import re
import requests
API = "https://webreaderapi.com/api/v1/read"
HEADERS = {"Authorization": "Bearer " + os.environ["WEBREADER_API_KEY"]}
def page_to_chunks(url, max_chars=60000, chunk_len=1500):
params = {"url": url, "format": "markdown", "max_chars": max_chars}
resp = requests.get(API, headers=HEADERS, params=params, timeout=90)
data = resp.json()
if resp.status_code != 200:
print("not read:", data["error"]["code"])
return []
chunks = []
for section in re.split(r"\n(?=#{1,3} )", data["markdown"]):
section = section.strip()
while section:
chunks.append(section[:chunk_len])
section = section[chunk_len:]
return [{"text": c, "source": data["final_url"], "title": data["title"]} for c in chunks]
if __name__ == "__main__":
for chunk in page_to_chunks("https://example.com/guides/compost")[:3]:
print(chunk["title"], "|", chunk["text"][:80])
よくある失敗は何で、どう見つければよいですか?
変換の失敗のほとんどは4つの問題に集約されます。
- 出力が空。 ページがJavaScriptでコンテンツを構築しています。低い
word_countを探し、ブラウザでページをレンダリングするか、render=trueを設定してください。 - 結果にCookieや同意のテキストが含まれる。 抽出ツールがバナーを残しています。メインコンテンツの抽出を選び、各結果の最初の行を確認してください。
- 表が欠けている。 一部のサイトは表を画像やcanvas要素として描画しており、テキスト抽出ツールでは読めません。
- ページの代わりに拒否。 サイトがrobots.txtでrobotsを拒否したか、リクエストを拒否しました。これを尊重し、所有者にアクセスを依頼するか、サイトが提供していれば公式APIやフィードを使用してください。
これらはいずれも、より速くリトライしても解決しません。エラーを読み、方法かソースを変えてください。
WebページをMarkdownに変換:よくある質問
LLMにはプレーンテキストよりMarkdownが優れていますか?
ほとんどのページでは、はい。Markdownは見出し、リスト、表、リンクを少ないトークンコストで保持するため、モデルは構造を見て出典を引用できます。プレーンテキストはわずかに短くなりますが、その構造を失います。
1ページだけでなく、Webサイト全体を変換できますか?
はい。クロールして各ページを変換します。WebReaderAPIのcrawl APIは1つのジョブで両方を行います:1ジョブにつき1つのWebサイトを、最大10,000ページまでクロール。サイトマップ、robots.txt、Crawl-delayに従います。
PDFも同じ方法で変換できますか?
はい、PDFのURLを同じエンドポイントに送信します。20 MB・100ページまでのPDFファイルをMarkdownに変換します。10ページ単位の開始ブロックごとに1クレジットです。
ログインの背後にあるページはどうですか?
自分のものであって自分でエクスポートした場合を除き、第三者サービス経由で変換しないでください。WebReaderAPIは公開ページのみを読み取り、アカウントにログインすることはありません。
これを無料で行う方法はありますか?
オープンソースライブラリは無料で使用でき、自分のマシンで実行できます。WebReaderAPIに無料プランはありません。最小のパックは$3.75で10,000ページ、KYC不要の暗号資産で支払います。
ソース (1)
- Markdown for Agentsの紹介 — Cloudflare (2026-02-12)