Wget을 사용하여 웹 사이트의 전체 로컬 복사본 만들기


6

좋아요, 여기 제가 필요한 것입니다 :

  • 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 확장 기능이 추가되지 않았습니다.
  • 링크가 변환되지 않습니다.

그래서 ... 어떤 아이디어?


나는 비슷한 문제가있다. wget 1.18에서 OS X 10.10 사용. 난 달린다 wget -mkpr https://consoreddomain.com 내가 얻는 것은 그 안에 하나의 index.html 페이지가있는 디렉토리입니다. 이것이 답변을받을 수 있다면 좋을 것입니다.
Julian

나는 과거에 이런 일을했고 일부 wget 기반 솔루션을 버리고 설치를 끝내기도했다. Heretrix (오픈 소스). 설정하기가 다소 어려웠지만 사이트를 보관하는 데 훌륭한 역할을했습니다.
GuitarPicker

@ Dr.Kameleon Um ... wget은 OSX에서 많은 버그가있는 것 같습니다. cURL을 사용하여 대체 답변을 원하십니까?
rahuldottech

@ 율리안 OSX에서 문제를 해결할 수 없다면 언제나 할 수 있습니다. "브레이크를 풉니 다. . Ubuntu 라이브 시스템 (펜 드라이브) 또는 가상 머신을 사용하여 다운로드하십시오. :-) 두 번째는 많은 다른 목적을 위해 안락 할 수 있습니다.
Hastur

답변:


3

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

.css 파일 및 이미지 등을 다운로드하지 않는 것 같습니다. 적어도 실행중인 상태 (ok, 아마도 프로세스가 완료되면 다운로드 될 수 있으므로이 단계를 건너 뛸 수 있습니다)

  1. 당신이 말할 때 --domains wikispaces.com, 다른 도메인에있는 링크 된 CSS 파일을 다운로드하지 않을 것입니다. 해당 웹 사이트의 스타일 시트 중 일부는 http://c1.wikicdn.com as 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.

브라우저에서 링크를 열면 로그인 페이지로 이동합니다. 파일 이름은 주석의 어딘가에서 발생했음을 나타냅니다.

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

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

  1. 다운로드 및 요청 비율은 중요합니다. 서버는 사이트에서 데이터를 요청하는 로봇에 의해 성능이 부풀려지는 것을 원하지 않습니다. 용도 --limit-rate=--wait= 다운로드 속도를 제한하고 개별 파일에 대한 요청을 생성하는 사이에 몇 초 기다리는 Wget의 인수.

예 :

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

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

여기서 가장 가능한 경우는 (1)입니다. 교체 --domains wikispaces.com--domains * 다시 시도하십시오. 우리가 어디 있는지 보자. 최소한 CSS 파일을 가져올 수 있어야합니다.

HTML 확장 기능이 추가되지 않았습니다.

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

링크가 변환되지 않습니다.

내가 여기서 완전히 맞으면 생각하지 않지만 사이트를 미러링 할 때 링크가 작동 할 것으로 기대하지 마십시오.

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

희망이 도움이됩니다.


1

러시아 소유즈 로켓 (Soyuz Rocket)의 대답 1은 제 경우의 문제였습니다. 사실, 요청했기 때문에 잘못되었습니다. https://censoreddomain.com 대신에 https://www.censoreddomain.com ( www. ). 일단 내가 www., wget 행복하게 나를 위해 전체 사이트를 긁어 냈다. 그래서 중요한 것은 귀하가 긁어 모으려고하는 도메인의 정식 이름과 정확히 일치해야합니다. .

실수는 내 것이기 때문에이 "캐치"가 wget OS X뿐 아니라 모든 플랫폼에서 사용할 수 있습니다.


좋은 지적! OS X 또는 우분투?
U. Muneeb

Dr. Kameleon처럼 OS X을 사용하고있었습니다.
Julian
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.