目次
1. はじめに(課題の提示)
「NotebookLMに自分のサイトの内容を学習させたいけれど、URLを一つずつ登録するのは面倒すぎる……」 そんな悩みを解決するために、Pythonを使ってサイト内の全ページ情報を一括でCSV抽出し、NotebookLMに読み込ませるスマートな方法を解説します。
2. 全体フロー
今回の作業は、以下の3ステップで完了します。
- Google Colabでスクレイピング: サイト内のURL・タイトル・本文・日付を自動収集。
- CSVデータの保存: 収集したデータをNotebookLMが読み取りやすい形式に保存。
- NotebookLMへのアップロード: AIにサイトの知識をインストール。
3. 実践:Pythonコードでサイトを丸ごと抽出
エンジニアでなくても大丈夫です。Google Colabに貼り付けるだけで動くスクリプトを用意しました。
import requests
from bs4 import BeautifulSoup
from urllib.parse import urljoin, urlparse
import time
import pandas as pd
from google.colab import files
target_url = "ここにURLを入れる"
domain = urlparse(target_url).netloc
visited = set()
to_visit = [target_url]
excluded_ext = ('.jpg', '.jpeg', '.png', '.gif', '.pdf', '.zip', '.css', '.js', '.svg', '.ico', '.webp')
results = []
print("抽出を開始します。完了後にCSVが自動でダウンロードされます...")
while to_visit:
current_url = to_visit.pop(0)
clean_url = current_url.split('#')[0].rstrip('/')
if clean_url in visited:
continue
try:
time.sleep(0.5) # サーバー負荷軽減のため少し長めに設定
res = requests.get(current_url, timeout=10)
res.encoding = res.apparent_encoding # 文字化け防止
visited.add(clean_url)
soup = BeautifulSoup(res.text, 'html.parser')
# --- データの抽出 ---
# 1. タイトル
title = soup.title.string.strip() if soup.title else "タイトルなし"
# 2. 公開日時 (WordPressの一般的なメタタグやtimeタグから取得)
date_element = soup.find('meta', property='article:published_time')
if date_element:
date = date_element['content']
else:
time_tag = soup.find('time')
date = time_tag.get('datetime') if time_tag else "不明"
# 3. 本文 (メインコンテンツと思われる部分を抽出)
# 不要なタグを除去
for s in soup(['script', 'style', 'nav', 'header', 'footer', 'aside']):
s.decompose()
# 本文テキストを取得(改行や余計な空白を整理)
content = " ".join(soup.get_text().split())
content = content[:1000] + "..." if len(content) > 1000 else content # 1000文字に制限
print(f"取得中: {title} ({clean_url})")
# リストに追加
results.append({
'url': clean_url,
'title': title,
'date': date,
'content': content
})
# --- 次のURLを探す ---
for a in soup.find_all('a', href=True):
full_url = urljoin(target_url, a['href']).split('#')[0].rstrip('/')
parsed_url = urlparse(full_url)
if (parsed_url.netloc == domain and
full_url not in visited and
not full_url.lower().endswith(excluded_ext) and
"wp-json" not in full_url and
"wp-content" not in full_url):
if full_url not in to_visit:
to_visit.append(full_url)
except Exception as e:
print(f"エラー(スキップ): {current_url} - {e}")
continue
# --- CSV作成 ---
df = pd.DataFrame(results)
# CSV保存
filename = "site_content_list.csv"
df.to_csv(filename, index=False, encoding='utf-8-sig')
print("\n--- 抽出完了 ---")
print(f"合計 {len(df)} 件のページデータを抽出しました。")
# ダウンロード実行
files.download(filename)
4. NotebookLMへの取り込みと設定
書き出したCSVファイルをNotebookLMの「ソースを追加」からアップロードします。
ここがコツ!: 単にテキストを流し込むのではなく、「URL」「タイトル」「内容」「日付」が整理されたCSVを入れることで、AIが「いつ、どのページで言及された情報か」を正確に把握できるようになります。
5. AIに質問してみる(活用例)
学習が完了したら、以下のような質問を投げることができます。
- 「このサイトの強みを3点にまとめて」
- 「〇〇(特定の商品やサービス)について書かれた記事を日付順にリストアップして」
- 「過去のブログ記事のトーンを分析して、新しい記事の導入文を書いて」
6. まとめ
手動でコピー&ペーストしていた時間が、自動化によって数分に短縮されます。情報のアップデートが必要になったら、またColabを回してCSVを更新するだけ。 自分だけの「サイト専門家AI」を育てて、業務効率を最大化させましょう!
