Как получить WGET для загрузки точно такой же HTML-страницы, как браузер

С помощью веб-браузера (IE или Chrome) я могу сохранить веб-страницу (.html) с помощью Ctl-S, проверить ее в любом текстовом редакторе и просмотреть данные в табличном формате. Один из тех номеров, которые я хочу извлечь, но для многих, многих веб-страниц, слишком много, чтобы сделать вручную. Поэтому я хотел бы использовать WGET, чтобы получать эти веб-страницы одну за другой, и написать другую программу для анализа .html и получения нужного мне числа. Но файл .html, сохраненный WGET при использовании того же URL-адреса, что и браузер, не содержит таблицу данных. Почему бы и нет? Как будто сервер обнаруживает, что запрос поступает от WGET, а не от веб-браузера, и предоставляет скелетную веб-страницу без таблицы данных. Как я могу получить ту же самую веб-страницу с WGET? - Спасибо!

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ:

Пример URL, который я пытаюсь найти: http://performance.morningstar.com/fund/performance-return. action? t = ICENX & region = usa & culture = en-US где строка ICENX является символом тикера взаимного фонда, который я заменю на любой из ряда различных символов тикера. Это загружает таблицу данных при просмотре в браузере, но таблица данных отсутствует, если извлекается с помощью WGET.

34
задан 29 January 2014 в 08:30

5 ответов

Как roadmr отмеченный, таблица на этой странице сгенерирована JavaScript. wget не поддерживает JavaScript, он просто выводит страницу, как получено из сервера (т.е. перед любыми выполнениями кода JavaScript) и таким образом, таблица отсутствует.

Вам нужен бездисплейный браузер, который поддерживает JavaScript как 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 сценарий, чтобы просто вывести то, чем Вы интересуетесь.

39
ответ дан 29 January 2014 в 08:30

Вы можете загрузить полный веб-сайт, используя wget --mirror

Пример:

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

Приведенная выше командная строка, которую вы хотите выполнить, когда вы хотите загрузить полный веб-сайт и сделать его доступным для локального просмотра.

Опции:

  • --mirror включает опции, подходящие для зеркалирования.

  • -p загружает все файлы, необходимые для правильного отображения данной HTML-страницы.

  • --convert-links после загрузки преобразуйте ссылки в документе для локального просмотра.

  • -P ./LOCAL-DIR сохраняет все файлы и каталоги в указанном каталоге.

Подробнее о параметрах Wget Подробнее в этой статье: Обзор обо всех командах wget с примерами или проверить Справочную страницу Wget .

0
ответ дан 29 January 2014 в 08:30

Вместо --recursive, который будет просто «пауковать» каждую ссылку в вашем URL, используйте --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 (используйте «/» для поиска во время чтения страницы руководства).

0
ответ дан 29 January 2014 в 08:30

Если ответ сервера отличается в зависимости от запрашиваемого источника, это происходит главным образом из-за переменной HTTP_USER_AGENT (просто текстовая строка), которая предоставляется запросом из запрашивающего источника, информирующего сервер о технологии.


  1. Вы можете проверить ваш агент браузера здесь -> http://whatsmyuseragent.com

  2. Согласно WGET В ручном режиме этот параметр должен выполнять работу --user-agent=AGENT.


Если это не помогает, то есть может потребоваться обработка JavaScript, чтобы получить ту же страницу, что и браузер, или, возможно, соответствующий запрос с параметрами GET, чтобы сервер подготовил ответ, который не требует JavaScript для заполните страницу.

0
ответ дан 29 January 2014 в 08:30

Это параметр --recursive. Он загрузит все, иногда больше того, что вы хотите.

wget --recursive http://url.com
0
ответ дан 29 January 2014 в 08:30

Другие вопросы по тегам:

Похожие вопросы: