wget -k는 모든 링크를 변환하지 않습니다

wget -k는 모든 링크를 변환하지 않습니다

전체 웹사이트를 다른 도메인으로 미러링하려고 합니다.

나는 사용하려고

wget -mk http://example.com

그러나 -k 옵션은 일부 원래 URL을 유지하고 나머지는 변환합니다. 예를 들면 다음과 같습니다.

<link rel="stylesheet" href="http://example.com/templates/css/style.css" type="text/css" />
<!--[if lt IE 8]>
  <link rel="stylesheet" href="/templates/css/ie.css" type="text/css" />
<![endif]-->
<!--[if lt IE 7]>
  <link rel="stylesheet" href="/templates/css/ie6.css" type="text/css" />
<![endif]-->

또는 img 태그:

<img src="http://example.com/templates/img/logo.jpg"

그리고 a-태그가 올바르게 변환되었습니다.

이는 index.html에서 가져온 것이며 wget의 출력은 index.html이 변환되었음을 보여줍니다.

Converting example.com/index.html... 30-12

왜 이런 일이 발생합니까?

답변1

이것은 아마도 당신이 보고 있는 내용을 설명하는 wget 맨페이지에서 가져온 것입니다.

-k --링크 변환

다운로드가 완료되면 문서의 링크를 로컬 보기에 적합하도록 변환하세요. 이는 표시되는 하이퍼링크뿐만 아니라 포함된 이미지, 스타일시트 링크, HTML이 아닌 콘텐츠에 대한 하이퍼링크 등과 같은 외부 콘텐츠에 연결되는 문서의 모든 부분에도 영향을 미칩니다.

각 링크는 다음 두 가지 방법 중 하나로 변경됩니다.

  • 파일 링크Wget을 통해 다운로드됨상대 링크로 가리키는 파일을 참조하도록 변경합니다.

예: 다운로드한 파일 /foo/doc.html이 /bar/img.gif(역시 다운로드됨)에 링크되는 경우 doc.html의 링크는 ../bar/img.gif를 가리키도록 수정됩니다. 이 변환은 모든 디렉터리 조합에 대해 안정적입니다.

  • 파일 링크아직 Wget을 통해 다운로드되지 않았습니다.호스트 이름과 그들이 가리키는 위치에 대한 절대 경로를 포함하도록 변경합니다.

예: 다운로드한 파일 /foo/doc.html이 /bar/img.gif(또는 ../bar/img.gif)에 링크되는 경우 doc.html의 링크는 다음을 가리키도록 수정됩니다.http://호스트 이름/bar/img.gif.

자세한 내용이 없으면 더 정확하기 어렵습니다.

답변2

서버에 robots.txt 파일이 있을 수 있습니다. -e robots=off이 경우 이 옵션이 도움이 될 수 있습니다. (나도 비슷한 상황에 있었다.)

답변3

미러 사이트가 HTTP 인증으로 보호되는 경우 명령줄 옵션을 사용하여 사용자 이름과 비밀번호를 제공해야 합니다. 뭔가 작동하는 --http-user=someone것 같습니다 --http-password=secret. 자격 증명을 URL의 일부로 지정하면 https://someone:secret@somewhere/wget이 인증 없이 다른 파일을 가져오려고 시도하는 동안 일부 파일만 다운로드되는 예기치 않은 동작이 발생할 수 있습니다. 이에 대한 패턴과 타당한 이유가 있다고 확신하지만 액세스 가능한 링크와 액세스할 수 없는 링크 간의 차이점을 조사하는 데는 애를 쓰지 않았습니다.

관련 정보