WGET을 사용하여 CSS 이미지를 포함하여 1 레벨 깊이의 사이트, JS, CSS 리소스를 복구하는 방법은 무엇입니까?


11

간단한 페이지 사본을 영구 보관을 위해 HD로 다운로드하고 싶었습니다. 나는 깊은 재귀를 얻지 않고 단일 페이지 만 찾고 있으며 해당 페이지에 의해로드 된 모든 리소스도 다운로드받을 수 있습니다.

예 : https://www.tumblr.com/

배고 있다:

  • index.html
  • 로드 된 이미지
  • 로드 된 JS 파일
  • 로드 된 CSS 파일
  • CSS 파일에로드 된 모든 이미지
  • 다운로드 된 사본과 함께 작동하도록 현지화 된 페이지 자원에 대한 링크 (웹 종속성 없음)

최고의 wget 구문이나 다른 도구를 찾는 데 도움이되는지 알고 싶습니다. 내가 시도한 도구는 일반적으로 CSS로 이미지를로드하지 못하므로 로컬로로드 할 때 페이지가 제대로 보이지 않습니다. 감사합니다!

탄젠트 솔루션

FireFox를 사용 하여이 작업을 수행하는 방법을 찾았습니다. 기본 저장이 깨졌으며 "저장 완료"라는 추가 기능이있어이 작업을 잘 수행 할 수 있습니다. 그러나 현재 FireFox 버전에서는 지원되지 않으므로 다운로드 할 수 없습니다. 그 이유는 "Mozilla Archive Format"이라는 부가 기능으로 롤업 되었기 때문입니다. 파일> "페이지를 다른 이름으로 저장"을 사용하면 "웹 페이지 완료"라는 새로운 옵션이 있습니다.이 옵션은 기본적으로 이전 애드온으로 FireFox에서 사용하는 스톡 구현을 수정합니다 (끔찍합니다). 이것은 WGET 솔루션은 아니지만 실행 가능한 솔루션을 제공합니다.

편집 : 미래 에이 질문을 수행 할 사람 에게이 또 다른 우스운 문제는 이것을하려고합니다. 애드온이 제대로 작동하게하려면 도구> Mozilla 아카이브 형식으로 이동하여 "끔찍한"기본 설정 인 "신뢰할 수있는 페이지 스냅 샷 작성"을 "저장 완료를 사용하여 스크립트 및 소스 보존"으로 변경하십시오. 그렇지 않으면 애드온이 모두 비워집니다 스크립트 파일을 "/ * 스크립트를 스냅 샷 저장으로 제거 * /"텍스트로 바꿉니다.


파일> 파이어 폭스 또는 다른 브라우저에서 다른 이름으로 저장하면 모든 이미지, js 및 css 파일을 다운로드합니다
user31113

실제로 파일을 원합니까, 아니면 정확하게 렌더링 된 페이지 버전을 원하십니까?

파일을 원한다면 어쨌든 페이지를 올바르게 렌더링해야합니다. 그것들이 없다면 다르게 보일 것입니다. Firefox에서는 파일> 다른 이름으로 저장이 작동하지 않습니다. 이 작업을 수행하면 CSS 이미지가 표시되지 않습니다. tumblr.com/login 에서 사용해보십시오 . 배경 이미지가 누락되었으며 입력 필드의 bg 이미지가 누락되었습니다.

wget 솔루션 중 어느 것도 나를 위해 일하지 않았습니다. 내 탄젠트 솔루션은 이러한 종류의 사이트 절약을 달성하는 가장 좋은 방법입니다. 그러나 apple.com 과 같은 매우 복잡한 페이지에서 실패하는 것을 보았습니다 . 아마도 많은 리소스 경로가 자바 스크립트를 실행하여 동적으로 생성되기 때문입니다.
Lana Miller

답변:


12

wget -p -k http://ExampleSite.com

-p는 사이트를 올바르게 보는 데 필요한 모든 요소 (css, 이미지 등)를 제공합니다. -k는 모든 링크 (CSS 및 이미지에 대한 링크 포함)를 변경하여 온라인으로 표시된 페이지를 오프라인으로 볼 수 있도록합니다.

업데이트 : 이것은 귀하의 예제 사이트에만 해당됩니다 : tumblr.com

wget -H -N -k -p --exclude-domains quantserve.com --no-check-certificate -U "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0a2) Gecko/20110613 Firefox/6.0a2" https://www.tumblr.com

고장 :

-H = wget이 외부 호스트로 확장되도록 허용합니다. tumblr의 첫 페이지에 동일한 주소의 이미지가 없으므로 secure.assets.tumblr.com을 사용 하고 있습니다. 도메인 제외에 대한 참고 사항을 참조하십시오.

-N = 시간이 지남에 따라 동일한 페이지를 다시 다운로드하는 경우 현재 가지고있는 파일보다 최신 파일 만 가져옵니다.

-k = 링크를 오프라인으로 올바르게 보려면 변환

-p = 필수 요소 (css, 이미지 등)를 올바르게 보려면

--exclude-domains = tumblr.com 홈페이지에는 quantserve.com에 대한 링크가 있으며이 항목을 원하지 않는 것 같아서 wget 다운로드에서 제외해야합니다. 노트 : 이것은 사이트로 이동하고 외부 호스트 (광고주 및 분석 자료 생각)에 대한 여러 개의 링크가있는 경우 -H와 함께 사용해야하는 매우 중요한 것입니다.

tumblr가 https를 사용하므로 --no-check-certcertate가 필요합니다

-U는 사용자 에이전트를 변경합니다. 이 인스턴스에서는 기본 wget user-agent를 허용하므로 실제로 필요하지는 않지만 일부 사이트에서 차단할 것입니다. 다른 사이트에서 문제가 발생하는 경우를 대비하여 여기에 던졌습니다. 내가 제공 한 스 니펫 예제에서는 Mozilla Firefox 6.02a로 표시됩니다.

마지막으로 사이트가 있습니다 : https://www.tumblr.com


1
나는 이것을 시도했지만 JS 또는 CSS 또는 이미지 파일을 얻지 못했습니다. 당신은?

tumblr (위의 예)에서 사용하는 경우 --no-check-certificate를 지정해야 할 수 있습니다.

나는 당신이 옳다고 생각합니다. 아마도 그 옵션이 필요할 것입니다. 그러나 index.html을 제외하고는 아무것도 없습니다. 뭔가 빠졌습니다 ...

@LanaMiller 내 답변을 업데이트했습니다. 문제가 있으면 알려주세요.

-exclude-domains! = tumblr.com과 같은 것을 할 수 없습니까?
alpha1

3

언급 한 특정 사이트와 많은 다른 사이트는 wget (및 curl)처럼 작동하지 않습니다. 문제는 브라우저에서 페이지를 렌더링하는 데 필요한 자산 링크 중 일부가 자바 스크립트를 통해 생성된다는 것입니다. Wget에는 javascript를 실행하기 위해 보류중인 기능 요청이 있습니다.

http://wget.addictivecode.org/FeatureSpecifications/JavaScript

그러나 자바 스크립트를 사용하여 자산 링크를 빌드하는 완전한 사이트가 wget을 사용하여 복제 할 수 없습니다. 가장 쉬운 해결책은 실제로 DOM을 빌드하고 브라우저 엔진과 같은 자바 스크립트를 구문 분석하는 도구를 찾는 것입니다 (예 : 파이어 폭스 방법).


1

wget을 사용하여 쉘을 통해 명령을 실행하여 자동으로 (또는 코딩하는 경우 프로그래밍 방식으로)이를 수행 할 수도 있습니다.

wget --convert-links -r http://www.yourdomain.com

페이지와 내부 파일을 다운로드하고 링크를 로컬로 만듭니다.


1
이것은 모든 것을 얻을 것이다 . 질문을 읽으십시오.
evgeny

-1
wget -r http://www.example.com

나는 그것이 모든 것을 잡을 것이라고 생각하지만, 그것을 쏴서 알아 내십시오.


1
너무 많은 모든 것을 얻습니다. 지금까지 내가 찾은 FireFox 솔루션이 가장 효과적인 솔루션입니다. 필요한 것을 얻습니다.

-1

$ ( 남자 wget ) :

-피

--page-requisites

이 옵션을 사용하면 Wget이 지정된 HTML 페이지를 올바르게 표시하는 데 필요한 모든 파일을 다운로드합니다. 여기에는 인라인 이미지, 사운드 및 참조 스타일 시트와 같은 것들이 포함됩니다.

일반적으로 단일 HTML 페이지를 다운로드 할 때 제대로 표시하는 데 필요한 필수 문서는 다운로드되지 않습니다. -r을 -l과 함께 사용하면 도움이 될 수 있지만 Wget은 일반적으로 외부 문서와 인라인 문서를 구분하지 않으므로 일반적으로 필수 문서가 누락 된``리프 문서 ''가 남습니다.

예를 들어, document 1.html에 1.gif를 참조하는 "<IMG>"태그와 외부 문서 2.html을 가리키는 "<A>"태그가 있다고 가정하십시오. 2.html은 비슷하지만 이미지는 2.gif이고 3.html에 링크되어 있다고 가정하십시오. 이것이 임의로 높은 숫자까지 계속된다고 가정 해보십시오.

명령을 실행하면 :

wget -r -l 2 http : // <site> /1.html

그러면 1.html, 1.gif, 2.html, 2.gif 및 3.html이 다운로드됩니다. 보시다시피 Wget은 재귀를 중지 할 위치를 결정하기 위해 1.html에서 홉 수 (최대 2 개) 만 계산하기 때문에 3.html에는 필수 3.gif가 없습니다. 그러나이 명령으로

wget -r -l 2 -p http : // <site> /1.html

위의 모든 파일과 3.html의 필수 3.gif가 다운로드됩니다. 비슷하게,

wget -r -l 1 -p http : // <site> /1.html

1.html, 1.gif, 2.html 및 2.gif가 다운로드됩니다. 다음과 같이 생각할 수 있습니다.

wget -r -l 0 -p http : // <site> /1.html

1.html 및 1.gif 만 다운로드하지만 불행히도 -l 0은 -l inf--와 동일하므로 무한 재귀이므로 그렇지 않습니다. 명령 줄 또는 -i URL 입력 파일에 지정된 단일 HTML 페이지 (또는 소수의 HTML 페이지)와 해당 필수 조건을 다운로드하려면 -r 및 -l을 그대로 두십시오.

wget -p http : // <site> /1.html

Wget은 -r이 지정된 것처럼 작동하지만 해당 단일 페이지와 해당 필수 항목 만 다운로드됩니다. 해당 페이지에서 외부 문서로의 링크는 따르지 않습니다. 실제로 단일 페이지와 모든 필수 구성 요소를 별도의 웹 사이트에있는 경우에도 다운로드하고 로트가 제대로 로컬로 표시되도록하려면이 저자는 -p 외에도 몇 가지 옵션을 사용합니다.

wget -E -H -k -K -p http : // <site> / <document & gt ;

이 항목을 마치려면 외부 문서 링크에 대한 Wget의 아이디어가 "<A>"태그, "<AREA>"태그 또는 "<이외의"<LINK> "태그에 지정된 URL임을 알아야합니다. LINK REL = "stylesheet"> ".


2
이 중 어느 부분이 솔루션과 비슷하다고 생각하십니까? 맨 페이지의 내용을 읽으려고 시도했지만 여기에 올바른 해결책이 없습니다. 이거 직접 해봤 어? 명령이 구체적으로 문제를 해결하는 것이라고 생각하십니까?
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.