https://github.com/helloruru/all-can-grab
萬用公開網頁擷取器 | Universal public web scraper with four-layer fallback strategy for AI agents
https://github.com/helloruru/all-can-grab
claude-code facebook notion ptt python skill web-scraper youtube
Last synced: 14 days ago
JSON representation
萬用公開網頁擷取器 | Universal public web scraper with four-layer fallback strategy for AI agents
- Host: GitHub
- URL: https://github.com/helloruru/all-can-grab
- Owner: HelloRuru
- License: mit
- Created: 2026-03-15T15:00:03.000Z (3 months ago)
- Default Branch: main
- Last Pushed: 2026-03-15T15:08:36.000Z (3 months ago)
- Last Synced: 2026-03-16T04:09:11.712Z (3 months ago)
- Topics: claude-code, facebook, notion, ptt, python, skill, web-scraper, youtube
- Language: Python
- Size: 37.1 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.ja.md
- License: LICENSE
Awesome Lists containing this project
README
All Can Grab
リンクを貼ったら、AI が「アクセスできません」と返す?
そのページ、実は公開されている。AI に鍵がないだけ。
このスクリプトが、その鍵束。
---
## 課題
Facebook のリンクを AI に貼った。
返ってきたのは:*「すみません、このページにアクセスできません」*
……その投稿、公開されてるのに。
仕方なくブラウザを開いて、コピーして、貼り直す。毎回これ。
正直、「コピペ」だけで一日の半分が消える。
AI がやる気がないわけじゃない。プラットフォームごとに鍵が違うのに、合う鍵を持っていないだけ。
## 解決策
Python スクリプト1本。4層フォールバック。AI に正しい鍵を渡す。
| 機能 | 説明 |
|------|------|
| スマート UA 切替 | Facebook/Threads は Googlebot UA、YouTube/GitHub は通常 UA |
| TLS フィンガープリント回避 | curl_cffi で Cloudflare 保護サイト(Medium など)に対応 |
| 有料 API フォールバック | Apify 連携、完全ロックされたプラットフォーム(Instagram など)用 |
| ブラウザレンダリング | ヘッドレス Playwright、JavaScript が必要なページ用 |
| 構造化出力 | 統一 JSON スキーマ、status・source・blocker フィールド付き |
| 正直な報告 | 成功を偽らない——なぜ失敗したか、次に何をすべきか明確に報告 |
## :package: インストール
```bash
# ステップ 1:コア依存パッケージをインストール
pip install requests beautifulsoup4
# ステップ 2:オプションのフォールバックをインストール(多いほど取得範囲が広がる)
pip install curl_cffi # TLS フィンガープリント回避(Cloudflare)
pip install playwright && playwright install chromium # ブラウザレンダリング
# ステップ 3:試してみる
python grab.py "https://www.facebook.com/share/p/xxxxx/"
```
## :brain: 仕組み
4層戦略、速いものから順に:
1. **素のHTTP**(HTTP request)——ブラウザを開かず、適切な User-Agent で直接 HTML を取得。ほとんどの公開ページはこれで十分。
2. **TLS フィンガープリント**(curl_cffi)——実際のブラウザの TLS フィンガープリントを模倣。Cloudflare 保護(Medium など)に対応。
3. **有料 API**(Apify)——プラットフォームが無料アクセスを完全にブロックした場合の最終手段(Instagram 単体投稿など)。
4. **ブラウザレンダリング**(Playwright)——上記すべてが失敗した場合、ヘッドレスブラウザで JavaScript をレンダリング。
ログインなし。Cookie 保存なし。ログインウォール回避なし。公開コンテンツのみ。
## :detective: プラットフォーム対応
| プラットフォーム | 素の取得戦略 | フォールバック | ステータス | 備考 |
|-----------------|-------------|---------------|-----------|------|
| Facebook | Googlebot UA | Playwright | Tested | 公開投稿・ページ安定;OG URL 検証含む |
| Threads | Googlebot UA | Playwright | Tested | |
| YouTube | Normal UA | - | Tested | タイトルと説明のみ;動画コンテンツは未対応 |
| GitHub | Normal UA | - | Tested | |
| PTT | Normal UA + over18 cookie | Playwright | Tested | over18 cookie 自動設定 |
| 104 Job Bank | Normal UA | - | Limited | 公開求人ページは取得可能;**プロフィール共有ページ(pda.104.com.tw)は Vue SPA で取得不可** |
| Notion(公開ページ) | Googlebot UA | - | Tested | 公開 Notion ページは Googlebot に完全なコンテンツをレンダリング |
| Astro / SSG サイト | Normal UA | - | Tested | サーバーレンダリング HTML、最も安定 |
| LinkedIn | Googlebot UA | - | Not supported | 全メソッドで 999 エラー;取得可能なコンテンツなし |
| Instagram | - | - | Partial | プロフィール(ユーザー名/フォロワー数)のみ;**単体投稿の無料手段なし** |
| X / Twitter | Normal UA | Playwright | Limited | ログイン要求が増加中;公開ツイートも取得不保証 |
| Medium | Normal UA | curl_cffi -> Playwright | Limited | Cloudflare + SPA 二重防御 |
| Dcard | Normal UA | Playwright | Limited | 一部投稿はログイン必要;匿名板はほぼロック |
| その他 | Googlebot UA | Playwright | Best effort | |
### ステータス定義
- **Tested** ——安定動作、公開コンテンツはほぼ取得可能
- **Partial** ——一部機能は動作するが、コア機能に制限あり
- **Limited** ——プラットフォーム防御が厳しく、部分情報(タイトル・要約)は取得可能。失敗時は原因と提案を報告
- **Not supported** ——プラットフォームが全スクレイピング手法を積極的にブロック;取得可能なコンテンツなし
- **Best effort** ——専用戦略なし、汎用ロジックで最善を尽くす
### アクセス不可能なプラットフォーム
| プラットフォーム | 理由 |
|-----------------|------|
| LINE グループ / 投稿 | クローズドエコシステム、公開 URL なし |
| 小紅書(RED) | クローズド + 地域制限 |
| 有料コンテンツ | サブスクリプション必要;ペイウォール回避はしない |
### Instagram 単体投稿(2026-03-13 時点)
**無料で信頼できる手段なし。** Instagram は 2024 年末から未認証アクセスを完全ブロック。以下の方法はすべて失敗:Googlebot UA、通常/モバイル UA、`/embed/` エンドポイント、oEmbed API、未認証 Playwright、Google cache、IG 内部 API。
| 代替手段 | 説明 | 費用 |
|----------|------|------|
| 手動確認 | ユーザー自身が IG にログインし、スクリーンショットやテキストを提供 | 無料 |
| 公式埋め込み | Meta oEmbed で表示埋め込み可能(完全データ抽出は不可) | 無料 |
| Apify 有料フォールバック | grab.py に内蔵;`APIFY_TOKEN` 設定で有効化 | 従量課金 |
```bash
# トークン設定時のみ IG 単体投稿で Apify を使用;未設定なら他の機能に影響なし
export APIFY_TOKEN="apify_api_xxxxx"
```
## :open_file_folder: ファイル構成
```text
all-can-grab/
grab.py # メインスクリプト
SKILL.md # スキル説明(Claude Code 統合用)
README.md # 英語版ドキュメント
README.zh-TW.md # 繁体字中国語ドキュメント
README.ja.md # 日本語ドキュメント
LICENSE # MIT
```
**Claude Code スキルとして:** `~/.claude/skills/learned/all-can-grab/` に配置すると、Claude Code が自動判断して使用。
**スタンドアロン:** 任意のディレクトリで `python grab.py ` を実行。
## :wrench: カスタマイズ
- **プラットフォーム追加**:`grab.py` のプラットフォーム設定に戦略エントリを追加
- **カスタムパーサー**:`clinic_slots` フィールドがドメイン固有のパーサー追加方法を実演(歯科予約枠の例、コア機能ではない)
- **環境変数**:`APIFY_TOKEN` を設定して Instagram 有料フォールバックを有効化
## :bulb: なぜこう作ったか
**ブラウザを開かなくていいなら、開かない。**
HTTP で済むなら Playwright は不要。時間もリソースも節約。
**サイトごとに鍵を分ける。**
Facebook には Googlebot UA、PTT には over18 cookie。設定は1サイト1エントリ。追加は1行。
**取れなかったら、正直に言う。**
成功を偽らない。何が問題か、次に何をすべきか報告する。
**公開コンテンツだけ。**
ログインなし。パスワード保存なし。ペイウォール回避なし。見えるものだけ取る。
### 出力スキーマ
```json
{
"summary": "3~5文の要約",
"items": [
{
"title": "投稿タイトル",
"snippet": "コンテンツ抜粋...",
"datetime_str": "2026-03-13",
"author": "著者名",
"url": "https://..."
}
],
"clinic_slots": [],
"status": "success",
"blocker": "",
"raw_text": "完全な原文...",
"source": "http-googlebot"
}
```
| フィールド | 説明 |
|-----------|------|
| `status` | `success` / `partial` / `failed` |
| `source` | 使用した戦略:`http-googlebot` / `http-normal` / `curl_cffi` / `playwright` |
| `blocker` | 失敗原因(次のステップの判断用) |
| `clinic_slots` | 拡張例:カスタムパーサーのデモ(コア機能ではない) |
## 動作要件
- Python 3.8+
- `requests` + `beautifulsoup4`(必須)
- `curl_cffi`(オプション——Cloudflare 回避)
- `playwright`(オプション——ブラウザレンダリング)
## ライセンス
[MIT](LICENSE)
---
ドアは開いた。取りに行こう。