AIがビジネスのあらゆる場面で活用される現代、マーケターに求められるスキルセットは劇的に変化しています。膨大なデータの中から価値あるインサイトを抽出し、迅速かつ的確な意思決定を下す能力が、これまで以上に重要視されるようになりました。

本記事では、プログラミング初心者〜中級者のマーケターを対象に、Python×Webスクレイピングで競合サイト分析を自動化する方法を、環境構築からコード、実務での活用、法的注意点まで丁寧に解説します。最後にはケーススタディやFAQも用意。この記事ひとつで、明日から運用可能な実務力が身に付きます。
この記事で得られること
- なぜ現代のマーケターにとってPythonによる競合分析の自動化が不可欠なのかが分かる
- Pythonの環境構築、主要ライブラリ(BeautifulSoup・Selenium)の基本が身に付く
- URL収集 → SEO要素抽出 → CSV保存までを実行可能なコードで習得できる
- Googleの利用規約を順守した安全な実務手順(公式API活用)が理解できる
- ケーススタディとFAQで、現場に落とし込むイメージが湧く
なぜ今、Pythonで競合分析を自動化すべきなのか?

- 時間的・人的コストの限界
主要競合10社×上位20記事×15分=50時間以上。これを毎月・毎週は現実的ではありません。 - ヒューマンエラーの頻発
コピー&ペーストの反復はミスを誘発し、分析の信頼性を損ないます。 - 分析範囲の限定
手作業では調査対象が限定され、新規・ニッチ競合を見落としがちです。
Pythonによる自動化は、上記の課題を一掃します。作業時間は数十分→数分に短縮、ミスは激減、対象拡張も容易。マーケターは「収集」から解放され、解釈・意思決定・施策立案に時間を投資できます。
また、総務省の「令和5年版 情報通信白書」でも、世界のデータ量が指数関数的に増加していることが示されています。(参考:総務省|令和5年版 情報通信白書|データ量の増大)
Pythonでできる競合分析の具体例
- SEO戦略立案: 上位記事のタイトル/メタ/見出し構成、本文文字数、キーワード出現頻度
- コンテンツ企画: 新着記事の定点観測、SNSで伸びているテーマの抽出(API対応時)
- 市場・価格調査: 価格改定の検知、口コミの収集とテキストマイニング

【初心者向け】Python環境構築と準備

- Pythonをインストール: 公式から最新版。Windowsは「Add Python to PATH」にチェック。
- エディタ: Visual Studio Code(VS Code)+Python拡張機能を推奨。
- ライブラリ:
pip install requests beautifulsoup4 selenium pandas
BeautifulSoupとSeleniumの役割と使い分け
項目 | BeautifulSoup | Selenium |
---|---|---|
用途 | 静的HTMLの解析 | 動的レンダリング/ログイン後 |
速度 | 速い | 遅い(ブラウザ操作のため) |
JS実行 | 不可 | 可能 |
例 | ブログ、企業サイト | EC検索結果、SNS、無限スクロール |
基本方針: まずBeautifulSoupで試し、必要に応じてSeleniumに切り替える。
実践:競合分析を自動化する3ステップ(安全版)

ステップ1:競合サイトのURL収集(Google公式API)
重要:Google検索結果ページの直接スクレイピングは利用規約で禁止されています。実務では、Google Custom Search API(またはSerpApi)を必ず使用してください。
import requests
API_KEY = "あなたのAPIキー"
CX = "あなたの検索エンジンID"
def google_search(query, num=10):
url = "https://www.googleapis.com/customsearch/v1"
params = {"q": query, "key": API_KEY, "cx": CX, "num": num}
res = requests.get(url, params=params, timeout=15)
res.raise_for_status() # HTTPエラーを検出
data = res.json()
return [item["link"] for item in data.get("items", [])]
# 例:上位10件のURLを収集
urls = google_search("コンテンツマーケティング 事例", num=10)
for i, u in enumerate(urls, 1):
print(f"{i}: {u}")
・
res.raise_for_status()
:4xx/5xxを即検出。・
timeout
:ハング回避。・
data.get("items", [])
:キー欠損時も落ちない。ステップ2:SEO要素の抽出(タイトル・h1・メタ)
import requests
from bs4 import BeautifulSoup
def extract_info(url):
res = requests.get(url, timeout=15)
res.raise_for_status()
soup = BeautifulSoup(res.text, "html.parser")
title = soup.title.string.strip() if soup.title and soup.title.string else "取得不可"
h1_tag = soup.find("h1")
h1 = h1_tag.get_text(strip=True) if h1_tag else "取得不可"
desc_tag = soup.find("meta", attrs={"name": "description"})
meta = desc_tag["content"].strip() if desc_tag and desc_tag.get("content") else ""
return {"url": url, "title": title, "h1": h1, "meta": meta}
# 動作確認
for url in urls:
print(extract_info(url))
・
strip()
でトリムしてCSVを綺麗に。・h1が無いサイトもあるため例外にしない。
・meta descriptionは空も許容(欠損に強く)。
ステップ3:CSV保存とサマリー
import csv
from datetime import datetime
filename = f"seo_analysis_{datetime.now().strftime('%Y%m%d_%H%M%S')}.csv"
with open(filename, "w", newline="", encoding="utf-8-sig") as f:
writer = csv.DictWriter(f, fieldnames=["url", "title", "h1", "meta"])
writer.writeheader()
for url in urls:
writer.writerow(extract_info(url))
print("✅ CSV保存完了:", filename)
utf-8-sig
で日本語の文字化けを防止。ファイル名にタイムスタンプで上書き事故回避。ケーススタディ:収集したデータを戦略に変える

シナリオ
キーワード「SaaS 請求 自動化」で、上位10記事のURLを取得→タイトル/見出し/文字数を収集したとします。分析のポイントは次のとおり。
- タイトルのパターン分析: 「コスト削減」「請求ミス0」「導入手順」など、頻出訴求を抽出。自社記事の見出し設計に反映。
- 文字数レンジ: 上位の多くが4,000〜6,000字に集中していれば、2,000字では不利。構成を厚くする判断材料に。
- h2/h3の共通骨子: 「課題→効果→導入手順→事例→費用→比較→FAQ」の型が見えれば、自社でも採用。
- メタ説明の傾向: 50〜120字で具体効果やCTAを含むケースが多いなら、同様に最適化。
- 不足の発見: 上位群が触れていない「法対応」や「連携先の網羅表」など、差別化ポイントを企画。
収集データは“過去の結果”ですが、使い方次第で“未来の勝ち筋”になります。型を盗み、穴を埋め、独自価値で上書きする——これがデータ活用の本質です。
法的・倫理的注意点(必読)

- Googleの検索結果ページを直接スクレイピングしない:利用規約で禁止。実務ではGoogle Custom Search APIやSerpApiを使用。
- robots.txtの遵守:アクセス不可領域に入らない。
- アクセス頻度の配慮:
time.sleep()
で間隔を空け、DoSと誤認される挙動を避ける。 - 著作権・個人情報:取得物は社内分析用途に限定。無断公開・再配布は禁止。個人情報の取得はしない。
- 会員制サイトの規約厳守:ログインが必要なサイトや独自DBの抽出は禁止されることが多い。
よくある質問(FAQ)
Q1. API費用を抑えたいのですが?
無料枠内でテストし、キーワードを絞って回数を制御します。頻度の高いモニタリングはAPIのキャッシュ・差分取得(最後に見た日時以降のみ)で最適化しましょう。
Q2. h1が無いページはどう扱う?
例外にせず「取得不可」で通します。代替としてaria-label
やrole
、構造化データを検討しても良いですが、まずは安定運用を優先。
Q3. JavaScriptで生成される本文は?
まずはrequests+BeautifulSoupで試し、欠落が多ければSeleniumに切り替え。レイテンシが許容できない場合は、提供元APIやサイトマップ経由も検討。
Q4. CSV以外の保存形式は?
中長期の分析にはParquet(pandas)やSQLiteが有効。可視化はData Studio/Looker Studio/Power BIと接続すると意思決定が早まります。
Q5. 競合のキーワード出現頻度はどう数える?
本文抽出後、正規化(小文字化・記号除去・ストップワード処理)→単語頻度をカウント。日本語はMeCab/Sudachiで形態素解析を行うと精度が上がります。
まとめ:データ収集から意思決定へ

- 手作業は「時間・エラー・範囲」の壁がある
- Python自動化で短時間・正確・網羅的な分析へ
- Google検索は必ず公式APIを使い、規約順守
- 収集データは社内分析に限定し、法的・倫理的に扱う
今日書いた一行のコードが、あなたの戦略を変えます。データ収集は自動化し、時間を「解釈と意思決定」に投資しましょう。次の一歩は、自社の主要キーワードでURL収集→SEO要素抽出→CSV化。まずは小さく始め、継続的に磨き込む——それがAI時代の勝ち筋です。

“売ることが苦手だった”過去の体験から、人の深層心理とAI活用を融合した、「売り込まなくても選ばれる仕組み」を研究・実践。心理学・神経科学・感情知能(EQ)・AIツールの知見をベースに、無理なく信頼と成果を両立するビジネス・マーケティングの実践ノウハウを発信しています。
在宅ビジネスや副業、コンテンツ作成など新しい働き方についても、信頼・誠実・体験重視の視点から、等身大でサポート。
「売ることのストレスから解放され、心から感謝されるビジネス」を目指すすべての方のパートナーとして、リアルな知見と体験を共有していきます。