Skip to content

Sunwood-ai-labs/PEGASUS

Repository files navigation


P.E.G.A.S.U.S

~ Parsing Extracting Generating Automated Scraping Utility System ~
PyPI - Version PyPI - Format PyPI - Implementation PyPI - Status PyPI - Downloads PyPI - Downloads GitHub Repo stars forks - Sunwood-ai-labs GitHub Last Commit GitHub Top Language GitHub Release GitHub Tag GitHub Actions Workflow Status

[🌐 Website][🐱 GitHub] [🐦 Twitter][🍀 Official Blog]

Important

このリポジトリのリリースノートやREADME、コミットメッセージの9割近くはclaude.aiChatGPT4を活用したAIRA, SourceSage, Gaiah, HarmonAI_IIで生成しています。

こんにちは!PEGASUSへようこそ!PEGASUSは、ウェブサイトを再帰的にクロールし、そのコンテンツを美しいMarkdown形式に変換するパワフルで柔軟なPythonパッケージです。

PEGASUSを使えば、指定したURLから始まり、リンクをたどって関連するページを探索し、HTMLコンテンツを見やすいMarkdownドキュメントに変換することができます。コマンドラインインターフェイス(CLI)から実行することも、Pythonスクリプトから直接使用することもできるので、とっても便利なんです!

🚀 インストール

pipを使ってPEGASUSをインストールしましょう。以下のコマンドを実行するだけです!👇

pip install pegasus-surf 

🎮 使い方

🖥️ コマンドラインから

PEGASUSをコマンドラインから使用するには、以下のようなコマンドを実行します。

検索スクレイピング

pegasus search --search-query "お好み焼き レシピ"

再帰スクレイピング

# 単一のURLからスクレイピングを開始 🌐
pegasus recursive --base-url https://www.otafuku.co.jp/recipe/cook/noodle/nood01.html --output_dir output/yakisoba --exclude-selectors header footer nav --include-domain example.com --exclude-keywords login --output-extension .txt

# 探索深度を指定して実行 🔍
pegasus recursive --base-url  https://docs.eraser.io/docs/what-is-eraser  --output_dir output/eraser_docs2 --exclude-selectors header footer nav aside .sidebar .header .footer .navigation .breadcrumbs --include-domain docs.eraser.io --exclude-keywords login --output-extension .txt --max-depth 2

# URLリストが記載されたテキストファイルからスクレイピングを開始 📜
pegasus recursive --url-file urls.txt  --output_dir output/okonomi --exclude-selectors header footer nav aside .sidebar .header .footer .navigation .breadcrumbs --exclude-keywords login --output-extension .txt --max-depth 1

# LLMを使用したサイトの分類を行いながらスクレイピング 🧠
pegasus recursive --url-file urls.txt  --output_dir output/roomba2 --exclude-selectors header footer nav aside .sidebar .header .footer .navigation .breadcrumbs --exclude-keywords login --output-extension .txt --max-depth 1 --system-message "あなたは、与えられたウェブサイトのコンテンツが特定のトピックに関連する有用な情報を含んでいるかどうかを判断するアシスタントです。トピックに関連する有益な情報が含まれている場合は「True」、そうでない場合は「False」と回答してください。" --classification-prompt "次のウェブサイトのコンテンツは、Roomba APIやiRobotに関する有益な情報を提供していますか? 提供している場合は「True」、そうでない場合は「False」と回答してください。"

オプションの意味はこんな感じです!👀

  • --base-url: スクレイピングを開始するベースURLを指定します。
  • --url-file: スクレイピングするURLが記載されたテキストファイルを指定します。
  • --output-extension: 出力ファイルの拡張子を指定します(デフォルト: .md)。
  • --dust-size: ダストフォルダに移動するファイルサイズのしきい値をバイト単位で指定します(デフォルト: 1000)。
  • --max-depth: 再帰処理の最大深度を指定します(デフォルト: 制限なし)。
  • --system-message: LLMのシステムメッセージを指定します(サイトの分類に使用)。
  • --classification-prompt: LLMのサイト分類プロンプトを指定します。TrueまたはFalseを返すようにしてください。
  • --max-retries: フィルタリングのリトライ回数の上限を指定します(デフォルト: 3)。
  • --model: LLMのモデル名を指定します(デフォルト: gemini/gemini-1.5-pro-latest)。
  • --rate-limit-sleep: レート制限エラー時のスリープ時間を秒単位で指定します(デフォルト: 60)。
  • --other-error-sleep: その他のエラー時のスリープ時間を秒単位で指定します(デフォルト: 10)。

🐍 PythonスクリプトからPEGASUSを使う

PEGASUSをPythonスクリプトから使用するには、以下のようなコードを書きます。

from pegasus import Pegasus

pegasus = Pegasus(
    output_dir="output_directory", 
    exclude_selectors=['header', 'footer', 'nav'],
    include_domain="example.com",
    exclude_keywords=["login"],
    output_extension=".txt",
    dust_size=500,
    max_depth=2,
    system_message="You are an assistant to determine if the content of a given website contains useful information related to a specific topic. If it contains relevant and beneficial information about the topic, answer 'True', otherwise answer 'False'.",
    classification_prompt="Does the content of the following website provide beneficial information about the Roomba API or iRobot? If so, answer 'True', if not, answer 'False'.",
    max_retries=5,
    model="gemini/gemini-1.5-pro-latest",
    rate_limit_sleep=30,
    other_error_sleep=5
)
pegasus.run("https://example.com/start-page")

パラメータの意味はこちらです!

  • output_dir: Markdownファイルを保存するディレクトリを指定します。
  • exclude_selectors: 除外するCSSセレクターのリストを指定します(オプション)。
  • include_domain: クロールを特定のドメインに限定します(オプション)。
  • exclude_keywords: URLに含まれる場合にページを除外するキーワードのリストを指定します(オプション)。
  • output_extension: 出力ファイルの拡張子を指定します(デフォルト: .md)。
  • dust_size: ダストフォルダに移動するファイルサイズのしきい値をバイト単位で指定します(デフォルト: 1000)。
  • max_depth: 再帰処理の最大深度を指定します(デフォルト: 制限なし)。
  • system_message: LLMのシステムメッセージを指定します(サイトの分類に使用)。
  • classification_prompt: LLMのサイト分類プロンプトを指定します。TrueまたはFalseを返すようにしてください。
  • max_retries: フィルタリングのリトライ回数の上限を指定します(デフォルト: 3)。
  • model: LLMのモデル名を指定します(デフォルト: gemini/gemini-1.5-pro-latest)。
  • rate_limit_sleep: レート制限エラー時のスリープ時間を秒単位で指定します(デフォルト: 60)。
  • other_error_sleep: その他のエラー時のスリープ時間を秒単位で指定します(デフォルト: 10)。

✨ PEGASUSの特長

  • 指定したURLから始まり、リンクを再帰的にたどってウェブサイトを探索します。🔍
  • HTMLコンテンツを美しくフォーマットされたMarkdownに変換します。📝
  • 柔軟な設定オプションにより、クロールと変換のプロセスをカスタマイズできます。⚙️
  • ヘッダー、フッター、ナビゲーションなどの不要な要素を除外できます。🙅‍♀️
  • 特定のドメインのみをクロールするように制限できます。🌐
  • 特定のキーワードを含むURLを除外できます。🚫
  • URLリストを記載したテキストファイルを指定してスクレイピングできます。📜
  • LLMを使ってスクレイピングしたサイトを分類できます。🧠

⚠️ 注意事項

  • PEGASUSは、適切な使用方法とウェブサイトの利用規約に従ってご利用ください。🙏
  • 過度なリクエストを送信しないよう、適切な遅延を設けてください。⏰

📜 ライセンス

このプロジェクトはMITライセンスの下で公開されています。詳細については、LICENSEファイルを参照してください。

開発者用

パッケージの構成

View on Eraser

パッケージのフローチャート

View on Eraser

パッケージのER図

View on Eraser

SourceSage

sourcesage --mode DocuMind --docuMind-model "gemini/gemini-1.5-pro-latest" --docuMind-db ".SourceSageAssets\DOCUMIND\Repository_summary.md" --docuMind-release-report ".SourceSageAssets\RELEASE_REPORT\Report_v0.3.0.md"  --docuMind-changelog ".SourceSageAssets\Changelog\CHANGELOG_release_5.0.0.md"  --docuMind-output ".SourceSageAssets/DOCUMIND/RELEASE_NOTES_v0.3.0.md"  --docuMind-prompt-output ".SourceSageAssets/DOCUMIND/_PROMPT_v0.3.0.md"  --repo-name "SourceSage" --repo-version "v0.3.0"

🤝 貢献

プルリクエストや改善案は大歓迎です!🎉 バグ報告や機能リクエストがある場合は、issueを作成してください。😊


PEGASUSを使用すれば、ウェブサイトを再帰的に探索し、コンテンツを美しいMarkdownドキュメントに変換できます。📜✨ ドキュメンテーションの自動化、コンテンツの管理、データ分析などにぜひお役立てください!🙌