東進の過去問サイトのPDF一括ダウンロードについて、いくつかの解決策をご提案します。
1. Pythonスクリプトでの自動化
最も確実な方法として、Pythonスクリプトを作成することをお勧めします:
import requests
from bs4 import BeautifulSoup
import os
import time
from urllib.parse import urljoin, urlparse
def download_pdfs_from_site(base_url, download_dir="pdfs"):
"""指定されたサイトからPDFファイルを一括ダウンロード"""
# ダウンロードディレクトリを作成
os.makedirs(download_dir, exist_ok=True)
# セッションを作成(Cookieを保持)
session = requests.Session()
session.headers.update({
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
})
# 大学別のURLパターンを定義
universities = {
'東京大学': 'tokyo',
'京都大学': 'kyoto',
'大阪大学': 'osaka',
'東京工業大学': 'tokyo-tech',
'東北大学': 'tohoku',
'名古屋大学': 'nagoya'
}
for uni_name, uni_code in universities.items():
print(f"{uni_name}の過去問をダウンロード中...")
# 各大学のページをクロール
uni_url = f"{base_url}/{uni_code}"
try:
response = session.get(uni_url)
soup = BeautifulSoup(response.content, 'html.parser')
# PDFリンクを検索
pdf_links = soup.find_all('a', href=lambda x: x and x.endswith('.pdf'))
for link in pdf_links:
pdf_url = urljoin(base_url, link['href'])
filename = os.path.basename(urlparse(pdf_url).path)
# ファイル名に大学名を追加
filename = f"{uni_name}_{filename}"
# PDFをダウンロード
try:
pdf_response = session.get(pdf_url)
with open(os.path.join(download_dir, filename), 'wb') as f:
f.write(pdf_response.content)
print(f" ダウンロード完了: {filename}")
# サーバーに負荷をかけないよう少し待機
time.sleep(1)
except Exception as e:
print(f" ダウンロードエラー: {filename} - {e}")
except Exception as e:
print(f"{uni_name}のページ取得エラー: {e}")
# 使用例
if __name__ == "__main__":
base_url = "https://www.toshin-kakomon.com"
download_pdfs_from_site(base_url)
2. ブラウザ拡張機能の利用
DownThemAllやChrono Download Managerなどのブラウザ拡張機能を使用:
- Chrome/Edgeで「DownThemAll」をインストール
- 東進のサイトにアクセス
- 拡張機能で「PDFのみ」をフィルタリング
- 一括ダウンロードを実行
3. 専用ツールの使用
HTTrack Website Copierやwgetを使用:
# wgetを使用した例
wget -r -l1 -H -t1 -nd -N -np -A.pdf -erobots=off https://www.toshin-kakomon.com/
4. 注意事項
-
利用規約の確認: 東進の利用規約で一括ダウンロードが禁止されていないか確認してください
-
サーバー負荷: 短時間に大量のリクエストを送るとサーバーに負荷をかけるため、適度な間隔を空けてください
-
著作権: ダウンロードしたPDFの使用は個人の学習目的に限定してください
5. 代替案
もし技術的な解決が困難な場合は:
-
東進に直接問い合わせ: データ移行について相談してみる
-
スクリーンショット保存: 重要な部分をスクリーンショットで保存
-
手動ダウンロード: 時間はかかりますが、確実な方法
Pythonスクリプトが最も柔軟で確実な方法だと思います。何かご不明な点があれば、お気軽にお聞きください!