
「副業や社内でスクレイピングを使いたい。でも、どこまでOKで、何をするとNG?」
結論、“安全運用の型”を最初に決めると迷いません。鍵は規約 → 同意 → 頻度 → 記録。
この記事で身につくこと
-
燃えないスクレイピング設計:利用規約・robots.txt・同意・頻度・記録の「型」を先に決める
-
現場で使えるテンプレ:運営者への問い合わせ文/合意条項ドラフト
-
安全運用のコード雛形:robots尊重・レート制御・差分取得・変更検知
関連記事:
>>【保存版】Python副業の始め方:月3〜10万円を目指す現実的ステップ
>>見積り・契約・著作権:トラブルを避ける基本知識|“スコープ×検収×知財”を先に決める
>>初案件はこの一通で決まる|返信率を上げる提案文テンプレ45選【コピペ可/検収基準・見積り付き】
>>データ可視化レポート納品の型:Tableau/Matplotlib|“図3点+結論1行+運用”で伝わる・続く・刺さる
>>クラウドソーシング攻略:失注しないポートフォリオ——“検索性×再現性×成果指標”の三種の神器
結論:最初に「規約 → 同意 → 頻度 → 記録」を決める
安全に回っている案件は、例外なく次の順番が守られています。
- 規約とrobots.txtを確認(禁止事項・許容範囲・APIの有無)
- 必要な同意を取得(目的・頻度・取得項目・方法を明示)
- 取得頻度・アクセス制御を設計(UA/From、待機、同時接続、バックオフ)
- ログ・監査を残す(URL・日時・件数・エラー・問い合わせ履歴)
ふみとの現場メモ
過去案件で、公式API優先+差分取得+同時接続1〜2にしただけで、ブロックが0件になり、法務への説明もスムーズになりました。“速く大量に取る”より“継続して安全に取る”が結局は近道です。
スクレイピングの主なリスクと目安
規約違反・著作権/データベース権・個人情報/プライバシーの3領域が要注意です。以下は実務上の目安。
- 合法に寄せる例:
- 公式API/CSVがある場合はAPI優先
- robots.txtが許可、規約に明示禁止なし
- 低頻度アクセス、目的内利用、個人情報(PII)を扱わない
- グレー:
- 規約が不明確/robots未整備
- テキストや画像を広範に複製
- ログイン後ページだが同意が不十分
- アウト寄り:
- 規約でスクレイピングを明確に禁止
- CAPTCHA等の回避、アクセス遮断の無視
- 個人情報の無断取得/配布
- 有料/会員限定コンテンツの無断ダウンロード・再配布
安全運用チェックリスト(最小限でOK)
- 取得前
- 利用規約、
robots.txt、著作権/データベース権の確認 - 公式APIの有無の確認
- 個人情報の扱い有無を判断(PIIは原則除外)。必要なら運営者の同意を取得
- 利用規約、
- 取得設計
User-AgentとFrom(連絡先)を明示- 同時接続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_fetchがFalseならアクセスしない
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分プラン)
規約とrobots.txtを読み、可否メモを作成。- 上の問い合わせテンプレへ目的/頻度/連絡先を記入して送付。
- UA/レート制御/差分取得の雛形で検証(PIIは扱わない)。
- README/compliance.mdを雛形で作成し、監査ログを残す。
伴走レビュー:安全運用×再現性を同時に強化
スクレイピングは法務×技術の両輪。レビューが具体的なスクールなら、SOW/合意→安全実装→監査まで揃います。
まずは無料カウンセリング/体験で、レビュー基準と初動速度を数値で確認しましょう。
TechAcademy データサイエンスコース(受講料:174,600円~ ※更に割引あり)

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

次に読むべき記事
-
-
見積り・契約・著作権:トラブルを避ける基本知識|“スコープ×検収×知財”を先に決める
※本記事は一般的な情報提供であり、法律相談ではありません。個別の案件は専門家へご相談ください。 副業やフリーランスのPython案件、なぜ揉めてしまうの? 結論:揉める原因は ①要件の曖昧さ ②検収基 ...
-
-
初案件はこの一通で決まる|返信率を上げる提案文テンプレ45選【コピペ可/検収基準・見積り付き】
初案件の提案、何を書けば“選ばれる”の? 長文は読まれないし、自己PRだけだと響かない…今すぐ使える“型”が欲しい! 提案は自己紹介ではなく、「相手のKPIを上げる約束」です。 本記事では、現場で磨い ...
-
-
データ可視化レポート納品の型:Tableau/Matplotlib|“図3点+結論1行+運用”で伝わる・続く・刺さる
結論:レポートは「データ→図」ではなく「意思決定→図」の順で設計します。最短で伝わり、運用で“使い続けられる”型は次の4点です。 迷ったら「結論→推移→分解→構成→打ち手→運用」。これで会議は10分で ...
-
-
クラウドソーシング攻略:失注しないポートフォリオ——“検索性×再現性×成果指標”の三種の神器
提案は送っているのに、なかなか返信が来ない…? その原因は「スキル不足」ではなく見せ方の再現性にあります。クライアントは一覧を5秒で判断します。そこで以下の3点が一目で伝われば、返信・受注は伸びます。 ...
-
-
Python副業の案件種類と相場:自動化/可視化/スクレイピング|“納品の型×見積根拠×契約リスク”をひとまとめ
結論:副業で月3〜10万円を安定して作る最短ルートは、案件種類を絞り、納品の型で効率化し、見積の根拠を言語化することの3点でエス。 本記事では、Python副業の主要7カテゴリ(Excel/CSV自動 ...
最近のコメント