웹사이트 콘텐츠
<html>
<body>
<a href="http://www.sagar.com/" title="sagar">Sagar</a>
<a href="http://www.sagarcom/1/" title="sagar1">Sagar Link1</a>
<a href="http://www.sagar.com/2/song.mp3">Download this</a>
</body>
</html>
link_source_file.txt
위 내용이 포함된 URL
## Below wget command
wget -r -l1 -H -t1 -nd -N -np -A.mp3 -erobots=off -i link_source_file.txt
-A에서 언급한 특정 유형의 파일을 다운로드하고 싶습니다. 여기있어 mp3
. 위의 wget 명령은 링크의 한 깊이를 따라갑니다 -t1
.
첫 번째 링크를 따라가서 파일을 http://www.sagar.com/
다운로드합니다 . index.html
그런 다음 파일 형식이 없다는 것을 발견하고 .mp3
삭제했습니다.index.html
나는 wget이 확장명이 있는 링크만 따르고 *.mp3
다른 링크는 따르지 않기를 원합니다. 이 요구 사항을 충족하도록 명령을 어떻게 조정할 수 있습니까?
답변1
내 생각엔 당신이 할 수 없을 것 같아요. 결국 재귀 다운로드 옵션을 사용하려면 기본적으로 wget이 html 파일에서만 찾을 수 있는 -r
링크(레벨별)를 찾아야 합니다 . -l
따라서 wget은 더 많은 html 파일 및 mp3 파일에 대한 링크를 찾으려면 html 파일을 다운로드하고 구문 분석해야 합니다.
이미 연결 목록을 만들었다면 fgrep ".mp3"
mp3 파일만 포함된 새 목록을 만들고 이를 wget의 link_source_file로 사용하는 것은 어떨까요? wget은 html 파일을 다운로드하지 않으므로 더 이상 링크를 찾을 수 없으므로 -r -l
삭제할 수도 있고 다른 옵션도 있을 수 있습니다. 그냥 유지하세요 -i
( -A
목록에는 이미 mp3 파일만 포함되어 있지만). -x
파일 계층 구조가 없더라도 파일 계층 구조를 강제로 생성하려면 이 옵션을 사용하십시오 -r
.
즉, 사이트를 재귀적으로 탐색하려면 wget이 html 파일을 보존하지 않더라도 html 파일을 다운로드하고 구문 분석할 수 있도록 허용해야 합니다.
또 다른 방법은 wget을 사용하여 여러 수준의 html 파일을 다운로드하는 것입니다. 그런 다음 수동으로 이 파일에서 링크를 가져오고 찾은 모든 mp3 파일의 목록을 만듭니다(lynx, sed 및 fgrep이 이에 대해 많은 도움이 될 것입니다). 또는 사이트가 어떻게 구성되어 있는지 알고 있는 경우 다른 방법으로 원하는 파일 목록을 생성하십시오(예를 들어, 쉘스크립트를 사용하여 다음 행이 포함된 목록을 생성하십시오:
http://www.sagar.com/1/song.mp3
http://www.sagar.com/2/song.mp3
http://www.sagar.com/3/song.mp3
http://www.sagar.com/100/song.mp3
답변2
grep을 사용한 수동 방법.
빈 디렉터리에서 시작하여 목록의 모든 HTML 파일을 비재귀적으로 다운로드합니다. --convert-links
MP3 파일에 대한 관련 링크가 전체 링크로 변환되도록 옵션이 추가되었습니다 . 따라서 하나 이상의 MP3 파일에 대한 링크가 포함된 위에 게시된 것과 같은 파일만 있습니다.
그러면 다음과 같이 할 수 있습니다:
(for f in *
do
grep -P --only-matching '(?<=href=")[^ "]*\.mp3' foo.html "$f"
# rm "$f"
done) | xargs wget
다운로드한 mp3가 아닌 파일을 삭제하려면 이전 파일을 생략하세요 #
.rm
예를 들어 리퍼러가 없거나 잘못된 경우 호스트가 다운로드를 거부하는 경우 여전히 실패할 수 있습니다.