はじめに
PEGASUSは、ウェブサイトを再帰的にクロールしてそのコンテンツをMarkdown形式に変換する、パワフルで柔軟なPythonパッケージです。このたび、PEGASUSのバージョンが0.2.0にアップグレードされ、新機能の追加や改善が行われました。
《PEGASUS v0.2.0 リリース》
WEBからの情報抽出はめちゃ楽になった!あとはGeminiかNotebookLMに投げるだけ!
✅テキストファイルからのURLリスト読み込みに対応 (--url-file オプション)
✅LLMを用いたスクレイピング結果の分類機能を追加 (--system-message, --classification-prompt オプション)… https://t.co/RLMo6xRJhV pic.twitter.com/bUkA51zRHJ— Maki@Sunwood AI Labs. (@hAru_mAki_ch) June 9, 2024
新機能
URLリストからのスクレイピング
PEGASUSは、これまで単一のURLからスクレイピングを開始していましたが、v0.2.0からはURLリストが記載されたテキストファイルを指定してスクレイピングできるようになりました。--url-file
オプションを使用することで、複数のURLを一度にスクレイピングすることが可能です。
pegasus --url-file urls.txt output/roomba --exclude-selectors header footer nav aside .sidebar .header .footer .navigation .breadcrumbs --exclude-keywords login --output-extension .txt --max-depth 1
上記のコマンドでは、urls.txt
というファイルに記載されたURLリストからスクレイピングを開始します。--url-file
オプションでURLリストファイルを指定し、他のオプションを組み合わせることで、効率的なスクレイピングが行えます。
LLMを使用したサイトの分類
PEGASUSでは、Large Language Model (LLM) を使用してスクレイピングしたサイトを分類できるようになりました。--system-message
オプションと--classification-prompt
オプションを使用して、LLMのシステムメッセージとサイト分類プロンプトを指定します。
pegasus --url-file urls.txt 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」と回答してください。"
上記のコマンドでは、LLMを使用してスクレイピングしたサイトを分類しながらスクレイピングを行います。--system-message
オプションでLLMのシステムメッセージを指定し、--classification-prompt
オプションでサイト分類プロンプトを指定します。これにより、特定のトピックに関連する有益な情報を含むサイトを抽出することができます。
また、PEGASUSではGeminiの無料APIに柔軟に対応するために、レートリミットが発生した場合にスリープする機能を追加しました。--rate-limit-sleep
オプションを使用して、レート制限エラーが発生した際のスリープ時間を秒単位で指定できます。これにより、APIの利用制限に適切に対処し、スクレイピングを継続することができます。
pegasus --url-file urls.txt 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」と回答してください。" --rate-limit-sleep 30
上記のコマンドでは、--rate-limit-sleep
オプションを使用してレート制限エラー時のスリープ時間を30秒に設定しています。
さらに、PEGASUSではLitellmの構成を活用することで、BedrockやOpenAIなど複数のプロバイダにも柔軟に対応できるようになりました。--model
オプションを使用して、使用するLLMのモデル名を指定することができます。これにより、異なるプロバイダのLLMを seamlessly に切り替えながら、サイトの分類を行うことができます。
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="bedrock/bedrock-4",
rate_limit_sleep=30,
other_error_sleep=5
)
上記のコードでは、model
パラメータを使用してBedrockのモデルbedrock/bedrock-4
を指定しています。これにより、Bedrockプロバイダを使用してサイトの分類が行われます。
PEGASUSのLLMを使用したサイトの分類機能は、柔軟なオプション設定と複数プロバイダへの対応により、より強力で汎用性の高いものになりました。レートリミットへの対処やプロバイダの切り替えを適切に行うことで、安定したスクレイピングとサイトの分類が可能です。
改善点
探索深度の指定
PEGASUSでは、--max-depth
オプションを使用して、再帰処理の最大深度を指定できるようになりました。これにより、無限ループを防ぎ、必要な深度までリンクを辿ることができます。
pegasus --base-url https://docs.eraser.io/docs/what-is-eraser 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
上記のコマンドでは、--max-depth
オプションを使用して探索深度を2に指定しています。これにより、ベースURLから2階層までのリンクをたどってスクレイピングを行います。
出力ファイルの拡張子指定
PEGASUSでは、--output-extension
オプションを使用して、出力ファイルの拡張子を指定できるようになりました。デフォルトでは.md
が使用されますが、必要に応じて他の拡張子を指定することができます。
pegasus --base-url https://example.com/start-page output_directory --exclude-selectors header footer nav --include-domain example.com --exclude-keywords login --output-extension txt
上記のコマンドでは、--output-extension
オプションを使用して出力ファイルの拡張子を.txt
に指定しています。
ダストフォルダへの移動サイズのしきい値指定
PEGASUSでは、--dust-size
オプションを使用して、ダストフォルダに移動するファイルサイズのしきい値をバイト単位で指定できるようになりました。デフォルトでは1000バイトが使用されますが、必要に応じて変更することができます。
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
)
上記のコードでは、dust_size
パラメータを使用してダストフォルダへの移動サイズのしきい値を500バイトに指定しています。
引数一覧
PEGASUSの主な引数とその説明を以下の表にまとめました。
引数 | 説明 | デフォルト値 |
---|---|---|
--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 |
これらの引数を適切に組み合わせることで、PEGASUSのスクレイピング動作をカスタマイズすることができます。必要に応じて引数を指定し、効率的かつ柔軟なウェブスクレイピングを実現しましょう。
おわりに
以上、PEGASUS v0.2.0のリリースに伴う新機能と改善点について解説しました。URLリストからのスクレイピングやLLMを使用したサイトの分類など、より強力で柔軟なウェブスクレイピングが可能になりました。
PEGASUSを使用すれば、ウェブサイトを再帰的に探索し、コンテンツを美しいMarkdownドキュメントに変換できます。ドキュメンテーションの自動化、コンテンツの管理、データ分析などにぜひお役立てください。
初心者の方も、この記事を参考にPEGASUSを使ってみてください。コマンドラインやPythonスクリプトから簡単に使用できます。ウェブスクレイピングの可能性を広げるPEGASUSで、新しいプロジェクトにチャレンジしてみましょう!
コメント