信オン名鑑のWayback Machineのスクレイピングのサンプルコード

読み物
読み物

信オン名鑑が公開できたのも、公式ページのワールドステータスの恩恵です。公式ページに感謝🤗台湾サーバは功名帳戦功者が掲載される箇所がないかも?と教えて頂きました。日本サーバで遊んでいて良かったなと思ってました m(_ _)m

以下はスクレイピング用のサンプルコードです。
取得対象のページにURL漏れ等がありましたら教えて頂けると幸いです。

#!/bin/bash

# 取得対象のページを配列に格納(順番を変更)
URLS=(
 "http://www.gamecity.ne.jp/nol/world/gunyuden/prev_status03.htm"
 "http://www.gamecity.ne.jp/nol/world/fuunroku/prev_status03.htm"
 "http://www.gamecity.ne.jp/nol/world/haoden/prev_status03.htm"
 "http://www.gamecity.ne.jp/nol/world/tenshoki/prev_status03.htm"
 "http://www.gamecity.ne.jp/nol/world/shoseiroku/prev_status03.htm"
 "http://www.gamecity.ne.jp/nol/world/repuden/prev_status03.htm"
 "http://www.gamecity.ne.jp/nol/world/gunyuden/1.htm"
 "http://www.gamecity.ne.jp/nol/world/fuunroku/1.htm"
 "http://www.gamecity.ne.jp/nol/world/haoden/1.htm"
 "http://www.gamecity.ne.jp/nol/world/tenshoki/1.htm"
 "http://www.gamecity.ne.jp/nol/world/shoseiroku/1.htm"
 "http://www.gamecity.ne.jp/nol/world/repuden/1.htm"
 "http://www.gamecity.ne.jp/nol/world/repuden/1.htm"
 "http://www.gamecity.ne.jp/nol/world/gunyuden/2.htm"
 "http://www.gamecity.ne.jp/nol/world/fuunroku/2.htm"
 "http://www.gamecity.ne.jp/nol/world/haoden/2.htm"
 "http://www.gamecity.ne.jp/nol/world/tenshoki/2.htm"
 "http://www.gamecity.ne.jp/nol/world/shoseiroku/2.htm"
 "http://www.gamecity.ne.jp/nol/world/repuden/2.htm"
 "http://www.gamecity.ne.jp/nol/world/repuden/2.htm"
 "http://www.gamecity.ne.jp/nol/world/gunyuden/3.htm"
 "http://www.gamecity.ne.jp/nol/world/fuunroku/3.htm"
 "http://www.gamecity.ne.jp/nol/world/haoden/3.htm"
 "http://www.gamecity.ne.jp/nol/world/tenshoki/3.htm"
 "http://www.gamecity.ne.jp/nol/world/shoseiroku/3.htm"
 "http://www.gamecity.ne.jp/nol/world/repuden/3.htm"
 "http://www.gamecity.ne.jp/nol/world/repuden/3.htm"
 "http://www.gamecity.ne.jp/nol/world/gunyuden/4.htm"
 "http://www.gamecity.ne.jp/nol/world/fuunroku/4.htm"
 "http://www.gamecity.ne.jp/nol/world/haoden/4.htm"
 "http://www.gamecity.ne.jp/nol/world/tenshoki/4.htm"
 "http://www.gamecity.ne.jp/nol/world/shoseiroku/4.htm"
 "http://www.gamecity.ne.jp/nol/world/repuden/4.htm"
 "http://www.gamecity.ne.jp/nol/world/repuden/4.htm"
 "http://www.gamecity.ne.jp/nol/world/gunyuden/5.htm"
 "http://www.gamecity.ne.jp/nol/world/fuunroku/5.htm"
 "http://www.gamecity.ne.jp/nol/world/haoden/5.htm"
 "http://www.gamecity.ne.jp/nol/world/tenshoki/5.htm"
 "http://www.gamecity.ne.jp/nol/world/shoseiroku/5.htm"
 "http://www.gamecity.ne.jp/nol/world/repuden/5.htm"
 "http://www.gamecity.ne.jp/nol/world/repuden/5.htm"
 "http://www.gamecity.ne.jp/nol/world/gunyuden/r01.htm"
 "http://www.gamecity.ne.jp/nol/world/gunyuden/r02.htm"
 "http://www.gamecity.ne.jp/nol/world/gunyuden/r03.htm"
 "http://www.gamecity.ne.jp/nol/world/gunyuden/r04.htm"
 "http://www.gamecity.ne.jp/nol/world/fuunroku/r01.htm"
 "http://www.gamecity.ne.jp/nol/world/fuunroku/r02.htm"
 "http://www.gamecity.ne.jp/nol/world/fuunroku/r03.htm"
 "http://www.gamecity.ne.jp/nol/world/fuunroku/r04.htm"
 "http://www.gamecity.ne.jp/nol/world/haoden/r01.htm"
 "http://www.gamecity.ne.jp/nol/world/haoden/r02.htm"
 "http://www.gamecity.ne.jp/nol/world/haoden/r03.htm"
 "http://www.gamecity.ne.jp/nol/world/haoden/r04.htm"
 "http://www.gamecity.ne.jp/nol/world/tenshoki/r01.htm"
 "http://www.gamecity.ne.jp/nol/world/tenshoki/r02.htm"
 "http://www.gamecity.ne.jp/nol/world/tenshoki/r03.htm"
 "http://www.gamecity.ne.jp/nol/world/tenshoki/r04.htm"
 "http://www.gamecity.ne.jp/nol/world/touzai/r01.htm"
 "http://www.gamecity.ne.jp/nol/world/touzai/r02.htm"
 "http://www.gamecity.ne.jp/nol/world/touzai/r03.htm"
 "http://www.gamecity.ne.jp/nol/world/touzai/r04.htm"
 "http://www.gamecity.ne.jp/nol/world/touzai/r05.htm"
 "http://www.gamecity.ne.jp/nol/world/touzai/r06.htm"
 "http://www.gamecity.ne.jp/nol/world/touzai/r07.htm"
 "http://www.gamecity.ne.jp/nol/world/touzai/r08.htm"
 "http://www.gamecity.ne.jp/nol/world/touzai/r09.htm"
 "http://www.gamecity.ne.jp/nol/world/touzai/r10.htm"
 "https://www.gamecity.ne.jp/nol/world/tenkafubu/prev_status03.htm"
 "https://www.gamecity.ne.jp/nol/world/tenkafubu/status03.htm"

)

# 保存ディレクトリのベース
SAVE_ROOT="snapshots"

# 配列内の各ページについて処理
for BASE_URL in "${URLS[@]}"; do
  echo "Processing URL: $BASE_URL"
  
  # Wayback Machine のスナップショット一覧を取得
  ARCHIVES=$(curl -s "http://web.archive.org/cdx/search/cdx?url=${BASE_URL}&output=json" | \
             jq -r '.[1:] | map([.[1], .[2]]) | .[] | @csv')
  
  # 各スナップショットごとにループ
  while IFS=, read -r TIMESTAMP URL; do
    # ダブルクォートを削除
    TIMESTAMP=$(echo "$TIMESTAMP" | tr -d '"')
    URL=$(echo "$URL" | tr -d '"')
    
    # プロトコル部分(http:// または https://)を除去し、ホストとパスのみを抽出
    URL_NO_PROTO=$(echo "$URL" | sed 's|https\?://||')
    # %3A80 または %3a80、さらに :80 を削除
    URL_CLEAN=$(echo "$URL_NO_PROTO" | sed 's/%3[Aa]80//g' | sed 's/:80//g')
    
    # 保存先ディレクトリ(例:snapshots/20130812113029/)
    SAVE_DIR="${SAVE_ROOT}/${TIMESTAMP}/"
    mkdir -p "$SAVE_DIR"
    
    # 保存されるファイルのパスを構築
    FILE_PATH="${SAVE_DIR}${URL_CLEAN}"
    
    # 既にファイルが存在している場合はスキップ
    if [ -f "$FILE_PATH" ]; then
      echo "Skipping snapshot $TIMESTAMP for $BASE_URL: $FILE_PATH already exists."
      continue
    fi
    
    # Wayback Machine のスナップショット URL を生成
    SNAPSHOT_URL="https://web.archive.org/web/${TIMESTAMP}/${URL_CLEAN}"
    echo "Downloading: $SNAPSHOT_URL → $SAVE_DIR"
    
    # wget により対象ファイルのみをダウンロード(再帰なし)
    wget -N -nH -k --convert-links --restrict-file-names=windows \
         -x --cut-dirs=2 \
         -P "$SAVE_DIR" --accept=htm,html "$SNAPSHOT_URL"
  
  done <<< "$ARCHIVES"
  
done
メール通知
Notify of
guest
0 Comments
Inline Feedbacks
View all comments