보관 된 웹 사이트를 미러링하기 위해 wget 또는 httrack을 사용하는 데 문제가 있음


12

wget을 사용하여 웹 사이트의 로컬 미러를 만들려고합니다. 그러나 모든 링크 페이지를 얻지 못하는 것으로 나타났습니다.

여기 웹 사이트가 있습니다

http://web.archive.org/web/20110722080716/http://cst-www.nrl.navy.mil/lattice/

로 시작하는 모든 페이지를 원하지는 않지만로 시작하는 web.archive.org모든 페이지를 원합니다 http://web.archive.org/web/20110722080716/http://cst-www.nrl.navy.mil/lattice/.

을 사용할 때 wget -r파일 구조에서

web.archive.org/web/20110722080716/http://cst-www.nrl.navy.mil/lattice/index.html,

하지만이 데이터베이스의 일부인 모든 파일이 없습니다. 예 :

web.archive.org/web/20110808041151/http://cst-www.nrl.navy.mil/lattice/struk/d0c.html.

아마도 httrack이 더 나을지 모르지만 지금은 너무 많이 잡아 왔습니다.

그렇다면 인터넷 보관 Wayback Machine 에서 보관 된 웹 사이트의 로컬 복사본을 얻을 수있는 방법은 무엇입니까?


남자! 나는 정확히 같은 페이지를 미러링하려고 노력했다. 문제는 20110722080716스냅 샷에서 모든 파일에 액세스 할 수 -np는 없으므로 wget의 옵션이 도움이되지 않는다는 것입니다.
mpy

누락 된 페이지가 실제로 아카이브되었는지 수동으로 확인 했습니까? Archive.org가 항상 모든 단일 페이지를 보관하지는 않습니다.
nitro2k01

답변:


20

도움이되었지만 이전 응답은 기본 질문을 간결하고 안정적이며 반복적으로 해결하지 못합니다. 이 글에서 우리는 각각의 어려움을 간략하게 설명하고 적당한 httrack기반의 솔루션 을 제공합니다 .

배경

그러나 그 전에, mpy 의 잘 작성된 응답을 숙고하는 것이 좋습니다. 슬프게도 소홀히 게시 된 게시물에서 mpy 는 Wayback Machine의 모호한 (그리고 정직하게 난독 한) 보관 체계를 엄격하게 문서화합니다.

놀랍지 않게, 그것은 예쁘지 않습니다. Wayback Machine은 사이트를 단일 디렉토리에 안전하게 보관하지 않고 단일 사이트를 두 개 이상의 숫자로 식별 된 형제 디렉토리에 임시로 분산시킵니다. 이로 인해 미러링이 복잡해 진다고 말하는 것은 실질적인 과소 평가 일 것입니다.

이 계획에서 제시하는 끔찍한 함정을 이해하는 것은 이전 솔루션의 부적합성을 이해하는 데 핵심입니다. 계속 해볼까요?

이전 솔루션 1 : wget

관련 StackOverflow 질문 인 "오래된 웹 사이트에서 waybackmachine 복구" 는 이와 관련하여 최악의 위반자 일 수 있으며 wgetWayback 미러링을 권장 합니다. 당연히 그 추천은 근본적으로 좋지 않습니다.

재 작성 복잡한 외부 URL이없는 경우 (예를 들어, Privoxy), wget안정적으로 뒤로-보관 된 사이트를 거울로 사용할 수 없습니다. MPY 당신이 선택 도구를 미러링하는 것은 아닌 이적으로 다운로드 할 수 있도록해야 무엇이든 아래 사항 "문제 2 + 솔루션," 만을 대상 사이트에 속하는 URL을. 기본적으로 대부분의 미러링 도구 는 대상 사이트와 해당 사이트에서 링크 된 사이트 모두에 속하는 모든 URL을 전 이적으로 다운로드 합니다 . 최악의 경우 "전체 인터넷"을 의미합니다.

구체적인 예는 순서대로입니다. 예제 도메인을 미러링 할 때 미러링 kearescue.com도구 다음을 수행 해야합니다 .

  • 일치하는 모든 URL을 포함하십시오 https://web.archive.org/web/*/http://kearescue.com. 대상 사이트에서 제공하는 자산입니다 (예 :) https://web.archive.org/web/20140521010450js_/http_/kearescue.com/media/system/js/core.js.
  • 다른 모든 URL을 제외하십시오. 이들은 단순히 대상 사이트 (예 :)에서 연결된 다른 사이트에서 제공하는 자산 https://web.archive.org/web/20140517180436js_/https_/connect.facebook.net/en_US/all.js입니다.

이러한 URL을 제외하지 않으면 일반적으로 사이트가 보관 될 때, 특히 외부 호스팅 자산 (예 : YouTube 동영상)이 포함 된 사이트의 경우 보관 된 인터넷의 전부 또는 대부분을 가져옵니다.

그것은 나쁠 것입니다. 동안 wget 수행 명령 줄 제공 --exclude-directories제외 할 URL을 일치 하나 개 이상의 패턴을 허용 옵션을,이은 하지 범용 정규 표현식; 그것들은 *구문이 0 개 이상의 문자를 제외하고/ 일치 하는 단순한 glob입니다 . 제외 될 URL을 임의로 많은이 포함되어 있기 때문에 /문자를 wget 수없는 이 URL을 제외하는 데 사용할 수 따라서 수없는 거울 뒤로-보관 된 사이트에 사용할 수. 기간. 불행한 이야기의 끝.

이 문제는 2009 년 이후 공개 기록 에 있습니다. 아직 해결되지 않았습니다. 다음!

이전 솔루션 2 : 스크랩북

PrinzScrapBook 은 Firefox 플러그인을 권장 합니다. Firefox 플러그인.

아마 당신이 알아야 할 모든 것입니다. 동안 ScrapBookFilter by String...기능을 수행 어드레스 상기 "2 + 문제 해결책"는 않는다 없다 "3 + 문제 해결책"후속 주소 - 불필요한 중복 즉, 문제.

ScrapBook이전 문제를 적절하게 해결 하는지 여부 는 의문 입니다. 로 MPY 인정 :

스크랩북이 지금까지 사이트를 완전히 파악하지 못했지만 ...

신뢰할 수없고 지나치게 단순한 솔루션은 솔루션이 아닙니다. 다음!

이전 솔루션 3 : wget + Privoxy

MPY는 다음을 모두 활용하는 강력한 솔루션 제공 wgetPrivoxy. 반면 wget 입니다 구성 합리적으로 간단하고, Privoxy어떤 합리적인이다. 아니면 간단합니다.

제대로 설치, 구성 및 사용하는 기술적 인 장애물로 인해 mpy 의 솔루션 Privoxy은 아직 확인되지 않았습니다 . 그것은 해야한다 확장 성, 강력한 방식으로 작동합니다. 진입 장벽을 감안할 때이 솔루션은 중소 규모 사이트를 복구하려는 일반 웹 마스터보다 대규모 자동화에 더 적합 할 것입니다.

wget+ Privoxy가치는보고? 물론. 그러나 대부분의 수퍼 유저는 더 간단하고 쉽게 적용 할 수있는 솔루션으로 더 나은 서비스를받을 수 있습니다.

새로운 솔루션 : httrack

미러링 기능의 httrack상위 집합을 구현하는 명령 줄 유틸리티 인 Enter 키를 누릅니다 wget. httrack패턴 기반 URL 제외 간단한 사이트 재구성을 모두 지원합니다 . 전자는 mpy 의 "Problem 2 + Solution"을 해결합니다. 후자는 "문제 3 + 솔루션"입니다.

아래 추상 예제에서 다음을 대체하십시오.

  • ${wayback_url}대상 사이트의 전체를 보관 최상위 디렉토리의 URL에 의해 (예 'https://web.archive.org/web/20140517175612/http://kearescue.com').
  • ${domain_name}동일한 도메인 이름 본 의해 ${wayback_url}추가하는 설정을 제외하고 http://(즉, 'kearescue.com').

여기 있습니다 설치 httrack하고 터미널 창을 열고 cd사이트를 다운로드하려는 로컬 디렉토리로 이동 한 후 다음 명령을 실행하십시오.

httrack\
    ${wayback_url}\
    '-*'\
    '+*/${domain_name}/*'\
    -N1005\
    --advanced-progressinfo\
    --can-go-up-and-down\
    --display\
    --keep-alive\
    --mirror\
    --robots=0\
    --user-agent='Mozilla/5.0 (X11;U; Linux i686; en-GB; rv:1.9.1) Gecko/20090624 Ubuntu/9.04 (jaunty) Firefox/3.5'\
    --verbose

완료시, 현재 디렉토리에는 해당 URL에서 미러링 된 각 파일 유형에 대한 하나의 서브 디렉토리가 포함되어야합니다. 여기에는 일반적으로 다음이 포함됩니다.

  • css모든 미러 CSS 스타일 시트를 포함합니다.
  • html모든 미러 된 HTML 페이지를 포함합니다.
  • js모든 미러 된 JavaScript를 포함합니다.
  • ico미러 파비콘 1 개를 포함합니다.

이후 httrack내부적으로 구조를 반영하기 위해 모든 다운로드 콘텐츠를 다시 작성 수정없이 그대로, 귀하의 사이트는 현재 검색 가능한해야합니다. 위의 명령을 조기에 중지하고 다운로드를 계속 --continue하려면 동일한 명령에 옵션을 추가 한 후 다시 시도하십시오.

그게 다야. 외부 왜곡, 오류가 발생하기 쉬운 URL 재 작성 또는 규칙 기반 프록시 서버가 필요하지 않습니다.

동료 수퍼 유저를 즐기십시오.


나는 적어도 한 사람이 내 대답을 철저히 읽는다는 것을 알게되어 기쁩니다. 추가 분석 및 httrack 솔루션에 감사드립니다. +1
mpy 2016 년

1
httrack 솔루션은 완벽했습니다. 정말 감사합니다!
ChrisChinchilla

약간의 도움이되어 기쁘다. 이 재난과 속임수의 태피스트리가 풀리는 것이 얼마나 끔찍한 일인지를 감안할 때, 나는 단지 나의 발견을 공유 해야 했다.
세실 커리

전송 속도 제한을 제거하려면 다음 매개 변수를 추가하십시오. --disable-security-limits --max-rate = 0
Oswaldo

7

불행히도 모든 파일을 수십 번 복제하지 않고 보관 된 웹 사이트에서 완전한 미러를 만드는 문제를 해결할 수있는 대답은 없었습니다. 그래서 다른 접근법을 함께 해킹했습니다. 내 솔루션이 일반적인 솔루션이나 매우 간단한 (읽기 : 복사 및 붙여 넣기) 솔루션이 아니기 때문에 해킹 은 중요한 단어입니다. wget으로 미러링하는 동안 Privoxy Proxy Server 를 사용하여 파일 을 즉석에서 다시 썼습니다.

그러나 먼저 Wayback Machine의 미러링에있어 어려운 점은 무엇 입니까?

문제 1 + 해결책

Wayback 도구 모음은 대화식 사용에 편리하지만 wget을 방해 할 수 있습니다. privoxy 필터 규칙으로 제거하십시오.

FILTER: removewaybacktoolbar remove Wayback toolbar
s|BEGIN WAYBACK TOOLBAR INSERT.*END WAYBACK TOOLBAR INSERT|Wayback Toolbar removed|s

문제 2 + 해결책

전체 사이트를 캡처하고 싶기 때문에 너무 작은 재귀 깊이가 필요했습니다. 그러나 wget이 전체 서버를 크롤링하고 싶지 않습니다. 일반적으로 해당 목적을 위해 부모없는-np wget 옵션 을 사용합니다 . 그러나 여기에서 작동하지 않습니다.

http://web.archive.org/web/ 20110722080716 /http://cst-www.nrl.navy.mil/lattice/struk/hcp.html

뿐만 아니라

http://web.archive.org/web/ 20110801041529 /http://cst-www.nrl.navy.mil/lattice/struk/a_f.html

(경로에서 변경된 타임 스탬프에 유의하십시오). 생략 -np하면 wget까지 크롤링 (...)http://cst-www.nrl.navy.mil하고 결국 전체 navi.mil사이트를 검색합니다 . 나는 분명히 그것을 원하지 않는다! 따라서이 필터는 -npWayback 시스템 의 동작 을 에뮬레이트하려고 합니다.

FILTER: blocknonparentpages emulate wget -np option
s|/web/([0-9].*)/http://cst-www.nrl.navy.mil/lattice/|THIS_IS_A_GOOD_$1_ADDRESS|gU
s|/web/(.*)/http(.*)([" ])|http://some.local.server/404$3|gU
s|THIS_IS_A_GOOD_(.*)_ADDRESS|/web/$1/http://cst-www.nrl.navy.mil/lattice/|gU

구문을 파는 연습으로 남겨 두겠습니다. 이 필터의 기능은 다음과 같습니다. 모든 Wayback URL을 포함 하지 않는http://web.archive.org/web/20110801041529/http://www.nrl.navy.mil/http://some.local.server/404으로 대체 합니다 .http://cst-www.nrl.navy.mil/lattice/

조정해야합니다 http://some.local.server/404. 이것은 wget에 404 오류를 보내는 것입니다. 아마도 privoxy가 더 우아하게 할 수 있습니다. 그러나 가장 쉬운 방법은 로컬 http 서버에 존재하지 않는 페이지에 대한 링크를 다시 작성하는 것이 었습니다.

그리고, 당신은 또한 조정해야 모두 발행 수 의를 http://cst-www.nrl.navy.mil/lattice/미러링 할 사이트를 반영 할 수 있습니다.

문제 3 + 해결책

마지막으로 일부 아카이브 된 버전의 페이지가 다른 스냅 샷의 페이지에 링크 될 수 있습니다. 그리고 그것은 또 다른 하나입니다. 그리고 등등 ... 그리고 당신은 같은 페이지의 많은 스냅 샷으로 끝날 것입니다-wget은 모든 스냅 샷 을 가져 오기 전까지는 완료되지 않습니다 . 나는 정말로 그것을 원하지 않습니다! Wayback 머신이 매우 똑똑하다는 것이 여기에 많은 도움이됩니다. 파일을 요청할 수 있습니다

http://web.archive.org/web/ 20110801041529 /http://cst-www.nrl.navy.mil/lattice/struk/a_f.html

20110801041529스냅 샷에 포함되지 않은 경우에도 마찬가지 입니다. 그것은 자동으로 올바른로 리디렉션 :

http://web.archive.org/web/ 20110731225728 /http://cst-www.nrl.navy.mil/lattice/struk/a_f.html

따라서 모든 스냅 샷을 최신 스냅 샷으로 다시 작성하는 또 다른 privoxy 필터

FILTER: rewritewaybackstamp rewrite Wayback snapshot date
s|/([0-9]{14})(.{0,3})/|/20120713212803$2/|g

사실상 14 자리 숫자로 묶인 모든 숫자 /.../가 대체됩니다 20120713212803(원하는 사이트의 가장 최근 스냅 샷으로 조정). 사이트 구조에 Wayback 시스템에서 시작되지 않은 숫자가있는 경우 문제가 될 수 있습니다. 완벽하지는 않지만 Strukturtypen 사이트 에는 적합합니다 .

이것에 대한 좋은 점은 wget이 리디렉션 된 새 위치를 무시하고 위의 시험에서 파일을으로 저장한다는 것 web.archive.org/web/20110801041529/http://cst-www.nrl.navy.mil/lattice/struk/a_f.html입니다.

보관 된 사이트를 미러링하기 위해 wget 사용

마지막으로 이러한 privoxy 필터 (에서 정의 됨 user.filter)를 user.action통해

{ +filter{removewaybacktoolbar} +filter{blocknonparentpages} +filter{rewritewaybackstamp} }
web.archive.org

평소처럼 wget을 사용할 수 있습니다. wget에게 프록시를 사용하도록 지시하는 것을 잊지 마십시오.

export http_proxy="localhost:8118"
wget -r -p -k -e robots=off http://web.archive.org/web/20120713212803/http://cst-www.nrl.navy.mil/lattice/index.html

이 옵션을 사용했지만 -m작동해야합니다. 폴더가 생깁니다

20120713212803
20120713212803cs_
20120713212803im_
20120713212803js_

Wayback 기계는 이미지 ( im_), 스타일 시트 ( cs_) 등을 분리합니다 . 나는 모든 것을 하나로 모으고 추한 상대 링크 ( ../../../../20120713212803js_/http:/cst-www.nrl.navy.mil/lattice) 를 대체하기 위해 sed magic을 사용했습니다 . 그러나 이것은 실제로 필요하지 않습니다.


1
이것은 귀중한 대답이었습니다. Wayback Machine의 내부 사이트 구조에 대한 정확한 해부는 필자가 결국 우연히 발견 한 httrack 기반 솔루션의 핵심이었습니다 . 당신은 락, mpy.
Cecil Curry

5

wget

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

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

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

-m
--mirror

미러링에 적합한 옵션을 켭니다. 이 옵션은 재귀 및 타임 스탬프를 설정하고 무한 재귀 수준을 설정하며 FTP 디렉토리 목록을 유지합니다. 현재 -r -N -l inf --no-remove-listing과 같습니다.

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

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

그래서 wget -E -H -k -K -p http://web.archive.org/web/20110722080716/http://cst-www.nrl.navy.mil/lattice 당신에게 가장 어울릴 것입니다. 하지만 다른 도구 인 firefox확장 프로그램을 추천 합니다scrapbook

스크랩북

ScrapBook은 Firefox 확장으로, 웹 페이지를 저장하고 컬렉션을 쉽게 관리 할 수 ​​있습니다. 주요 기능은 가벼움, 속도, 정확성 및 다국어 지원입니다. 주요 기능은 다음과 같습니다.
* 웹 페이지 저장 * 웹 페이지의
스 니펫 저장
* 웹 사이트 저장
* 책갈피와 동일한 방식으로 콜렉션 구성 * 콜렉션의
전체 텍스트 검색 및 빠른 필터링 검색
* 수집 된 웹 페이지 편집
* 텍스트 / HTML Opera의 노트와 유사한 편집 기능

사이트를 미러링하는 방법 스크랩북
설치 및 파이어 폭스 다시 시작

  1. 브라우저에 페이지로드 [미러링 할 웹 페이지]
  2. 페이지를 마우스 오른쪽 버튼으로 클릭-> 다른 이름으로 페이지 저장 ...
  3. 심도 저장 에서 레벨을 선택 하고 저장 을 누릅니다. 여기에 이미지 설명을 입력하십시오
  4. 선택 Restrict to Drirectory/ Domain에서 필터
    여기에 이미지 설명을 입력하십시오

미러링이 완료 될 때까지 기다리십시오. 미러링 후 ScrapBook메뉴 에서 오프라인으로 웹 사이트에 액세스 할 수 있습니다 .


Scrapbook이 지금까지 사이트를 완전히 파악하지 못했지만 다른 제안보다 가능한 솔루션에 더 가깝습니다. 특히 문자열필터링 ... 옵션은 호스트 / 도메인으로 필터링하는 것보다 더 유용했습니다. 그러므로, 나는 당신에게 현상금을 수여합니다:)
mpy

0

아래 명령은 많이 차지하므로주의하십시오. 'l'다음의 1은 사이트에서 1 레벨 깊이의 링크에 대한 모든 페이지를 가져 오도록 지시합니다. 더 깊이 거미로 만들고 싶다면 이것을 2로 변경하십시오.하지만 루프에 걸릴 수 있기 때문에 결코 끝나지 않을 수 있습니다.

wget -rHpkl 1 -e robots=off http://www.example.com/

사이트의 어떤 부분을 유지하고 싶지 않은지 확실하지 않지만 사이트의 다른 부분을 화이트리스트 및 / 또는 블랙리스트에 추가하여 원하는 것을 얻고 자신을 막을 수 있습니다. archive.org 또는 인터넷을 모두 다운로드합니다.

사용 -D www.examle.com,www.another.example.com당신이 원하는 또는 사용이 허용 된 사이트 목록 도메인 만에 --exclude-domains www.examle.com,www.another.example.com 원하지 않는 것을 블랙리스트.


감사합니다. 그러나 화이트 / 블랙리스트의 문제점은 모든 보관 된 웹 사이트가 web.archive.org호스트 에서 온다는 것입니다 . wget -np원래 사이트가 여전히 온라인 상태 였을 때 미러링 된 모든 내용을 미러링하고 싶습니다 . -l3 또는 4로 늘려서 웹 사이트 계층 구조가 너무 많이 올라갈 수 있기 때문에 많은 도움이되지 않습니다.
mpy

0

인터넷 보관소의 URL 형식에는 사이트가 보관 된 날짜 및 시간이 포함됩니다. 변경되지 않은 공간 자산을 절약하기 위해 이전 버전의 사이트로 다시 연결됩니다.

예를 들어이 URL http://web.archive.org/web/20000229123340/http://www.yahoo.com/ 에서 사이트 크롤링 날짜는 2000 년 2 월 29 일 12:33 및 40 초입니다.

따라서 모든 http://web.archive.org/web/20110722080716/http://cst-www.nrl.navy.mil/lattice/것을 시작하려면에서 시작해야하지만에서 연결된 모든 자산을 가져와야합니다 http://web.archive.org/web/*/http://cst-www.nrl.navy.mil/lattice/.


정확히, 그게 문제입니다. 페이지 A가 B에 연결한다고 가정 해 봅시다. 따라서 현재 버전 A는 이전 버전 B에 연결됩니다. 그러나 B에는 A에 대한 링크도 포함되어 있습니다. 따라서 이전 버전의 A도 검색되어 이전 버전으로 다시 연결됩니다. 이로 인해 (필요한 크롤링 깊이 4) 결과적으로 수십 가지 버전의 색인 페이지가 생길 수 있지만 필요한 파일이 모두있는 것은 아닙니다.
mpy

0

이미 더 잘하는 도구가 있습니다.

wayback_machine_downloader domain.org 

그것을 얻으려면 루비가 설치되어 있어야합니다. 그리고:

gem install wayback_machine_downloader
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.