다운로드를 선택하기 전에 웹사이트/웹페이지에서 파일 목록을 가져옵니다("ls"와 유사한 방식).

다운로드를 선택하기 전에 웹사이트/웹페이지에서 파일 목록을 가져옵니다("ls"와 유사한 방식).

여러 PDF 문서에 대한 하이퍼링크가 있는 웹 페이지에 있다고 가정해 보겠습니다. 그 PDF를 다운로드하고 싶습니다. 이러한 문서 목록을 (어쨌든 ls) 얻은 다음 wget또는 를 사용하여 다운로드할 문서를 더 잘 선택할 수 있는 방법이 있습니까 curl?

답변1

lynx또는 (텍스트 모드 웹 브라우저) 를 사용하여 links웹 페이지에서 링크 목록을 다운로드하고 표시한 다음 이를 파이프하여 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

참조하는 웹페이지를 지정하지 않지만 웹페이지가 파일 목록을 제공하는 경우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 링크가 나열되며, 텍스트 편집기에 복사하여 추가로 편집할 수 있습니다.

관련 정보