ナレッジ

学術研究のためのウェブデータ収集:再現性、倫理審査、スクレイピングデータセットの引用方法 | Shifter

スクレイピングデータは今や研究において一般的になっているが、再現、審査、引用が難しいことが多い。査読や倫理委員会の審査、再利用に耐えるウェブデータを収集する方法とは。

James Meadow

2026年10月6日 · 3 分で読める

Webデータは今や普通の研究材料になっている。社会科学者はプラットフォームの言説を研究し、経済学者はオンライン価格を追跡し、計算機科学者はコーパスを構築し、公衆衛生の研究者は誤情報を追跡する。その多くはスクレイパーによって収集されており、多くが同じ弱点を共有している。チーム外の誰も収集を再現できず、倫理審査はアンケート調査向けに書かれたものであり、データセットは「著者らが収集したデータ」としてしか引用されないか、まったく引用されない。

これは避けられないことではない。いくつかの、ほとんどが低コストな実践によって、スクレイピングされたデータは再現可能、審査可能、引用可能になる。本ガイドでは、査読に耐える収集の設計方法、倫理審査委員会が確認すべき事項、データセットのパッケージ化と引用の方法、そして引用情報とマニフェストファイルを生成する小さなテスト済みスクリプトを取り上げる。

要点

  • Webは変化し、閲覧者によって異なるため、スクレイピングされたデータセットはスクレイパーを再実行しても再現できない。再現可能性とは、何を、いつ、どこから、どのように収集したかを正確に記録し、保存しておくことを意味する。
  • 収集プロトコルは収集前に書き、それへの変更は他の手法と同様に修正として扱うこと。
  • Webデータに関する倫理審査は、データが公開されているかどうかだけでなく、期待、害、識別可能性にかかっている。同意の免除だけでなく、データ管理計画を用意すること。
  • データセットは、ファイルハッシュと収集コンテキストのマニフェスト、ライセンス、CITATION.cffファイルとともにパッケージ化し、永続的識別子が付与される場所に登録すること。
  • データセットは、バージョンと識別子を伴う、論文とは独立した研究成果物として引用すること。

なぜスクレイピングされたデータは再現が難しいのか

同じコードを1年後に再実行しても、同じデータは得られない。ページは変化し、消え、移動する。多くのサイトは国、言語、デバイス、ログイン状態によって異なるコンテンツを表示する。プラットフォームはマークアップとアクセスルールを変更する。そして収集自体も損失を伴う。ブロック、タイムアウト、レート制限は、まさに研究対象となっているものと相関することが多い形で、不均一にレコードを取りこぼす。

そのため、Webデータの再現可能性は、再収集ではなく次の3つにかかっている。

  1. 文書化 誰かが同じ収集を試み、自分の結果がなぜ異なるのかを理解できる程度に、手法を十分詳細に記録すること。
  2. 保存 実際に収集したものを保存すること。理想的には抽出されたデータだけでなく生のレスポンスも含める。
  3. 説明責任 収集されなかったもの、つまり失敗、除外、フィルタリングについて、件数とともに説明すること。

収集を計測機器として設計する

スクレイパーを計測機器として扱い、収集開始前にそのプロトコルを書く。

プロトコル要素記録すべき内容
母集団とサンプリング情報源は何か、どのように選定されたか、スコープに含まれるものと含まれないもの
収集期間UTCでの開始日時と終了日時、繰り返し収集の場合はそのスケジュール
視点(ヴァンテージポイント)収集者が提示した国、ネットワークの種類、言語、デバイスプロファイル。多くのサイトはこれらによって内容が変わる
ツール群コードリポジトリとコミット、ライブラリのバージョン、使用した場合はブラウザのバージョン
アクセスルールrobots.txt、利用規約、レート制限をどう扱ったか、およびリクエストのペース
失敗処理リトライ、何を失敗レコードとみなすか、失敗の記録方法
処理抽出、クレンジング、重複排除、フィルタリングの各ステップと、それぞれの前後の件数

このうち2つは論文からしばしば欠落している。視点が重要なのは、同じURLでも訪問者によって異なるコンテンツが返される場合があるためであり、これは視点標準化の提案で標準として記録すべきだと論じている問題だ。そして失敗件数が重要なのは、8%のレコードが欠落したデータセットは、読者がその8%が何であるかを知って初めて解釈可能になるからだ。

研究が許す範囲では、抽出されたデータだけでなく生のレスポンスも保存しておく。標準のWARC形式で保存することについては、生のレスポンスを保存するで説明している。これにより、パーサーが誤っていたことが判明した際に、あなた自身や後の研究者が実際に収集された時点のデータから再抽出できる。

倫理審査

多くの研究機関の倫理プロセスは参加者からの同意を前提に設計されており、Webデータはそこにうまく当てはまらない。研究者はしばしば公開データには審査は不要だと主張し、委員会はしばしばインタビュー向けに設計された要件で応じる。より良い議論は、実際に重要な問いから始めるべきだ。Internet Researchers協会の倫理ガイドラインは、2019年に第3版として承認され、インターネット研究倫理を、公開か非公開かというラベルではなく、データが共有された文脈と研究のライフサイクル全体にわたる害の可能性を軸に捉えている。

Webデータに関する倫理審査申請が答えるべき問い。

  • 誰のデータであり、その人は何を期待していたか。 企業の価格表、政治家の公的発言、10代の若者のフォーラム投稿は、いずれも「公開」だが、期待される内容はまったく異なる。
  • 人物は直接的に、あるいは組み合わせによって特定できるか。 引用は検索によって著者に遡れる。情報源を集約すると、単一の情報源では特定できなかった人物が特定できることもある。
  • どのような害が誰に及びうるか。 露出、ハラスメント、差別の可能性を考慮する。特に脆弱な集団やセンシティブなトピックではなおさらである。
  • データはどのように最小化され、保護されるか。 何を収集しないか、識別子をどう仮名化するか、誰がアクセスできるか、どこに保存するか、いつ削除するか。
  • 何が公開されるか。 集計値か、言い換えられた引用か、生のレコードか。共有データセットにアクセス制御が必要かどうか。

利用規約と法律は倫理とは別の問題であり、どちらにも答えが必要だ。Fiesler、Beard、Keeganは、2020年のICWSMで発表された研究で、100を超えるソーシャルメディアサイトの利用規約におけるデータ収集条項を調査し、利用規約単独ではどちらの方向にせよ倫理的判断の根拠としては不十分だと論じた。法律面では、研究利用には特有の規定があることが多い。例えばEUの著作権法には研究機関によるテキスト・データマイニングの例外規定があり、データ保護法は公開か否かにかかわらず個人データに適用される。Webスクレイピングは合法かとGDPRとデータ収集に関する当社の概要は出発点であり、あなたのプロジェクトについては所属機関の法務・データ保護担当者が権威となる。

robots.txtはすべてのプロトコルで一文を割く価値がある。法律ではないが、サイトが何を望んでいるかについて最も明確な機械可読の意思表示であり、それを尊重することは容易に正当化できる。robots.txt、AIのオプトアウト、予約シグナルがそれらのシグナルの意味を解説している。

データセットをパッケージ化する

引用・再利用可能なデータセットには、データファイルそのもの以上のものが必要だ。

  • マニフェスト すべてのファイルをサイズと暗号学的ハッシュとともに列挙し、プロトコルから得られた収集コンテキストを加えたもの。ハッシュにより、誰でも論文で使われたファイルそのものを持っているかを確認できる。
  • README フィールド、手法、既知のギャップ、データを責任を持って使用する方法を記述したもの。
  • ライセンス 共有を許可されているものと、共有できなかったものとその理由を明確に述べたもの。
  • CITATION.cffファイル GitHub、Zenodo、参照管理ソフトが読み取るプレーンテキストのCitation File Formatで、誰もがワンクリックでデータセットを正しく引用できるようにする。

以下の関数は、データファイルのフォルダと収集内容の記述から、マニフェストとCITATION.cffを書き出す。

import hashlib
import json
from datetime import date
from pathlib import Path


def sha256(path):
    digest = hashlib.sha256()
    with open(path, "rb") as f:
        for block in iter(lambda: f.read(1 << 20), b""):
            digest.update(block)
    return digest.hexdigest()


def write_dataset_package(folder, title, authors, collection, version="1.0.0"):
    """Write a manifest (what was collected, how, and file hashes) and a CITATION.cff for a scraped dataset."""
    folder = Path(folder)
    files = sorted(p for p in folder.rglob("*") if p.is_file() and p.name not in ("MANIFEST.json", "CITATION.cff"))
    manifest = {
        "title": title,
        "version": version,
        "collection": collection,  # sources, window, vantage point, tool and code version, robots policy
        "files": [{"path": str(p.relative_to(folder)), "bytes": p.stat().st_size, "sha256": sha256(p)} for p in files],
    }
    (folder / "MANIFEST.json").write_text(json.dumps(manifest, indent=2) + "\n", encoding="utf-8")

    lines = [
        "cff-version: 1.2.0",
        'message: "If you use this dataset, please cite it as below."',
        "type: dataset",
        f"title: {json.dumps(title)}",
        f"version: {json.dumps(version)}",
        f"date-released: {date.today().isoformat()}",
        "authors:",
    ]
    for person in authors:
        lines.append(f"  - family-names: {json.dumps(person['family'])}")
        lines.append(f"    given-names: {json.dumps(person['given'])}")
        if person.get("orcid"):
            lines.append(f"    orcid: {json.dumps(person['orcid'])}")
    abstract = (f"Collected {collection['window']} from {', '.join(collection['sources'])}. "
                "See MANIFEST.json for method and file hashes.")
    lines.append(f"abstract: {json.dumps(abstract)}")  # JSON strings are valid YAML, so quotes cannot break the file
    (folder / "CITATION.cff").write_text("\n".join(lines) + "\n", encoding="utf-8")
    return manifest

小さなサンプルデータセットで使用した例。

from package import write_dataset_package

manifest = write_dataset_package(
    "dataset",
    title="Robots.txt rules for AI crawlers on the top 10,000 domains",
    authors=[{"family": "Example", "given": "Researcher", "orcid": "https://orcid.org/0000-0002-1825-0097"}],
    collection={
        "sources": ["robots.txt files of the Tranco top 10,000 domains"],
        "window": "on 6 October 2026",
        "vantage_point": "one network in Romania",
        "tool": "survey.py at commit 3f2a9c1",
        "robots_policy": "only robots.txt itself was requested",
    },
)
print(len(manifest["files"]), "files listed")

示したORCIDはORCID自身が公開しているサンプル識別子であり、実際には自分のものを使用すること。生成されたファイルは、この形式のリファレンスツールであるcffconvertで検証し、「Citation metadata are valid according to schema version 1.2.0」と報告されたことを確認した。また、タイトルや名前に引用符やアポストロフィが含まれる場合でも有効なままであることを確認した。これは素朴なテンプレートが壊れがちな箇所だ。このツールによる例のAPAスタイルの出力は次の通りである。「Example R. (2026). Robots.txt rules for AI crawlers on the top 10,000 domains (version 1.0.0).」

登録して引用する

ラボのフォルダや個人のGitHubリポジトリにあるデータセットは消えてしまうことがある。永続的識別子を発行するリポジトリに登録すること。

  • 一般的なリポジトリ CERNが運営するZenodoなどは、アップロードごとにDOIを無償で発行し、1レコードあたり標準で50 GBの上限がある。
  • 機関リポジトリや分野別リポジトリ 助成機関から求められる場合や、自分の分野でより発見されやすい場合がある。
  • アクセス制限 データを完全に公開できない場合の選択肢。マニフェストと文書は公開し、データ自体はアクセス制御下に置く。

2016年にScientific Dataで発表されたFAIR原則は、登録が達成すべきことを要約している。データは人間にとっても機械にとっても、発見可能、アクセス可能、相互運用可能、再利用可能であるべきだということだ。

そのうえで、データセットを論文中で独立した参照文献として引用する。著者、年、タイトル、バージョン、リポジトリ、識別子を含め、手法セクションの一文としてだけ扱わない。分析に用いた正確なバージョンを引用し、データが変更された際には新しい識別子とともに新しいバージョンを公開する。

チェックリスト

  • サンプリング、期間、視点、ツール、アクセスルール、失敗処理を含む、収集前に書かれたプロトコル。
  • 期待、識別可能性、害、最小化、公開を網羅する倫理審査申請。
  • 研究が許す範囲での生のレスポンスの保存、およびすべての処理ステップの件数記録。
  • ファイルハッシュと収集コンテキストを含むマニフェスト、README、ライセンス、CITATION.cff。
  • 永続的識別子を伴う登録、および論文中でのバージョン付きデータセット引用。

同じ規律はアカデミアの外でも適用される。大規模な学習データセットの構築は機械学習コーパスについてそれを取り上げている。

結論

スクレイピングされたデータは厳密な研究材料になりうるが、それは然るべく扱われた場合に限られる。書かれたプロトコルに従って収集され、公開か否かのラベルではなくその文脈の倫理に基づいて審査され、何が観察されたかを説明できるだけの詳細さで保存され、引用可能でバージョン管理された成果物として公開された場合に限られる。

そのほとんどは文書化とパッケージ化であり、最初に一度、最後に一度行えばよい。それが、1本の論文だけを支えるデータセットと、ひとつの分野全体を支えるデータセットとの違いになる。

出典および参考文献

  • Association of Internet Researchers, Internet Research: Ethical Guidelines 3.0, 2019.
  • Wilkinson et al., The FAIR Guiding Principles for scientific data management and stewardship, Scientific Data, 2016.
  • Fiesler, Beard and Keegan, No Robots, Spiders, or Scrapers: Legal and Ethical Regulation of Data Collection Methods in Social Media Terms of Service, ICWSM 2020.
  • Citation File Format, version 1.2.0, and the cffconvert validator.
  • Zenodo, operated by CERN.
  • Code tested by Shifter on 6 October 2026.

始める準備はできていますか?

Shifterのレジデンシャルプロキシをお試しください。IP 205M+件、195+カ国、$0.10/GBから。

始める