Python基礎 副業で稼ぐ

Webスクレイピングの法的リスクと安全運用|“規約→同意→頻度→記録”でトラブルを回避する実務ガイド

「副業や社内でスクレイピングを使いたい。でも、どこまでOKで、何をするとNG?」

結論、“安全運用の型”を最初に決めると迷いません。鍵は規約 → 同意 → 頻度 → 記録

この記事で身につくこと

  • 燃えないスクレイピング設計:利用規約・robots.txt・同意・頻度・記録の「型」を先に決める

  • 現場で使えるテンプレ:運営者への問い合わせ文/合意条項ドラフト

  • 安全運用のコード雛形:robots尊重・レート制御・差分取得・変更検知

関連記事:
>>【保存版】Python副業の始め方:月3〜10万円を目指す現実的ステップ
>>見積り・契約・著作権:トラブルを避ける基本知識|“スコープ×検収×知財”を先に決める
>>初案件はこの一通で決まる|返信率を上げる提案文テンプレ45選【コピペ可/検収基準・見積り付き】
>>データ可視化レポート納品の型:Tableau/Matplotlib|“図3点+結論1行+運用”で伝わる・続く・刺さる
>>クラウドソーシング攻略:失注しないポートフォリオ——“検索性×再現性×成果指標”の三種の神器

結論:最初に「規約 → 同意 → 頻度 → 記録」を決める

安全に回っている案件は、例外なく次の順番が守られています。

  1. 規約とrobots.txtを確認(禁止事項・許容範囲・APIの有無)
  2. 必要な同意を取得(目的・頻度・取得項目・方法を明示)
  3. 取得頻度・アクセス制御を設計(UA/From、待機、同時接続、バックオフ)
  4. ログ・監査を残す(URL・日時・件数・エラー・問い合わせ履歴)

ふみとの現場メモ

過去案件で、公式API優先+差分取得+同時接続1〜2にしただけで、ブロックが0件になり、法務への説明もスムーズになりました。“速く大量に取る”より“継続して安全に取る”が結局は近道です。

スクレイピングの主なリスクと目安

規約違反・著作権/データベース権・個人情報/プライバシーの3領域が要注意です。以下は実務上の目安。

  • 合法に寄せる例
    • 公式API/CSVがある場合はAPI優先
    • robots.txtが許可、規約に明示禁止なし
    • 低頻度アクセス、目的内利用個人情報(PII)を扱わない
  • グレー
    • 規約が不明確/robots未整備
    • テキストや画像を広範に複製
    • ログイン後ページだが同意が不十分
  • アウト寄り
    • 規約でスクレイピングを明確に禁止
    • CAPTCHA等の回避、アクセス遮断の無視
    • 個人情報の無断取得/配布
    • 有料/会員限定コンテンツの無断ダウンロード・再配布

安全運用チェックリスト(最小限でOK)

  • 取得前
    • 利用規約、robots.txt、著作権/データベース権の確認
    • 公式APIの有無の確認
    • 個人情報の扱い有無を判断(PIIは原則除外)。必要なら運営者の同意を取得
  • 取得設計
    • User-AgentFrom(連絡先)を明示
    • 同時接続1–2待機1–5秒+指数バックオフ
    • 差分取得(If-None-Match/ETag 等)
    • 429/403が出たら即停止
    • ログ保存(URL・件数・レスポンスコード・失敗理由)
  • 利用/配布
    • 目的限定で利用し、第三者提供の可否を管理
    • 公開は要約+元ページへのリンクを基本に
    • 削除請求への対応フローを用意

運営者への問い合わせテンプレ(同意取得)

件名:データ利用のご相談(サイト名)
◯◯運営ご担当者さま
貴サイトの◯◯ページに掲載の【価格/在庫/日付 等の事実データ】を、社内分析(目的:◯◯の月次推移把握)の範囲で、
1) 頻度:1日1回/深夜帯回避/同時接続1
2) 取得項目:商品名・価格・日付(テキスト/画像の複製なし)
3) 取得方法:公式APIがあればAPI優先、なければHTTP GETのみ
4) 利用範囲:社内集計のみ、第三者提供なし
で取得したく、ご懸念があれば方針に従います。可能であればAPIのご案内、または上記の形での許諾可否をご教示ください。
署名:氏名/所属/連絡先/Fromヘッダのドメイン

安全運用のコード雛形(コピペ可)

以下は最低限のモラル&技術的配慮を組み込んだ雛形です。
Selenium等の自動操作は規約NGなことが多く、対ボット防御の回避は不可です。
必要最小限+明示同意を徹底しましょう。

1) robots.txtを尊重する

何をしている?:サイトがどのパスをクロールして良いか/ダメかを示すrobots.txtを読み、自分のUser-Agentでアクセス可能かを事前に判定します。NGなら即終了します。

import urllib.robotparser as rp
from urllib.parse import urljoin


BASE = "https://example.com/"
ROBOTS = urljoin(BASE, "/robots.txt")
ua = "pythonbunseki-bot/1.0 (+contact@example.com)"


r = rp.RobotFileParser()
r.set_url(ROBOTS)
r.read()
can_fetch = r.can_fetch(ua, urljoin(BASE, "/list"))
if not can_fetch:
raise SystemExit("Blocked by robots.txt")

ポイント

  • ua自分を名乗るための文字列。問い合わせ可能な連絡先を入れると好印象
  • can_fetchFalseならアクセスしない

2) レート制御+リトライ(429/503)

何をしている?:短時間に叩きすぎないように待機を入れ、一時的なエラー(429/503など)は一定回数だけ自動リトライします。
403/429が来たら即停止して敬意を表します。

import time, random, requests
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry


s = requests.Session()
s.headers.update({
"User-Agent": ua,
"From": "contact@example.com"
})


retry = Retry(
total=3,
status_forcelist=[429, 500, 502, 503, 504],
backoff_factor=1.5,
)
s.mount("https://", HTTPAdapter(max_retries=retry))


for page in range(1, 6):
url = f"{BASE}list?page={page}"
res = s.get(url, timeout=20)


if res.status_code in (403, 429):
raise SystemExit("Respect block & stop")


# TODO: parse res.text ...


# ランダム待機で負荷を分散
time.sleep(1 + random.random()*2)

ポイント

  • Retry指数バックオフを自動化
  • Fromヘッダに連絡先を入れる(問い合わせを受ける前提)
  • 同時接続は1–2、キュー処理で順送り

3) 差分取得(ETag / If-None-Match / Last-Modified)

何をしている?:前回取得と内容が変わっていないならダウンロードしない。通信量が減り、先方にもやさしい設計です。

etag_cache = {}


# 初回は空文字で送る→変更なしなら304が返る
res = s.get(url, headers={"If-None-Match": etag_cache.get(url, "")})
if res.status_code == 304:
pass # 変更なし
else:
if et := res.headers.get("ETag"):
etag_cache[url] = et
# TODO: 新しい内容を保存

ポイント

  • 304 Not Modifiedなら未更新の合図
  • ETagが無いサイトではIf-Modified-Sinceも検討

4) 変更検知(ハッシュで軽量比較)

何をしている?:ページ全体のハッシュ値を比べ、前回と異なるときだけ保存します。

import hashlib


prev = load_last_hash(url) # 自作関数:最後に記録したハッシュを読み出す
cur = hashlib.sha256(res.content).hexdigest()
if prev != cur:
save_content(res.content) # 自作関数:ファイル保存など
save_last_hash(url, cur)

注意:Selenium等の自動操作は規約で禁止のことが多く、対ボット防御の回避はNGです。必要最小限+明示同意を徹底しましょう。

契約・合意に入れるべき文言(ドラフト)

- 取得対象:事実データ(価格/日付 等)に限定。テキスト/画像は収集しない。
- 技術制御:User-Agent/From明示、同時接続≤2、待機1–5s、差分取得、429/403で停止。
- 利用範囲:社内分析のみ、第三者提供なし(必要時は匿名化/集計のみ)。
- 記録:URL/日時/件数/失敗/問い合わせログを90日保存。
- 変更:規約改定/ブロック時は即停止し、運営者の指示に従う。

納品の型(受託/社内で共通化)

project_root/
  README.md         # 目的/範囲/頻度/法的配慮/連絡先
  compliance.md     # 規約/robots/問い合わせ履歴
  crawler/
    fetch.py        # UA/レート制御/差分取得
    parse.py        # 最小限項目のみ抽出
  data/             # 保存(PII禁止・保存期間明記)
  logs/             # 監査ログ
  tests/            # 最小pytest(URL数/差分検知)

よくあるNG → 安全化の例

  • NG:画像・文章を丸ごとDL → 安全化:要約+リンク、必要最小限の事実データのみ。
  • NG:ログイン後の情報を取得 → 安全化:同意/契約を取り、API優先へ
  • NG:CAPTCHA突破やヘッドレス検知回避 → 安全化:即停止し、提供可能な方法に変更

監査・運用(KPIと週次レポート)

  • KPI例:成功率≥99%、ブロック0件、問い合わせSLA遵守。
  • 週次レポート:取得件数/変更率/失敗率/429・403件数。
  • 削除請求対応:受領→48h以内に該当データ削除と記録。

トラブル事例と回避策

  • 規約変更で突然ブロック:監視で検知→即停止→運営へ連絡→API/提携へ移行。
  • 二次利用でクレーム:SOWに目的限定/第三者提供範囲を明記。外部共有は匿名化/集計のみに。
  • 個人情報を誤取得:保存前にPIIフィルタ、検出時は破棄+原因対応+報告。

今日動く(60分プラン)

  1. 規約robots.txtを読み、可否メモを作成。
  2. 上の問い合わせテンプレへ目的/頻度/連絡先を記入して送付。
  3. UA/レート制御/差分取得の雛形で検証(PIIは扱わない)。
  4. README/compliance.mdを雛形で作成し、監査ログを残す。

伴走レビュー:安全運用×再現性を同時に強化

スクレイピングは法務×技術の両輪。レビューが具体的なスクールなら、SOW/合意→安全実装→監査まで揃います。
まずは無料カウンセリング/体験で、レビュー基準と初動速度を数値で確認しましょう。

TechAcademy データサイエンスコース(受講料:174,600円~ ※更に割引あり)

TechAcademy 無料相談

株式会社キカガク AI人材長期育成コース(受講料:237,600円~)

キカガク 無料相談

次に読むべき記事

契約
見積り・契約・著作権:トラブルを避ける基本知識|“スコープ×検収×知財”を先に決める

※本記事は一般的な情報提供であり、法律相談ではありません。個別の案件は専門家へご相談ください。 副業やフリーランスのPython案件、なぜ揉めてしまうの? 結論:揉める原因は ①要件の曖昧さ ②検収基 ...

初案件
初案件はこの一通で決まる|返信率を上げる提案文テンプレ45選【コピペ可/検収基準・見積り付き】

初案件の提案、何を書けば“選ばれる”の? 長文は読まれないし、自己PRだけだと響かない…今すぐ使える“型”が欲しい! 提案は自己紹介ではなく、「相手のKPIを上げる約束」です。 本記事では、現場で磨い ...

納品の型
データ可視化レポート納品の型:Tableau/Matplotlib|“図3点+結論1行+運用”で伝わる・続く・刺さる

結論:レポートは「データ→図」ではなく「意思決定→図」の順で設計します。最短で伝わり、運用で“使い続けられる”型は次の4点です。 迷ったら「結論→推移→分解→構成→打ち手→運用」。これで会議は10分で ...

クラウドソーシング
クラウドソーシング攻略:失注しないポートフォリオ——“検索性×再現性×成果指標”の三種の神器

提案は送っているのに、なかなか返信が来ない…? その原因は「スキル不足」ではなく見せ方の再現性にあります。クライアントは一覧を5秒で判断します。そこで以下の3点が一目で伝われば、返信・受注は伸びます。 ...

副業
Python副業の案件種類と相場:自動化/可視化/スクレイピング|“納品の型×見積根拠×契約リスク”をひとまとめ

結論:副業で月3〜10万円を安定して作る最短ルートは、案件種類を絞り、納品の型で効率化し、見積の根拠を言語化することの3点でエス。 本記事では、Python副業の主要7カテゴリ(Excel/CSV自動 ...

最近のコメント

    • この記事を書いた人
    • 最新記事

    ふみと

    このブログでは、データサイエンティストとして市場価値を上げる方法を独自にまとめて発信しています。

    【プロフィール】
    ・大手企業データサイエンティスト/マーケティングサイエンティスト(10年、年収900万円台)/案件100件以上
    ・資格:JDLA E資格(日本ディープラーニング協会主催)/JDLA Community(CDLE会員)/Advanced Marketer/ビジネス統計スペシャリスト/統計検定2級/TOEIC 805
    ・スキル:Python/Tableau/SQL/機械学習/Deep Learning/RPA

    -Python基礎, 副業で稼ぐ