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

23

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

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

Пример URL, который я пытаюсь извлечь: Ссылка где строка ICENX является символом символа взаимного фонда, который я буду менять на любое из нескольких различных символов тика. Это загружает таблицу данных при просмотре в браузере, но таблица данных отсутствует, если она получена с помощью WGET.

    
задан user239598 27.01.2014 в 15:38
источник

5 ответов

31

Как отметил 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, чтобы просто свалить то, что вас интересует.

    
ответ дан lemonsqueeze 08.11.2014 в 12:04
7

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

Пример:

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

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

Параметры:

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

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

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

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

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

    
ответ дан GowriShankar 18.08.2014 в 14:24
2

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

    
ответ дан roadmr 27.01.2014 в 16:53
1

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

  1. Здесь вы можете проверить свой агент браузера - > Ссылка

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

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

    
ответ дан Esamo 27.01.2014 в 16:01
0

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

wget --recursive http://url.com
    
ответ дан Braiam 27.01.2014 в 15:46