Community研究&データ分析github.com

jamditis/web-scraping

アンチボット回避、コンテンツ抽出、非公開API、及びポイズンピル検出機能を備えたWebスクレイピング。Webサイトからのコンテンツ抽出、ペイウォールの処理、スクレイピングカスケードの実装、ソーシャルメディアの処理に使用します。requests、trafilatura、ステルスモードのPlaywright、yt-dlp、instaloaderパターンをカバーします。

web-scraping とは?

このスキルは、最新のWebスクレイピングタスクを処理するために設計された包括的なツールキットです。アンチボット対策をバイパスし、ペイウォールの背後や複雑なWebアプリケーションからコンテンツを抽出し、非公開APIを発見し、デコイデータ(ポイズンピル)を検出します。Pythonの`requests`ライブラリ、`trafilatura`、ステルスモードの`Playwright`、`yt-dlp`、`instaloader`といった主要なツールとパターンを実装しており、Claude Code、Cursor、CodexなどのAIエージェントプラットフォームとシームレスに統合できます。主なユースケースは、複数の抽出戦略を試すカスケードスクレイピング、ソーシャルメディアデータの収集、動的なシングルページアプリケーション(SPA)からのデータ取得などです。このスキルは、抽出を構造化されたデータ形式に標準化し、エラーを適切に処理し、`SKILL.md`の指示に従って特定の環境変数と依存関係の可用性を活用します。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/jamditis/claude-skills-journalism/tree/main/skills/web-scraping

Installed? Explore more 研究&データ分析 skills: affaan-m/uspto-database, affaan-m/scholar-evaluation, affaan-m/literature-review · View all 6 →

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

web-scraping は何をしますか?

アンチボット回避、コンテンツ抽出、非公開API、及びポイズンピル検出機能を備えたWebスクレイピング。Webサイトからのコンテンツ抽出、ペイウォールの処理、スクレイピングカスケードの実装、ソーシャルメディアの処理に使用します。requests、trafilatura、ステルスモードのPlaywright、yt-dlp、instaloaderパターンをカバーします。

機能

  • アンチボットバイパス: PlaywrightのステルスモードやCookie/セッション管理を使用してCloudflare、DataDomeなどのボット対策を回避します。
  • コンテンツ抽出: trafilaturaやBeautifulSoupを使用して、記事本文や主要コンテンツをノイズなく抽出します。
  • 非公開API: ブラウザのネットワークアクティビティを監視することで、Webアプリケーションの内部APIエンドポイントを発見します。
  • ポイズンピル検出: スクレイピングされたデータ内の偽のエントリ(例:隠しフィールド、ダミーデータ)を識別します。
  • カスケードロジック: 堅牢な抽出のために複数の戦略を順番に試行します。
  • ソーシャルメディア: yt-dlp(動画)およびinstaloader(Instagram)のラッパー。

使用方法

このスキルは、特定のタスクのための関数を提供します。以下のように使用します:

from skills.web_scraping import extract_content, scrape_with_playwright

# 記事の内容を抽出
content = extract_content("https://example.com/article")

# 動的なページに対してPlaywrightを使用
page_data = scrape_with_playwright("https://example.com/spa-page")

環境変数

  • SKILL_WEB_SCRAPING_PROXY: スクレイピングリクエストに使用するプロキシURL(例:http://user:pass@proxy:8080)。
  • SKILL_WEB_SCRAPING_TIMEOUT: 各スクレイピング試行のデフォルトタイムアウト(秒)。デフォルトは30。
  • SKILL_WEB_SCRAPING_USER_AGENT: カスタムユーザーエージェント文字列。

依存関係

  • 必須: requests, beautifulsoup4, lxml
  • オプション: playwright(ステルスモード有効), trafilatura, yt-dlp, instaloader

インストール:

pip install requests beautifulsoup4 lxml
# オプション
git clone https://github.com/jamditis/web-scraping.git
cd web-scraping && pip install -e .

例

基本的なコンテンツ抽出

from skills.web_scraping import extract_content

url = "https://en.wikipedia.org/wiki/Web_scraping"
result = extract_content(url)

if result["success"]:
    print(f"タイトル: {result['title']}")
    print(f"本文(最初の500文字): {result['text'][:500]}")
else:
    print(f"エラー: {result['error']}")

Playwrightを使用したSPAページのスクレイピング

from skills.web_scraping import scrape_with_playwright

# SPAあるいは重いJavaScriptを必要とするページ向け
data = scrape_with_playwright(
    url="https://example.com/spa",
    wait_for_selector=".main-content",
    timeout=45000
)

カスケードスクレイピング(高度)

このスキルは、最初の方法が失敗した場合に自動的にフォールバックします:

  1. requests + trafilatura(高速、静的なページ)
  2. Playwright + ステルスモード(動的なページ、アンチボット対策)
  3. 非公開API発見(XHR/Fetchリクエストの解析)
  4. yt-dlp または instaloader(ソーシャルメディアプラットフォーム)

ポイズンピルの検出

from skills.web_scraping import detect_poison_pills

data = "..."  # スクレイピングしたHTML
pills = detect_poison_pills(data)
if pills:
    print(f"警告: 検出されたポイズンピル: {pills}")

トラブルシューティング

  • ブロックされたリクエスト: プロキシ (SKILL_WEB_SCRAPING_PROXY) を設定するか、scrape_with_playwright を使用してください。
  • タイムアウト: SKILL_WEB_SCRAPING_TIMEOUT を増やすか、timeout パラメータを渡してください。
  • 不足しているパッケージ: 欠けているオプションの依存関係は、実行時に無視されます。

Individual skills in this repo

This repo contains 2 individual skills — each has its own dedicated page.

関連スキル