こんにちは、Heywaです。
以前の記事で、ClaudeとPythonを使ったWordPressの自動投稿パイプラインについて紹介しました。今回はその応用編として、「Seleniumを使ったWebスクレイピング」と「WordPressへの自動投稿」を連携させる方法について解説します。
この仕組みを作れば、「特定のサイトから最新情報を自動で取得し、AIで要約・整形して、自分のブログに記事として公開する」という、強力なキュレーションメディアの自動運用が可能になります。
システム全体のアーキテクチャ
今回構築するシステムの全体像は以下の通りです。
- データ収集 (Selenium): JavaScriptで動的に描画されるサイトから、Seleniumを使って必要なテキストや画像URLをスクレイピングする。
- コンテンツ生成 (Claude API): 取得した生データをClaudeのAPIに渡し、ブログ記事用のHTMLフォーマットに要約・整形させる。
- 記事投稿 (WordPress REST API): 生成されたHTMLを、WordPressのREST API経由で投稿する。
これらすべてを1つのPythonスクリプト(または連携する複数のスクリプト)で完結させます。
ステップ1:Seleniumでのデータ収集
まずは、Claude Codeを使ってSeleniumのスクレイピング部分を作成します。例えば、あるニュースサイトの最新記事一覧を取得したい場合、以下のようなコードになります。
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
def scrape_news():
options = Options()
options.add_argument('--headless')
driver = webdriver.Chrome(options=options)
news_data = []
try:
driver.get("https://example-news-site.com")
# 記事要素の取得(サイトの構造に合わせて変更)
articles = driver.find_elements(By.CLASS_NAME, 'article-item')
for article in articles[:5]: # 最新5件を取得
title = article.find_element(By.TAG_NAME, 'h2').text
summary = article.find_element(By.CLASS_NAME, 'summary').text
news_data.append(f"タイトル: {title}\n概要: {summary}")
finally:
driver.quit()
return "\n\n".join(news_data)
ステップ2:Claude APIによる記事化
次に、取得した news_data をClaude APIに渡して、ブログ記事の体裁に整えてもらいます。ここでプロンプトの工夫が活きてきます。
import anthropic
import os
def generate_blog_post(raw_data):
client = anthropic.Anthropic(api_key=os.getenv("ANTHROPIC_API_KEY"))
prompt = f"""
以下のニュースデータを元に、私のブログ(Heywaの雑記帳)用の記事を作成してください。
【要件】
- HTML形式で出力すること(h2, h3, p, ulタグなどを適切に使用)
- 冒頭は「こんにちは、Heywaです。」から始めること
- ニュースに対する私(40代、投資・副業好きの会社員)の簡単な所感を交えること
【ニュースデータ】
{raw_data}
"""
response = client.messages.create(
model="claude-3-5-sonnet-20241022",
max_tokens=2000,
messages=[{"role": "user", "content": prompt}]
)
return response.content[0].text
ステップ3:WordPressへの自動投稿
最後に、生成されたHTMLをWordPressに投稿します。これは以前紹介したREST APIを使う方法と全く同じです。
import requests
from requests.auth import HTTPBasicAuth
def post_to_wordpress(title, content):
url = os.getenv("WP_URL") + "/wp-json/wp/v2/posts"
auth = HTTPBasicAuth(os.getenv("WP_USER"), os.getenv("WP_APP_PASSWORD"))
data = {
"title": title,
"content": content,
"status": "draft", # まずは下書きで保存
"categories": [13] # ソフト・ツールカテゴリ
}
response = requests.post(url, auth=auth, json=data)
return response.status_code == 201
まとめ:パイプラインを繋ぐ快感
これら3つの関数を順番に呼び出すメイン処理を書けば、完全自動化パイプラインの完成です。
「データを集める」「考える(整形する)」「発信する」という一連のプロセスが、Pythonという接着剤によってシームレスに繋がる瞬間は、システム思考型の人間にとって最高の快感です。皆さんもぜひ、自分だけの自動化パイプラインを構築して、日々のAwesomeを増やしていきましょう。
