PythonとGemini APIを使いTrafilaturaでWebサイトから本文のみを抽出してチャットするプログラムを解説。コピペで即動くサンプルコード付き!
「Geminiに最新のニュースや、特定のウェブサイトの内容を読み込ませて相談できたら最高やのにな……」って思ったことない?
そんなときは前章でも説明した、本文だけをキレイに抜き出してくれる呪文 トラフィラチュラ(trafilatura)。
URLを指定するだけでサイトから余計な広告などを省いて、本文だけをサクッと抜き出してGeminiに渡せるんや。
ここでは「Webサイトを読み込んでGeminiに相談する」までの流れを、リファレンス形式でサクッとまとめていくわ。
この記事では、ウェブサイトから情報を取ってくるところから、Geminiと「チャット形式」で深掘りした対話をするところまで、コードのコピペだけで体験できるステップを解説するな!
[Google Colab(Python)で Web取得 & チャット対話 合計5分]「特定のキャラクターについてGeminiと語り合いたい」「最新記事を要約させたい」そんな望みが、たった数行のコードで叶うで。
さあ、一緒にはじめよか!
Google Colab(Python)からの Gemini の呼び出しは Google Generative AI SDK を使用する。
以下のコードは、Pythonライブラリの trafilatura でWebサイトを読み込んで本文のみ抽出し、Gemini を呼び出し、チャットモードで抽出した本文と質問に対する回答を生成し、再度質問に対する回答を生成している。
「→ コードをクリップボードにコピーする」でコピーして、コードセル(画面中央のPythonコードの入力欄)に貼り付けて、api_key="Google AI Studio で取得したAPI キー" に自分のAPIキーを貼り付け、左側の ▶(実行ボタン)で実行すると、1分前後 ▶(実行ボタン)がクルクル回転してプログラムが実行される。
実行が終了すると、画面下に
/usr/local/lib/python3.12/dist-packages/google/colab/...
のような表示が続き、その下に質問に対する Gemini の回答が表示される。
非エンジニアさんは、とにかく以下のコードをコピペして、API キーを変更すれば動くんだと思ってくれや。
# 1. 標準ライブラリ(timeモジュール)
import time
# 2. Google Generative AI SDK を Python コードにインポート
try:
import google.generativeai as genai
except ImportError:
!pip install -U -q google-generativeai
import google.generativeai as genai
# 3. trafilatura を Python コードにインポート
try:
import trafilatura
except ImportError:
!pip install -U -q trafilatura
import trafilatura
# 4. genai に Google AI Studio で取得したAPI キーを設定
genai.configure(api_key="Google AI Studio で取得したAPI キー")
# 5. Geminiのモデルを指定し、インスタンスを生成
# model = genai.GenerativeModel('gemini-2.5-flash')
model = genai.GenerativeModel('gemini-2.5-flash-lite')
# 6. URLを指定して本文だけを抽出
downloaded = trafilatura.fetch_url('https://ja.wikipedia.org/wiki/%E3%82%B7%E3%83%A3%E3%82%A2%E3%83%BB%E3%82%A2%E3%82%BA%E3%83%8A%E3%83%96%E3%83%AB')
tratext = trafilatura.extract(downloaded)
# 7.「シャアを救う方法はあった?」+ 改行コード + 改行コード + trafilaturaで抽出したURLの文章を prompt 変数に代入
prompt = "シャアを救う方法はあった?\n\n" + tratext
# 8 チャットセッションの開始(履歴を保持するモード)
chat = model.start_chat(history=[])
# 9. chat.send_messageメソッドを実行し、戻り値を出力
response = chat.send_message(prompt)
print(response.text)
# 10. 10秒スリープ(API利用制限の回避のため)
time.sleep(10)
# 11. chat.send_messageメソッドを実行し、戻り値を出力
response = chat.send_message("さっきの回答を更に推論して洗練させて回答して")
print(response.text)→ コードをクリップボードにコピーする
api_key="Google AI Studio で取得したAPI キー"は、自分のAPIキーに書き直す
# 1. 標準ライブラリ(timeモジュール)
import time
#1 import time は
time モジュールをコードにインポートしている。
# 2. Google Generative AI SDK を Python コードにインポート
try:
import google.generativeai as genai
except ImportError:
!pip install -U -q google-generativeai ← Google Colab の拡張機能。!pip install コマンドを実行。※ Google Colab 以外のPython環境では動かないので注意。
import google.generativeai as genai
#2 import google.generativeai は
Google Generative AI SDK を Python コードにインポートしている。処理の詳細は以下の通り。
try: import google.generativeai as genai で google.generativeai をインポート。try: import が失敗した場合、except ImportError: 以降が実行され、 !pip install -U -q google-generativeai で google-generativeai をインストール。import google.generativeai as genai している。# 3. trafilatura を Python コードにインポート
try:
import trafilatura
except ImportError:
!pip install -U -q trafilatura
import trafilatura
#3 try: import trafilatura も同様の手順で処理している。
Google Colab に trafilatura を インストールするで trafilatura をインストールしているが、セッションが切れると再度インストールする必要がある。毎回インストールするのは面倒なので、コードの中でインストールを取り込んでいる。
# 4. genai に Google AI Studio で取得したAPI キーを設定
genai.configure(api_key="Google AI Studio で取得したAPI キー")
#4 は
genai に Google AI Studio で取得したAPI キーを設定している。
# 5. Geminiのモデルを指定し、インスタンスを生成
model = genai.GenerativeModel('gemini-2.5-flash')#5 は
GenerativeModelクラスにGeminiのモデルを指定し、インスタンスを生成している。
# 6. URLを指定して本文だけを抽出
downloaded = trafilatura.fetch_url('https://ja.wikipedia.org/wiki/%E3%82%B7%E3%83%A3%E3%82%A2%E3%83%BB%E3%82%A2%E3%82%BA%E3%83%8A%E3%83%96%E3%83%AB')
tratext = trafilatura.extract(downloaded)
#6 は
URLを指定して本文だけを抽出している。downloaded = trafilatura.fetch_url('https://ja.wikipedia.org/...') は指定したURLのデータを取得している。この状態は未加工の一次データである。
tratext = trafilatura.extract(downloaded) で取得した一次データを、trafilatura の extract 関数で、広告、ナビゲーションメニュー、フッターなどの「ノイズ」を除去し、記事の本文だけを抽出している。
# 7.「シャアを救う方法はあった?」+ 改行コード + 改行コード + trafilaturaで抽出したURLの文章を prompt 変数に代入
prompt = "シャアを救う方法はあった?\n\n" + tratext
#7 は
「シャアを救う方法はあった?」+ \n(改行コード) + \n(改行コード) + tratext(trafilaturaで抽出したURLの文章)を prompt 変数に代入している。
# 8 チャットセッションの開始(履歴を保持するモード)
chat = model.start_chat(history=[])
#8 は model.start_chat は
チャットセッション(ChatSessionクラス)を初期化(history=[])しを開始している。
# 9. chat.send_messageメソッドを実行し、戻り値を出力
response = chat.send_message(prompt)
print(response.text)
#9 は
インスタンス(model)の chat.send_message メソッドの引数に prompt(#7で作成した文字列)を設定し推論を実行。取得したレスポンスオブジェクト(GenerateContentResponse)を response に代入している。
print(response.text) で response の text プロパティ(生成された文字列)を抽出して出力している。
# 10. 10秒スリープ
time.sleep(10)
#10 は
time.sleep 関数で指定した秒数、処理を停止している(API利用制限の回避のため)。
# 11. chat.send_messageメソッドを実行し、戻り値を出力している。
response = chat.send_message("さっきの回答を更に推論して洗練させて回答して")
print(response.text)#11 は
インスタンス(model)の chat.send_message メソッドの引数に "さっきの回答を更に推論して洗練させて回答して" を設定し推論を実行。取得したレスポンスオブジェクト(GenerateContentResponse)を response に代入している。
print(response.text) で response の text プロパティ(生成された文字列)を抽出して出力している。
import するパッケージのルート名。api_key='...')するために使用する。import するパッケージのルート名。google.generativeai.GenerativeModel クラスは、Geminiモデルと対話するためクラス。
GenerativeModel 主な役割と機能model = genai.GenerativeModel('gemini-2.5-flash') 1. 主要な引数
インスタンス化の際、主に以下のパラメータを受け取る。
2. 主なメソッド(振る舞い)
生成されたインスタンスは、以下の高レベルAPIを提供する。
3. 位置付け
この命令を実行した時点では、まだ実際のAPIリクエスト(HTTP通信)は発生しない。
あくまで「リクエストを投げるためのクライアント設定を保持したオブジェクトをメモリ上に生成する」工程で、通信が発生するのは generate_content() などのメソッドを叩いた瞬間になる。
Google AI SDK for Python (GitHub) のソースコード上では、GenerativeModel クラスがリクエストの構築とレスポンスのパースを抽象化しているのが分かる。
戻り値(GenerateContentResponse)の構造
![]() | 10日で使えるPHP | 未経験のサルでも分かるPHPの学習サイト 文系未経験、サルでも10日でPHPを使えるように内容を構成した独学向け学習サイト。不要な基礎はバッサリ切り捨て必要な基礎を十分に深堀した・・・ 続きを見る |