ダウンロードを選択する前に、Webサイト/Webページからファイルのリストを取得してください(「ls」と同様の方法)。

ダウンロードを選択する前に、Webサイト/Webページからファイルのリストを取得してください(「ls」と同様の方法)。

複数のPDF文書へのハイパーリンクがあるWebページにあるとします。そのPDFをダウンロードしたいです。これらの文書のリストを(とにかくls)入手してから、またはwgetを使用してダウンロードする文書をよりよく選択する方法はありますかcurl

答え1

lynxまたは、(テキストモードのWebブラウザ)を使用してlinksWebページからリンクリストをダウンロードして表示し、それをパイプしてgrepPDFリンクのみを抽出することもできます。たとえば、

URL='https://www.example.com/files/'
lynx -dump -listonly -nonumbers "$URL" | grep -i '\.pdf$'

"$URL"注:特にURLにスペースまたはシェルメタ文字(URLでよく使用される文字やなど;)が含まれる場合は、二重引用符が重要です。&頭痛を和らげてくださいいつもURLを含むURL文字列と変数を使用するときに引用します。実際には、URLを含めるかどうかにかかわらず、変数を使用するときに二重引用符を使用することはほとんど常に良い考えです。スペースやその他の特殊文字が原因でシェルスクリプトが停止するのはなぜですか?)。

その後、grep出力をファイルにリダイレクトし、テキストエディタで編集して興味のないPDFファイルを削除し、wget-i--input-file=fileオプションを使用してファイルのすべてのURLをダウンロードできます。または、wget一度にすべてを使用するか、手動でダウンロードすることもできますcurl


ところで、wgetサイトミラーリングのための()オプションも-mあり、ダウンロードされるコンテンツを正確に制御するためのさまざまなオプションもあります(例えば、サフィックスやいくつかのglobに似たパターンに一致するファイルを許可または拒否し、--mirror-A-R-A pdf-A '*.pdf'--accept-regex--reject-regex正規表現をペアで連結する)など)。同じもの) wget が他のサイトへのリンクをたどるかどうかを制御します。どの他のサイト)、親ディレクトリ、またはサブディレクトリへのリンクをたどるかどうか(およびいくつかのレベルの深さ)など、多くのオプションがあり、オプションの組み合わせ間でより多くの対話があるため、すぐにマスターできることを期待しないでください。

答え2

参照するWebページを指定しないが、Webページがファイルリストを提供する場合https://ftp.gnu.org/gnu/tarlftpを使用できます。

$ lftp https://ftp.gnu.org/gnu/tar/
cd ok, cwd=/gnu/tar
lftp ftp.gnu.org:/gnu/tar> ls
(...)
-rw-r--r--          181  2021-02-13 06:32  tar-latest.tar.bz2.sig
-rw-r--r--   4.2M   2021-02-13 06:32  tar-latest.tar.gz
-rw-r--r--          181  2021-02-13 06:32  tar-latest.tar.gz.sig
-rw-r--r--   2.1M   2021-02-13 06:33  tar-latest.tar.xz
-rw-r--r--          181  2021-02-13 06:33  tar-latest.tar.xz.sig

これで、ローカルファイルシステムにディレクトリを作成し、そのディレクトリに変更してファイルをダウンロードできます。

lftp ftp.gnu.org:/gnu/tar> !mkdir /tmp/download
lftp ftp.gnu.org:/gnu/tar> lcd /tmp/download
lcd ok, local cwd=/tmp/download
lftp ftp.gnu.org:/gnu/tar> get tar-latest.tar.xz
2022-01-02 14:54:21 https://ftp.gnu.org/gnu/tar/tar-latest.tar.xz -> /tmp/download/tar-latest.tar.xz 0-2226068 1.72 MiB/s
2226068 bytes transferred in 1 second (1.72 MiB/s)

またはコマンドを使用して複数のファイルをmget

答え3

Ctrl + Shift + Iを使用してブラウザで開発者コンソールを開き、[コンソール]タブに移動します。次に、このコードを貼り付けてEnterを押します。

let allLinks = ""
document.querySelectorAll("a").forEach(item => {
  if(item.href.endsWith("pdf")){
    allLinks += item.href + "\n"
  }
})
console.log(allLinks)

これにより、コンソールにすべてのPDFリンクが一覧表示され、テキストエディタにコピーしてさらに編集できます。

関連情報