wgetを使用して単一ページにリンクされているすべてのPDFファイルをダウンロードする方法

wgetを使用して単一ページにリンクされているすべてのPDFファイルをダウンロードする方法

このWebページにリンクされているすべてのPDFファイルをダウンロードする必要があります。https://www.in.tum.de/i07/lehre/ss22/theo/

これまでに試みたすべてのタスクからファイルを取得できなかったかダウンロードできませんでした。みんな再帰的にウェブサイトにアクセスしてください。

しかし、私はこのページ(ウェブサイトではない)に直接リンクされているPDFにのみ興味があります。

ありがとうございます。

答え1

wget()および()オプションを使用して、--no-parentこのオプションでミラーリングされるサイトの量を制御できます。 ()および()オプションは、wgetがリモートディレクトリ構造をコピーするのを防ぎます。 -np--level=depth-l-r--no-host-directories-nH--no-directories-nd(オプションが完全な形式で書かれている場合は二重ハイフンがオプションの前にあり、オプションが省略形で書かれている場合は単一のハイフンがオプションの前にあります。--no-parent is -np)

たとえば、次のようになります。

wget -r -l 1 -nH -nd -np --ignore-case -A '*.pdf' https://www.in.tum.de/i07/lehre/ss22/theo/

デフォルトでは、現在のディレクトリに.pdfファイルが保存されます。この-Pオプションを使用して、別の出力ディレクトリを指定できます。

wget非常に柔軟でオプションがたくさんあります。マンページが多すぎて初めて読むときにマンページが負担になることがありますが、読んで試してみる価値があることは明らかです。

答え2

wgetこれを使用またはcurlダウンロードして、WebページからPDFファイルのリストを抽出し、xmlstarlet結果のHTML / XMLを解析できます。

curl https://www.in.tum.de/i07/lehre/ss22/theo/ |
    xmlstarlet format -H index.html 2>/dev/null |
    xmlstarlet select -t -m '//a[contains(@href,"pdf")]' -v '@href' -n

最初はxmlstarletHTMLをXMLに変換します。 2番目はすべてのa要素を見つけ、href含まれているすべての属性値を抽出しますpdf

そこから抽出された各リンクを直接ダウンロードできます。前のブロックの出力をループにパイプします。

while IFS= read -r url
do
    file="${url%\?*}"                            # Strip trailing ? parameters
    file="${file##*/}"                           # Strip leading URL path
    printf "Saving %s as %s\n" "$url" "$file"    # Report action
    curl "$url" >"$file"
done

答え3

より広くは、wgetを使用してWebページからすべてのPDFをダウンロードできます。

wget -r -l1 -H -t1 -nd -N -np -A.pdf -erobots=off --wait=2 --random-wait --limit-rate=20k [URL]
  • -r:再帰的ダウンロード。
  • -l1:1レベルの深さのみ(つまり、このページから直接リンクされたファイルのみ)
  • -H:クロスホスト(他のホストへのリンクをたどります)。
  • -t1: 再試行回数は 1 です。
  • -nd:ディレクトリ構造を作成せずに、すべてのファイルを現在のディレクトリにダウンロードするだけです。
  • -N:タイムスタンプをオンにします。
  • -np:親ディレクトリへのリンクに従わない。
  • -A.pdf:.pdfで終わるファイルのみが許可されます。
  • -erobots=off: robots.txt ファイルを無視します (注意して使用し、サイトの利用規約を尊重します)。
  • --wait=2: 検索するたびに 2 秒間待ちます。
  • --random-wait: 0.5~1.5* の待機 --wait 検索間隔(秒)です。
  • --limit-rate=20k: ダウンロード速度を毎秒20KBに制限します。

このパラメーターは、「429:要求が多すぎます」エラーを防止します。

関連情報