
複数のPDF文書へのハイパーリンクがあるWebページにあるとします。そのPDFをダウンロードしたいです。これらの文書のリストを(とにかくls
)入手してから、またはwget
を使用してダウンロードする文書をよりよく選択する方法はありますかcurl
?
答え1
lynx
または、(テキストモードのWebブラウザ)を使用してlinks
Webページからリンクリストをダウンロードして表示し、それをパイプしてgrep
PDFリンクのみを抽出することもできます。たとえば、
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リンクが一覧表示され、テキストエディタにコピーしてさらに編集できます。