wget을 사용하여 index.html에서 URL 목록을 만드는 방법은 무엇입니까?

wget을 사용하여 index.html에서 URL 목록을 만드는 방법은 무엇입니까?

따라서 wget파일을 재귀적으로 다운로드하는 기능이 있지만 한 번에 하나의 파일만 다운로드합니다.

디렉터리 URL을 전달하고 재귀에서 발견되는 각 URL에 대한 다운로드 프로세스를 생성하고 싶습니다.

내가 생각한 한 가지 접근 방식은 어떻게든 wget발견한 URL을 인쇄한 다음 해당 URL을 별도의 인스턴스 ( 등을 wget통해 )에 공급하는 것입니다.wget URL_1 &wget URL_2 &

어떤 아이디어가 있나요?

답변1

나는 이것에 대해 생각해 봤지만 wget이 작업에 가장 적합한 도구라고 확신하지 않습니다.

2022년에 유사한 도구를 사용하여 이를 수행하는 방법은 다음과 같습니다.강아지HTML 구문 분석을 위해 특별히 설계되었습니다(강아지의 경우,CSS 선택기):

wget -q -O- https://ubuntu.com/download/alternative-downloads \
  | pup 'a[href$=".torrent"] attr{href}' \
  | aria2c -d ~/Downloads -i -

당신은 또한 볼 수 있습니다

  • 시델

    • -e/옵션 --extract사용XPath 선택기기본적으로 --css '<selector>'또는 CSS 선택기를 지원합니다.--extract 'css("<selector>")'
    • curl인터넷 리소스에 직접 액세스할 수 있지만 내 컴퓨터보다 약간 느립니다.
    • 매우 관용적인 파서; 잘못된 HTML의 경우에도 불평을 거의 볼 수 없습니다.
    • 예:
      xidel https://www.videlibri.de/xidel.html \
            -e '//a[ends-with(@href,"/download")]/@href'
      
      # faster, for some reason; don't forget the '-' (read from stdin)!
      curl -q https://www.videlibri.de/xidel.html \
        | xidel -e '//a[ends-with(@href,"/download")]/@href' -
      
      # same as above, using CSS selectors + XPath for the attribute
      curl -q https://www.videlibri.de/xidel.html \
        | xidel -e 'css("a[href$=/download]")/@href' -
      
  • xmlstarlet

    • XPath 선택기 사용
    • ~ 해야 하다올바른 형식의 XML/XHTML을 입력으로 사용하세요.
      • 파이프를 통해 xmlstarlet fo -H -R(다시rmat, 예상 입력은 다음과 같습니다.시간TML, 한번 시도해 보세요오른쪽오류 후 복구)는 대부분의 웹사이트를 수정해야 합니다.
    • 예:
      # NB: my version of xmlstarlet doesn't support XPath 'ends-with'
      curl -s https://ubuntu.com/download/alternative-downloads \
        | xmlstarlet fo -H -R 2>/dev/null \
        | xmlstarlet sel -t -v '//a[contains(@href, ".torrent")]/@href' -n
      
  • 아리아 2

답변2

다음과 함께 사용하세요 grep:

wget url -rqO - | grep -oE '[a-z]+://[^[:space:]"]+'

답변3

이 문제를 해결하는 한 가지 방법은 모든 링크를 일반 텍스트 파일로 수집하고 다음을 수행하는 것입니다.

while read line; do
    echo "Downloading ${line}"
    wget $line &        
done < $1

이 파일을 다른 이름으로 저장하세요.스크립트 파일실행 가능하게 만들고 실행해 보세요.

$ ./script.sh

이 문제를 영구적으로 해결하는 더 좋은 방법은 wget을 본질적으로 병렬이 되도록 다시 작성하는 것입니다.

답변4

내 경우에는 이렇게 작동한다링크wget:

$ wget -O - -o /dev/null http://site.to.get.urls.from | grep -o 'some_regex' | wget -i -

첫 번째는 wget두 번째의 입력 "파일"로 사용되는 파일이 포함된 URL 목록을 생성합니다 wget.

이는쉽게 한버전에서는 그 뒤에 숨겨진 기술을 보여줍니다. grep와 두 번째 명령 사이의 파이프는 실제로 wget더 많은 파이프 명령(예: sed, 또는 )과 awk결합될 수 있습니다 cut(특히 HTML 소스가 평소보다 더 복잡하여 구문 분석이 더 어려운 경우).

이것은 읽습니다: 정규식이 제대로 작동하는지 wget확인하려면 항상 내부 독립형 함수를 먼저 호출해야 합니다 .stdout

관련 정보