mcpField
M
MarkGrab

MarkGrab

ローカル
github.com/QuartzUnitブラウザ自動化028 週間前に更新

MarkGrab について

MarkGrabは、Webページや文書を抽出し、整形済みテキストやLLM向けMarkdownに変換するPythonライブラリとCLIです。HTML、YouTubeの字幕、PDF、DOCXに対応し、JavaScriptが必要なページではブラウザー描画に切り替えます。

主な機能

  1. 01HTML本文の整形
  2. 02タイムスタンプ付きYouTube字幕の抽出
  3. 03PDFとDOCXの抽出
  4. 04JavaScriptページでのPlaywrightフォールバック
  5. 05Markdown・テキスト・JSON出力

活用シーン

  1. 01LLM入力用のWeb記事の準備
  2. 02タイムスタンプ付き動画字幕の抽出
  3. 03PDFやDOCXのテキスト化
  4. 04JavaScript描画ページのコンテンツ取得

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"arknill-markgrab": {
"command": "uvx",
"args": [
"markgrab"
]
}
}
}
起動コマンドuvx markgrab

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
pypimarkgrab0.1.2

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

MarkGrab

PyPI Python License Tests

한국어 문서 · llms.txt

あらゆるウェブコンテンツを抽出 — 任意の URL を LLM 向けの Markdown に変換します。

from markgrab import extract

result = await extract("https://example.com/article")
print(result.markdown)    # clean markdown
print(result.title)       # "Article Title"
print(result.word_count)  # 1234
print(result.language)    # "en"

特長

  • HTML — BeautifulSoup とコンテンツ密度フィルタリング(ナビゲーション、サイドバー、広告を除去)
  • YouTube — タイムスタンプ付きのトランスクリプト抽出
  • PDF — ページ構造を維持したテキスト抽出
  • DOCX — 段落と見出しの抽出
  • 自動フォールバック — まず軽量な httpx を試し、JavaScript を多用するページでは Playwright にフォールバック
  • 非同期優先 — httpx と Playwright の非同期 API を基盤に構築

インストール

pip install markgrab

特定のコンテンツ形式向けのオプションの追加機能:

pip install "markgrab[browser]"    # Playwright for JS-rendered pages
pip install "markgrab[youtube]"    # YouTube transcript extraction
pip install "markgrab[pdf]"       # PDF text extraction
pip install "markgrab[docx]"      # DOCX text extraction
pip install "markgrab[all]"       # everything

使い方

Python API
import asyncio
from markgrab import extract

async def main():
    # HTML (auto-detects content type)
    result = await extract("https://example.com/article")

    # YouTube transcript
    result = await extract("https://youtube.com/watch?v=dQw4w9WgXcQ")

    # PDF
    result = await extract("https://arxiv.org/pdf/1706.03762")

    # Options
    result = await extract(
        "https://example.com",
        max_chars=30_000,       # limit output length (default: 50K)
        use_browser=True,       # force Playwright rendering
        stealth=True,           # anti-bot stealth scripts (opt-in)
        timeout=60.0,           # request timeout in seconds
        proxy="http://proxy:8080",
    )

asyncio.run(main())
CLI
markgrab https://example.com                     # markdown output
markgrab https://example.com -f text             # plain text
markgrab https://example.com -f json             # structured JSON
markgrab https://example.com --browser           # force browser rendering
markgrab https://example.com --max-chars 10000   # limit output
ExtractResult
result.title        # page title
result.text         # plain text
result.markdown     # LLM-ready markdown
result.word_count   # word count
result.language     # detected language ("en", "ko", ...)
result.content_type # "article", "video", "pdf", "docx"
result.source_url   # final URL (after redirects)
result.metadata     # extra metadata (video_id, page_count, etc.)

仕組み

flowchart TD
    A["🔗 URL Input"] --> B{"Content\nType?"}
    B -->|"HTML"| C["HTTP fetch\n(httpx)"]
    C --> D{"JS\nrequired?"}
    D -->|"no"| E["HTML Parser\n→ clean markdown"]
    D -->|"yes"| F["Playwright\nfallback"]
    F --> E
    B -->|"YouTube"| G["Transcript API\n→ timestamped markdown"]
    B -->|"PDF"| H["PDF Parser\n→ structured markdown"]
    B -->|"DOCX"| I["DOCX Parser\n→ markdown"]
    E --> J["✅ LLM-ready\nMarkdown"]
    G --> J
    H --> J
    I --> J

HTML ページの場合、最初の httpx による取得で単語数が 50 未満になると、MarkGrab は JavaScript でレンダリングされたコンテンツに対応するため、Playwright で自動的に再試行します。

免責事項

このソフトウェアは、正当な目的に限って提供されています。 MarkGrab を使用することで、以下に同意したものとみなされます。

  • robots.txt:MarkGrab は robots.txt を確認せず、その規則を適用することもありません。アクセスするウェブサイトの robots.txt の指示および利用規約を確認し、遵守する責任はすべてユーザーにあります。

  • レート制限:MarkGrab には、レート制限やリクエストのスロットリング機能は組み込まれていません。対象サーバーに過剰な負荷をかけないよう、ユーザーは独自にレート制限を実装する必要があります。過剰なリクエストのパターンは、適用される法律やウェブサイトの利用規約に違反する可能性があります。

  • YouTube のトランスクリプト:YouTube のトランスクリプト抽出は、YouTube の内部(非公式)字幕 API を利用するサードパーティ製ライブラリ youtube-transcript-api に依存しています。この方法は、YouTube の利用規約に準拠しない可能性があります。利用はご自身の判断と責任で行ってください。

  • ステルスモード:オプションの stealth=True 機能は、ボット検出を減らすためにブラウザーのフィンガープリント信号を変更します。この機能は、テスト、研究、通常のブラウザーユーザーに公開されているコンテンツへのアクセスなど、正当な利用を目的としています。適用される法律および対象ウェブサイトの利用規約に準拠して使用する責任は、ユーザーにあります。

  • 法令遵守:CFAA(コンピューター詐欺および濫用防止法)、DMCA(デジタルミレニアム著作権法)、GDPR、およびユーザーの管轄区域における同等の法令を含む、適用されるすべての法律に MarkGrab の使用が準拠するようにする責任は、ユーザーにあります。

本ソフトウェアは「現状有姿」で提供され、いかなる種類の保証もありません。MIT ライセンスの全文は LICENSE ファイルをご覧ください。

謝辞

MarkGrab は、優れたオープンソースの取り組みと、広く確立された技術を基盤としています。

  • puppeteer-extra-plugin-stealth — anti_bot/stealth.py モジュール(オプトイン方式)の着想となった、ステルス回避パターン(webdriver の削除、プラグインのモック、WebGL の偽装)
  • Mozilla Readability — 密度フィルターで使用している、コンテンツ領域の検出優先順位(article > main > body)とリンク密度によるフィルタリングの考え方
  • Boilerpipe(Kohlschutter ほか、2010 年)— 定型部分を除去するリンク密度比アルゴリズムの学術的な起源
  • Jina Reader — URL から Markdown を抽出する市場ニーズを実証しました。MarkGrab は軽量でセルフホスト可能な代替手段を目指しています

httpx、BeautifulSoup、markdownify、Playwright、youtube-transcript-api、pdfplumber、python-docx を使用して構築されています。

使用例

  • newswatch — RSS ニュース監視パイプライン(feedkit → markgrab → embgrep → diffgrab)
  • watchdeck — 差分の視覚化と安全対策を備えたウェブページ監視

ライセンス

MIT


QuartzUnit エコシステムの一部です。データ収集、抽出、検索、AI エージェントの安全対策に対応する、組み合わせ可能な Python ライブラリを提供しています。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。