ClaudeCodeでWebスクレイピングする方法【法律遵守で安全に】
「毎日チェックしているニュースサイト、自動で集められたら楽なのに」「競合の価格を毎日転記しているのが大変」――そんな悩みを解決してくれるのがWebスクレイピングです。Pythonと少しの工夫で、Web上の情報を自動で集めて整理できます。さらにClaudeCodeを使えば、コードを書けない人でも安全にスクレイピングを実装できます。ただし、Webスクレイピングは「相手のサーバーに負荷をかける」「規約違反になる」「個人情報を含む」といったリスクがあり、法律やマナーを守って行う必要があります。本記事では、ClaudeCodeを使った安全なスクレイピング方法を、合法・倫理的な前提を踏まえて初心者向けに丁寧に解説します。
結論:スクレイピングは「事前確認」と「節度」が9割
結論として、Webスクレイピングは便利な技術ですが、「やっていいかの事前確認」と「実行時の節度」を守れば安全に活用できます。具体的には、対象サイトの「利用規約」と「robots.txt」を必ず読み、禁止されていない範囲でだけ実行すること。アクセス間隔を最低1秒以上空け、相手サーバーに負荷をかけないこと。取得したデータの利用目的を明確にし、再配布や商用利用は許諾なしには行わないこと。これらを徹底すれば、法的リスクはほぼゼロにできます。技術的には、PythonのrequestsライブラリとBeautifulSoupでほとんどの静的サイトに対応でき、JavaScriptで動的に生成されるサイトにはSeleniumやPlaywrightを使います。ClaudeCodeに「このサイトの利用規約を確認した上で、〇〇のデータを取得するスクリプトを書いて」と頼めば、適切なコードと注意点を教えてくれます。本記事では、合法的に使える「自分のRSSフィードをまとめる」「公開ニュースを集める」といった実例を中心に紹介します。
Webスクレイピングとは:仕組みと用途
Webスクレイピングとは、Webページの内容をプログラムで自動的に取得し、必要な情報を抽出することです。たとえば、ニュースサイトのトップページから記事タイトル一覧を取り出したり、商品ページから価格を抜き出したりする処理です。手作業のコピペを自動化するイメージです。
仕組みはシンプルで、プログラムがブラウザのふりをしてWebサイトにアクセスし、返ってきたHTMLから目的の情報を抜き出します。HTMLは構造化された文書なので、「このタグの中の文字列がほしい」と指示すれば取得できます。
代表的な用途は、ニュースや市場情報のモニタリング、求人情報の集約、SNSのキーワード分析、自社サイトの監視(リンク切れチェックなど)です。注意したいのは、ログインが必要な情報、個人情報、有料コンテンツへのアクセスは規約違反や法律違反になりがちな点。本記事では「公開されている情報を、規約で許されている範囲で集める」前提で進めます。
法律と倫理:これだけは押さえる
Webスクレイピングを始める前に、最低限知っておきたい法律と倫理を整理します。
第一に、著作権法。Web上の文章や画像には著作権があり、無断で複製・再配布するのは違法です。ただし、収集して個人的に分析するだけなら認められる範囲があります。
第二に、不正アクセス禁止法。ログインが必要な領域に勝手に入り込むのは違法です。「スクレイピングのためにアカウントを自動作成する」のもアウトです。
第三に、サイトの利用規約。多くのサイトは規約で「自動収集禁止」と明記しています。違反するとアカウント停止や損害賠償の可能性があります。
第四に、robots.txt。これはサイト運営者が「ここはクロールしないでね」と書いた指示書です。法的拘束力は弱いものの、守るのがネット上の常識です。https://対象サイト/robots.txtにアクセスすれば中身が見られます。
第五に、サーバー負荷。短時間で大量アクセスを送ると業務妨害罪に問われた事例もあります(岡崎図書館事件)。アクセス間隔は最低1秒、できれば数秒空けるのが安全です。
ClaudeCodeに依頼するときも、これらの確認をセットで頼みましょう。
〇〇というサイトから記事タイトルを集めたい。
作業を始める前に、そのサイトの利用規約とrobots.txtを確認する手順を教えて。
そして、もし規約上問題なければ、リクエスト間隔を3秒空けて取得するスクリプトを書いて。
環境構築:requestsとBeautifulSoup
スクレイピングの定番ライブラリはrequestsとBeautifulSoupです。仮想環境を作って入れましょう。
新しいPython仮想環境scrapingを作って、requests、beautifulsoup4、lxml、
あとSelenium(必要になったとき用)をインストールして。
ClaudeCodeはpython -m venv scraping、source scraping/bin/activate、pip install requests beautifulsoup4 lxml seleniumといった一連のコマンドを案内します。
実例1:公開RSSフィードからニュースを集める
まず最も安全な題材として、RSSフィード(公式に「機械可読です」と公開されているフィード)からニュースを集めます。RSSは自動収集を想定して提供されているので、規約面で安心です。
NHKニュースの主要RSSフィード(https://www3.nhk.or.jp/rss/news/cat0.xml)から
最新の記事タイトルとリンクと公開日時を取得し、news.csvに保存するPythonスクリプトを書いて。
ファイル末尾には実行日時のコメントを残して。
ClaudeCodeはfeedparserまたはrequests+XMLパーサーを使ったコードを書きます。
import feedparser
import csv
from datetime import datetime
URL = "https://www3.nhk.or.jp/rss/news/cat0.xml"
feed = feedparser.parse(URL)
with open("news.csv", "w", encoding="utf-8-sig", newline="") as f:
writer = csv.writer(f)
writer.writerow(["タイトル", "リンク", "公開日時"])
for e in feed.entries:
writer.writerow([e.title, e.link, e.published])
print(f"取得完了: {len(feed.entries)}件 / {datetime.now()}")
このように、RSSが提供されているサイトはまずRSSの利用を検討するのが基本です。
実例2:BeautifulSoupで静的なHTMLを解析
RSSがないサイトの場合、HTMLを直接解析します。今回は架空の「example.com」を題材にします。
example.comのトップページにアクセスし、h2タグのテキストを全て取得して
リストとして表示するスクリプトを書いて。
User-Agentに「MyResearchBot (mailto: me@example.com)」を設定し、
リクエスト前後に1秒のスリープを入れて。
import requests
from bs4 import BeautifulSoup
import time
URL = "https://example.com"
HEADERS = {"User-Agent": "MyResearchBot (mailto: me@example.com)"}
time.sleep(1)
res = requests.get(URL, headers=HEADERS, timeout=10)
res.raise_for_status()
time.sleep(1)
soup = BeautifulSoup(res.text, "lxml")
for h2 in soup.find_all("h2"):
print(h2.get_text(strip=True))
User-Agentに連絡先を入れておくのは、サイト管理者が問題を感じたときに連絡できるようにするマナーです。誠実な姿勢を示せます。
実例3:Seleniumで動的サイトを扱う
JavaScriptでデータを後から読み込むサイトは、requestsだけでは中身が取れません。そんなときはSeleniumを使い、実際のブラウザを動かして読み込み完了後のHTMLを取得します。
Seleniumで、特定のニュースサイト(自分が所有しているテストサイト)を開き、
無限スクロールを5回行って、表示された記事タイトルを全て取得するスクリプトを書いて。
ChromeDriverManagerで自動的にドライバを取得する形でお願い。
ヘッドレスモードで実行し、スクロールごとに2秒待機して。
Seleniumはブラウザを操作するので強力ですが、リソースを多く消費します。可能ならrequests+BeautifulSoupで対応し、それでも取れないときだけSeleniumに切り替えるのが賢明です。
実例4:定期実行とデータ蓄積
集めたデータは時系列で蓄積すると価値が上がります。たとえば毎日のニュース見出しを蓄積していけば、トレンド分析ができます。
さきほどのRSS取得スクリプトを、毎朝7時に自動実行する設定にしたい。
取得結果は news_YYYYMMDD.csv のように日付付きで保存し、
1ヶ月分が溜まったらまとめて分析するためにdataフォルダに整理して。
毎日の蓄積は財産です。1年経つと、自分だけの貴重なデータセットになります。
実例5:取得したデータを活かす
データを取るだけでは意味がありません。集めた後の活用例を紹介します。
ひとつめは「キーワード集計」。1ヶ月分のニュース見出しから、頻出語を抽出して時期ごとのトレンドを可視化します。MeCabやjanomeといった形態素解析ライブラリと組み合わせると、日本語のキーワード集計が簡単にできます。
ふたつめは「アラート通知」。特定のキーワード(自社名、競合名、業界キーワード)が含まれる記事を見つけたら、Slackやメールで通知する仕組みです。手作業のニュースチェックがゼロになります。
集めたnews.csvを毎朝チェックし、「業界キーワード」を含む記事タイトルがあれば、
Slackの指定チャンネルに通知するスクリプトを書いて。
Webhook URLは環境変数SLACK_WEBHOOK_URLから読み込んで。
ありがちな失敗とその回避
スクレイピングの初心者がやりがちな失敗を3つ紹介します。
第一に「アクセス過多」。テストでループを回しすぎて、相手サーバーに数百回/秒の負荷をかけてしまうケース。ループ内に必ずtime.sleep(1)以上を入れる癖をつけましょう。
第二に「規約違反」。とりあえず動くからと、規約禁止のサイトを延々とスクレイピングしてしまうケース。事前確認を徹底しましょう。
第三に「セレクタの脆弱性」。「class="article-title"」のような具体すぎるセレクタは、サイトのデザイン変更で簡単に壊れます。複数のセレクタで取得を試みる、定期的にメンテナンスする、という前提で組みましょう。
API優先の原則
スクレイピングは最終手段です。多くのサービスは公式APIを提供しており、APIを使えば安定して合法的にデータが取れます。ニュースなら各社のRSS、SNSなら公式API、企業情報ならEDINETやe-Statなど、まずは「公式の正規ルート」を探すのが鉄則です。
〇〇のデータがほしい。
公式APIや公開データセットがあるかをまず調べて、
あればそちらを使う方法を提案して。なければ規約を確認した上でスクレイピングを検討して。
このひと言を最初にかけるだけで、より安全で持続可能な仕組みが手に入ります。
FAQ:スクレイピングでよくある質問
Q1. スクレイピングは違法ですか。 A. 行為自体は違法ではありませんが、対象サイトの規約や著作権法、不正アクセス禁止法に触れる場合は違法になります。
Q2. robots.txtに従わないとどうなりますか。 A. 法的拘束力は弱いものの、サイト運営者からのクレーム、IPブロック、最悪の場合は法的措置の対象になります。守るのが基本です。
Q3. 個人情報を含むデータを集めたいときは? A. 個人情報保護法の対象になるので、原則として行わないでください。エンジニアと法務の確認が必須です。
Q4. ログインが必要なサイトはどう扱う? A. 規約で許可されている場合のみ、自分のアカウントで手動ログイン後にCookieを使うなど工夫します。許可がなければ行ってはいけません。
Q5. 取得したデータをブログ記事や論文で使ってもいい? A. 引用の範囲(出典明示、必要最小限)であれば著作権法上認められる場合があります。利用前に専門家に確認するのが安全です。
Q6. Pythonでうまくいかないとき、ClaudeCodeにどう聞く? A. エラーメッセージとアクセスしたURL、取得したいデータの種類を一緒に伝えると、的確な解決策が返ってきます。
Q7. クラウドで動かすにはどうしたら? A. AWS Lambda、Google Cloud Functions、当社推奨のCloudflare Workersなどで動かせますが、認証付きの社内システムとして運用するならエンジニアに相談しましょう。
まとめ
ClaudeCodeを使えば、Webスクレイピングのコードは数分で書けます。でも、本当に大事なのは「書く前に確認する」「節度を守る」「公式の方法を優先する」という姿勢です。技術はあくまで道具で、使い方を誤ればトラブルや法的問題になります。本記事のとおり、規約とrobots.txtを確認し、リクエスト間隔を空け、収集の目的を明確にして始めれば、長期的に安全で価値のあるデータ収集の仕組みが手に入ります。AIと一緒に、健全なデータ活用を始めましょう。