Wget을 사용하여 웹사이트의 완전한 로컬 사본을 생성하세요

Wget을 사용하여 웹사이트의 완전한 로컬 사본을 생성하세요

좋습니다. 필요한 것은 다음과 같습니다.

  • 저는 Mac을 사용하고 있습니다(Mac OS X 10.6.8).
  • 내 하드 드라이브에 웹사이트를 완전히 미러링하고 싶습니다(이것은내가 테스트로 사용하는 것)
  • 오프라인에서도 웹사이트를 탐색할 수 있도록 모든 이미지와 필수 구성 요소가 거기에 있어야 합니다.
  • 모든 페이지의 상대 링크가 그에 따라 업데이트되기를 원합니다.
  • (* 선택사항) .html모든 파일에 대한 확장자는 브라우저에서 쉽게 인식하고 열 수 있도록 하면 좋을 것입니다.

이것이 내가 사용하는 것입니다 :

wget --recursive --no-clobber --page-requisites --convert-links --html-extension --domains wikispaces.com http://chessprogramming.wikispaces.com/

문제는 다음과 같습니다.

  • .css파일과 이미지 등이 다운로드되지 않는 것 같습니다. 적어도 실행 중인 수준까지는(좋아요, 어쩌면 다운로드될 수도 있습니다)~일 것이다프로세스가 완료되면 다운로드되므로 이 단계는 건너뛸 수 있습니다.)
  • HTML 확장자가 추가되지 않습니다
  • 링크는 변환되지 않습니다

그럼... 어떤 아이디어라도 있나요?

답변1

우선, 이것은 OS X만의 문제인 것 같습니다. Ubuntu 14.04 LTS에서 위 명령을 사용할 수 있으며 즉시 작동합니다! 몇 가지 제안:

.css파일 및 이미지 등이 다운로드되지 않는 것 같습니다. 적어도 실행 중인 수준까지는 다운로드됩니다(좋아요, 프로세스가 완료되면 다운로드될 수도 있으므로 이 항목은 건너뛸 수 있습니다).

  1. 라고 말하면 --domains wikispaces.com다른 도메인에 있는 링크된 CSS 파일을 다운로드하지 않게 됩니다. 해당 웹사이트의 스타일시트 중 일부는 http://c1.wikicdn.com의 소스를 암시하는 대로 위치합니다 index.html.

  2. 일부 웹사이트에서는 해당 링크를 사용하여 링크된 파일(참조 이미지)에 직접 액세스하는 것을 허용하지 않습니다(참조이 페이지). 홈페이지를 통해서만 보실 수 있습니다. 하지만 여기서는 그렇지 않은 것 같습니다.

  3. Wget은 HTML을 구문 분석하는 동안 주석을 인식하지 못하는 것 같습니다. Wget이 실행 중일 때 다음이 표시됩니다.

    --2016-07-01 04:01:12--  http://chessprogramming.wikispaces.com/%3C%25-%20ws.context.user.imageUrlPrefix%20%25%3Elg.jpg
    Reusing existing connection to chessprogramming.wikispaces.com:80.
    HTTP request sent, awaiting response... 404 Not Found
    2016-07-01 04:01:14 ERROR 404: Not Found.
    

    브라우저에서 링크를 열면 로그인 페이지로 이동합니다. 파일 이름을 보면 해당 내용이 댓글 어딘가에서 발생했음을 알 수 있습니다.

  4. 많은 사이트에서는 다운로드 관리자를 사용한 다운로드를 허용하지 않으므로 HTTP 요청을 시작한 클라이언트(브라우저 또는 서버에서 파일을 요청하는 데 사용한 클라이언트 포함)를 확인합니다.

    -U somebrowser클라이언트를 위조하고 브라우저인 것처럼 가장하는 데 사용됩니다 . 예를 들어 -U mozillaMozilla/Firefox가 페이지를 요청하고 있음을 서버에 알리기 위해 추가할 수 있습니다. 그러나 이 인수 없이 사이트를 다운로드할 수 있으므로 여기서는 문제가 되지 않습니다.

  5. 다운로드 및 요청 속도가 중요합니다. 서버는 사이트에서 데이터를 요청하는 로봇으로 인해 성능이 부풀어오르는 것을 원하지 않습니다. Wget에서 --limit-rate=및 인수를 사용하여 --wait=다운로드 속도를 제한하고 개별 파일에 대한 가져오기 요청 생성 사이에 몇 초간 기다립니다.

    예를 들어

    wget -r --wait=5 --limit-rate=100K <other arguments>
    

    요청 가져오기 사이에 5초를 기다리고 다운로드 속도를 100Kbps로 제한합니다. 다시 한 번 말하지만, 서버에서 웹사이트를 가져오기 위해 다운로드 속도를 제한할 것을 요구하지 않았기 때문에 여기서는 이것이 문제가 되지 않습니다.

여기서 가장 가능한 경우는 (1)이다. --domains wikispaces.com을(를) 교체 --domains *하고 다시 시도하세요. 우리가 어디로 가는지 봅시다. 최소한 CSS 파일을 가져올 수 있어야 합니다.

HTML 확장자가 추가되지 않습니다

명령을 실행하면 HTML 확장이 추가됩니다.

링크는 변환되지 않습니다

여기에서 제가 완전히 옳다고 생각하지는 않지만 사이트를 미러링할 때 링크가 즉시 작동할 것이라고 기대하지 마십시오.

HTTP 가져오기 요청에 인수를 전달하면(예: http://chessprogramming.wikispaces.com/wiki/xmla?v=rss_2_0인수가 있음 v=rss_2_0) 요청은 서버에서 실행되는 일부 스크립트(예: PHP)로 처리됩니다. 인수는 인수에 따라 올바른 스크립트 버전을 가져오는 데 도움이 됩니다. 기억하세요, 사이트, 특히 PHP에서 실행되는 Wiki를 미러링할 때 정확히 다음을 수행할 수는 없습니다.거울원본 PHP 스크립트를 가져오지 않는 한 사이트. PHP 스크립트에서 반환된 HTML 페이지는 해당 스크립트에서 볼 수 있는 페이지의 한 면일 뿐입니다. 올바른 알고리즘은생성하다페이지는 서버에 저장되며 HTTP로는 수행할 수 없는 원본 PHP 파일을 가져오는 경우에만 올바르게 미러링됩니다. 이를 위해서는 서버에 대한 FTP 액세스가 필요합니다.

도움이 되었기를 바랍니다.

답변2

옵션 1부터user612013의 답변제 경우에는 확실히 문제였습니다. 사실 내가 https://censoreddomain.com대신 요청했기 때문에 문제가 발생했을 뿐입니다 https://www.censoreddomain.com.www.). 을 추가한 후에 www.wget전체 사이트를 기꺼이 긁어냈습니다. 그래서 중요한 것은스크랩하려는 도메인의 정식 이름과 정확히 일치합니다..

실수는 내 것이기 때문에 이 "catch"는 wgetOS X뿐만 아니라 모든 플랫폼 에 적용된다고 생각합니다.

관련 정보