여러 PDF 문서에 대한 하이퍼링크가 있는 웹 페이지에 있다고 가정해 보겠습니다. 그 PDF를 다운로드하고 싶습니다. 이러한 문서 목록을 (어쨌든 ls
) 얻은 다음 wget
또는 를 사용하여 다운로드할 문서를 더 잘 선택할 수 있는 방법이 있습니까 curl
?
답변1
lynx
또는 (텍스트 모드 웹 브라우저) 를 사용하여 links
웹 페이지에서 링크 목록을 다운로드하고 표시한 다음 이를 파이프하여 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
참조하는 웹페이지를 지정하지 않지만 웹페이지가 파일 목록을 제공하는 경우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 링크가 나열되며, 텍스트 편집기에 복사하여 추가로 편집할 수 있습니다.