@DKS3

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

WEBサイトのPDFファイルを一括でダウンロードしたい

WEBサイトのPDFファイルを一括でダウンロードしたい

大学の過去問と解答、解説が載っているサイト
https://www.toshin-kakomon.com/
があるのですが、
11月に新しい過去問データベースに変更されてしまうそうで、
今までの過去問データベースで見れた解説や古い過去問が見れなくなってしまいます。

1月からの受験の直前に結構なダメージです。

一個一個ダウンロードすればダウンロード出来るのですが、凄く時間がかかるので一括でダウンロードしたいと思っています。

自分で試したこと

PDFのリンクが貼られているサイトなら一括でダウンロード出来るツールがあるみたいなのですが、
東進のサイトではうまくいきませんでした。
chatGPTに相談しながら2時間くらい頑張ってみましたが、上手く行きませんでした。

助けていただきたいです。
よろしくお願いします。

特に、東大、京大、阪大、東工大、東北、名古屋の過去問が欲しいと思っています。

0 likes

4Answer

東進の過去問サイトの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. ブラウザ拡張機能の利用

DownThemAllChrono Download Managerなどのブラウザ拡張機能を使用:

  1. Chrome/Edgeで「DownThemAll」をインストール
  2. 東進のサイトにアクセス
  3. 拡張機能で「PDFのみ」をフィルタリング
  4. 一括ダウンロードを実行

3. 専用ツールの使用

HTTrack Website Copierwgetを使用:

# wgetを使用した例
wget -r -l1 -H -t1 -nd -N -np -A.pdf -erobots=off https://www.toshin-kakomon.com/

4. 注意事項

  • 利用規約の確認: 東進の利用規約で一括ダウンロードが禁止されていないか確認してください
  • サーバー負荷: 短時間に大量のリクエストを送るとサーバーに負荷をかけるため、適度な間隔を空けてください
  • 著作権: ダウンロードしたPDFの使用は個人の学習目的に限定してください

5. 代替案

もし技術的な解決が困難な場合は:

  1. 東進に直接問い合わせ: データ移行について相談してみる
  2. スクリーンショット保存: 重要な部分をスクリーンショットで保存
  3. 手動ダウンロード: 時間はかかりますが、確実な方法

Pythonスクリプトが最も柔軟で確実な方法だと思います。何かご不明な点があれば、お気軽にお聞きください!

1Like

This answer has been deleted for violation of our Terms of Service.

サイトを巡回してダウンロードするフリーソフトがあると思います。
基点ページからリンクを辿るネスト数を制限して、ダウンロード対象をPDFに限定することで「一括ダウンロード」相当が実現できると思います。

0Like

Comments

  1. @DKS3

    Questioner

    ありがとうございます。

    検索して出来てきたoctoparseというソフトの使い方を調べながら試しています。

    上手くいかないときまた相談させていただくかも知れません。

東進のサポートには対応策を聞いたと思いますが (もし聞いてなかったらまず聞いてください)、何と言ってました?

0Like

Comments

  1. @DKS3

    Questioner

    東進が行っているのは無料のサービスですので、特にサポートは無いです。

Your answer might help someone💌