Сайт на фреймах как скачать?

Изображение пользователя Vorobey.

Как с помощью wget загрузить вэб контент?
например вот:wget http://frame.free.nanoquant.ru/

ps если кому известен код для grab или scrapy буду рад посмотреть.

+1
MacLeod - 22 Март, 2017 - 16:49
Изображение пользователя MacLeod.

Если посмотреть исходник индексного файла, то увидим:

Вот lefter.html, center.html и т.д. - это и есть составляющие фреймов.
Чтобы автоматизированно их скачать, можно распарсить индексную страницу, получить их имена и скачать...

Вот, набросал на .NET Core за 20 минут - https://github.com/MacLeodRu/FramesDownloader/blob/master/FramesDownloader/Program.cs.
Использовал для парсинга HTML индексной страницы либу CsQuery (строки 60 и 63). И асинхронный подход для многопоточного скачивания страниц-фреймов.

Для экспериментов можете поставить .NET Core for Linux, скачать мой "проект" с гитхаба и запустить командами:
cd каталог_проекта
dotnet restore
dotnet run

0
kot040188 - 22 Март, 2017 - 19:43
Изображение пользователя kot040188.

Вот это рвение…

+1
AlexBKost - 23 Март, 2017 - 19:36

Кот, ты ни у этого дядьки аватар потырил? Или он у тебя?

0
kot040188 - 23 Март, 2017 - 20:26
Изображение пользователя kot040188.

Нет, это он у меня. Вот гад…

0
AlexBKost - 23 Март, 2017 - 21:05

Охотно верю ...

+6
MacLeod - 23 Март, 2017 - 21:49
Изображение пользователя MacLeod.

Лучше бы этот дядька у кота аккаунт на кубунту.ру стырил :)

+1
leisampei - 24 Март, 2017 - 10:21
Изображение пользователя leisampei.

это он у меня
Как знать... ;)

0
kot040188 - 24 Март, 2017 - 11:23
Изображение пользователя kot040188.

Эту картинку ещё мой дед использовал!

0
Vorobey - 23 Март, 2017 - 00:13
Изображение пользователя Vorobey.

То-есть для того что-бы скачать сайт на фреймах - необходимо парсить их все фреймсеты и собирать обратно страницу, как единую?
Дело в том, что мой "паук"(Grab) ходит по страницам и собирает данные в xml - работает на любом сайте, только не на фреймах! Но это пол беды.
Когда дело доходит до авторизации, происходит магия в разных фреймах и куки черти как выдаются.
Все это в кучу собрать не смог. Консоль браузера ничего сверх естественного не показывает...
Мне стало интересно - почему команда wget получает "отворот - поворт" и не только она.

спасибо за код - я просто его не осилю. Он понятен, но масса мелочевки...утону в нем...

+1
MacLeod - 23 Март, 2017 - 13:12
Изображение пользователя MacLeod.

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

Когда вы видите фреймы в браузере, это означает, что открыта индексная страница, содержащая frameset, в котором описаны источники содержимого для каждого фрейма. Источником может быть как статический .html файл, лежащий на том же сервере, где индексный, может быть скрипт, который как-то генерит HTML, а может и вовсе статический файл или скрипт, который лежит вообще на другом сервере, например, можно сделать сайт, где в одном из фреймов будет загружаться kubuntu.ru.

Что происходит при открытии браузером такого сайта:
1) GET запрос на индексный файл. Когда вы указываете в браузере http://frame.free.nanoquant.ru/, это значит что браузер сделает GET запрос / (просто косая черта) на вебхост frame.free.nanoquant.ru, используя протокол HTTP. В соответствие настройкам веб-сервера, в ответ на такой запрос будет отдано содержимое индексного файла (index.htm, index.html, сгенеренный с помощью index.php и т.д.).
Поведение WGET в данном случае тоже ни разу не странное. При выполнении
wget http://frame.free.nanoquant.ru/
веб-сервер отдаст ему содержимое index.html, в котором только frameset и уведомление, на случай если браузер не поддерживает фреймы.
2) Браузер парсит frameset из индексного файла и делает отдельный GET запрос для получения содержимого каждого фрейма.

В данном случае следующие запросы:
GET /header.html
GET /lefter.html
GET /center.html
GET /righter.html
GET /footer.html

каждый раз подключаясь к хосту frame.free.nanoquant.ru по HTTP. После чего отображает их содержимое в отведенных во frameset областях.
WGET этого уже не делает, его выполнение заканчивается на скачивании индексной страницы.

Фрейм во frameset может быть описан как сторонний источник:
<frame src="https://kubuntu.ru/node/14189" noresize>

Фрейм может получать данные из скрипта, а не статики:
<frame src="center.php" noresize>
и запрос будет выглядеть как
GET /center.php
В таком случае, для корректного обращения с авторизацией, в зависимости от ее реализации на серваке, нужно передавать куки в заголовке, либо сеансовую переменную в GET запросе, либо как-то еще.

В случае Grab вам нужно делать
g.go(url)
не только к индексной странице, но и для получения содержимого каждого фрейма. Соответственно с верной передачей куки и прочего.

Отправить комментарий

CAPTCHA на основе изображений
Введите цифры