wget을 사용하여 단일 페이지에 연결된 모든 PDF 파일을 다운로드하는 방법

wget을 사용하여 단일 페이지에 연결된 모든 PDF 파일을 다운로드하는 방법

이 웹페이지에 링크된 모든 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다운로드하여 웹 페이지에서 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로 변환합니다. 두 번째는 모든 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을 사용하여 웹 페이지에서 모든 PDF를 다운로드할 수 있습니다.

wget -r -l1 -H -t1 -nd -N -np -A.pdf -erobots=off --wait=2 --random-wait --limit-rate=20k [URL]
  • -r: 재귀적 다운로드.
  • -l1: 한 수준 깊이만(즉, 이 페이지에서 직접 링크된 파일만)
  • -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: 요청이 너무 많습니다" 오류를 방지합니다.

관련 정보