WGET에서 브라우저와 동일한 웹 페이지 html을 다운로드하는 방법


34

웹 브라우저 (IE 또는 Chrome)를 사용하여 Ctl-S를 사용하여 웹 페이지 (.html)를 저장하고 텍스트 편집기로 검사하고 테이블 형식의 데이터를 볼 수 있습니다. 그 숫자 중 하나를 추출하고 싶지만 많은 웹 페이지에서 너무 많아 수동으로 할 수 없습니다. 그래서 WGET을 사용하여 웹 페이지를 하나씩 가져오고 .html을 구문 분석하고 원하는 숫자를 검색하는 다른 프로그램을 작성하고 싶습니다. 그러나 브라우저와 동일한 URL을 사용할 때 WGET에 의해 저장된 .html 파일에는 데이터 테이블이 없습니다. 왜 안돼? 마치 서버가 웹 브라우저가 아닌 WGET에서 요청을 감지하고 데이터 테이블이없는 스켈레톤 웹 페이지를 제공하는 것처럼 서버가 감지합니다. WGET을 사용하여 동일한 웹 페이지를 어떻게 얻을 수 있습니까? - 고마워!

더 많은 정보:

가져 오려는 URL의 예는 다음과 같습니다. http://performance.morningstar.com/fund/performance-return.action?t=ICENX®ion=usa&culture=en-US 여기서 문자열 ICENX는 뮤추얼 펀드 시세 기호입니다. 여러 가지 티커 기호로 변경됩니다. 브라우저에서 볼 때 데이터 테이블을 다운로드하지만 WGET으로 페치하면 데이터 테이블이 누락됩니다.


어떤 URL입니까?
Braiam

2
초기 HTML은 테이블을 다운로드하고 채우는 자바 스크립트 조각으로 AJAX 기술을 사용하여 채워집니다. 이 경우 아마도이 스크립트를 호출하는 것이 더 나을 것입니다. Braiam이 묻는 것처럼 URL을 제공하면이를 파악하는 데 도움이 될 수 있습니다.
roadmr

1
ad 추가 정보 : 브라우저에서 소스 코드를 표시하면 원본 HTML (wget과 동일)이 표시되지 않고 javascript / ajax에 의해 HTML이 업데이트됩니다. 최신 브라우저는 일반 HTML 대신 생성 된 소스를 보여줍니다.
Vrata Blazek

답변:


39

마찬가지로 roadmr가 언급이 페이지 테이블은 자바 스크립트에 의해 생성된다. wget은 자바 스크립트를 지원하지 않으며 서버에서받은대로 (즉, 자바 스크립트 코드가 실행되기 전에) 페이지를 덤프하므로 테이블이 누락됩니다.

phantomjs 와 같은 자바 스크립트를 지원하는 헤드리스 브라우저가 필요합니다 .

$ phantomjs save_page.js http://example.com > page.html

save_page.js로 :

var system = require('system');
var page = require('webpage').create();

page.open(system.args[1], function()
{
    console.log(page.content);
    phantom.exit();
});

그런 다음 텍스트를 추출하려면 w3m으로 페이지를 렌더링하는 것이 가장 쉽습니다.

$ w3m -dump page.html

관심있는 항목을 덤프하도록 phantomjs 스크립트를 수정하십시오.



JS 생성 링크는 작동하지 않습니다
QkiZ

1
2018 : PhantomJS 프로젝트는 추후 공지가있을 때까지 중단됩니다 :(
1rq3fea324 's September

이 솔루션은 지정된 URL에서 페이지를 다운로드하기위한 것입니다. wget의 사이트 크롤링 메커니즘을 어떻게 파이프합니까? 또한 헤드리스 크롬에서 스크립트는 어떻게 생겼습니까?
Phil

10

당신은 전체 웹 사이트를 다운로드 할 수 있습니다 wget --mirror

예:

wget --mirror -p --convert-links -P ./LOCAL-DIR WEBSITE-URL

전체 웹 사이트를 다운로드하고 로컬보기가 가능할 때 실행하려는 위의 명령 줄

옵션 :

  • --mirror 미러링에 적합한 옵션을 켭니다.

  • -p 주어진 HTML 페이지를 올바르게 표시하는 데 필요한 모든 파일을 다운로드합니다.

  • --convert-links 다운로드 후 로컬보기를 위해 문서의 링크를 변환하십시오.

  • -P ./LOCAL-DIR 모든 파일과 디렉토리를 지정된 디렉토리에 저장합니다.

Wget 옵션에 대한 자세한 내용은이 기사를 참조하십시오. 예제가 포함 된 모든 wget 명령 정보 또는 Wget 's man page를 확인 하십시오 .


2
자바 스크립트로 렌더링 된 콘텐츠에서는 작동하지 않습니다. 이를 위해서는 레몬 스퀴즈가 대답 한대로 팬텀을 사용해야합니다.
Mattias

1
이 cmd는 모든 하위 URL도 살펴보고 지정된 웹 페이지를 렌더링하는 데 필요하지 않은 리소스를 다운로드합니다.
1rq3fea324 님은

3

대신 --recursiveURL의 모든 단일 링크를 "스파이더"하는 대신을 사용하십시오 --page-requisites. 그래픽 브라우저에서 설명하는 옵션과 동일하게 작동해야합니다.

       This option causes Wget to download all the files that are
       necessary to properly display a given HTML page.  This includes
       such things as inlined images, sounds, and referenced stylesheets.

       Ordinarily, when downloading a single HTML page, any requisite
       documents that may be needed to display it properly are not
       downloaded.  Using -r together with -l can help, but since Wget
       does not ordinarily distinguish between external and inlined
       documents, one is generally left with "leaf documents" that are
       missing their requisites.

자세한 내용 man wget--page-requisites옵션을 찾아보십시오 (man 페이지를 읽는 동안 "/"를 사용하여 검색).


2

요청 소스에 따라 서버의 답변이 다른 경우, 주로 요청 소스의 요청과 함께 제공되는 HTTP_USER_AGENT 변수 (단지 텍스트 문자열)로 인해 서버에 기술에 대한 정보를 제공합니다.


  1. 여기에서 브라우저 에이전트를 확인할 수 있습니다-> http://whatsmyuseragent.com

  2. WGET 매뉴얼에 따르면이 매개 변수는 작업을 수행해야합니다 --user-agent=AGENT.


이것이 도움이되지 않는 경우, 즉, 브라우저와 동일한 페이지를 얻기 위해 JavaScript 처리가 필요하거나 GET 매개 변수로 적절한 요청을 수행하여 서버가 페이지를 채우기 위해 JavaScript가 필요없는 응답을 준비합니다.

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