LINUX.ORG.RU

Старая тема про скачивание содержимого сайтов

 , ,


0

2

Всем доброго.
wget, curl, php скрипты, всевозможные ключи, при помощи которых можно очень выборочно качать содержимое разных web ресурсов - это все здорово. Но вот картинка, как пример, коих тонны на многих сайтах - страница имеет определенное содержимое. Картинки, ссылки, текст и прочие. Сторона сервера генерит определенный код для клиента и тот все это дело скачивает в html etc. Со структурой.
Качаем условную заглавную страницу какого-нибудь сайта со всей этой структурой, а затем клиент (wget, или какая другая программа) переходит по ссылке на другую страницу сайта, где !!! мы видим все то же самое содержимое (ну, к примеру, сайт устроен так, что разные менюшки, списки ссылок есть на каждой странице сайта и они ! одинаковые) за исключением лишь определенной полоски условной «новости». А wget, или какая другая программа будет заново качать вообще всю страницу! Если страниц десятки тысяч, то программа будет качать каждую страницу, которая ладно, что будет весить каждая по мегабайту из-за оформления, пусть и одинакового для всего сайта, но это займет еще и тонну времени.
На стороне сервера может быть все просто - php сгенерил код и всё, а качалка будет его каждый раз снова тащить - один и тот же код.
Просто на столько давно изучал эту всю тему, что даже не представляю себе, с чего начать, что бы решить вопрос монстроуозности подхода, так как гугл банально отдает результаты любые, но только не по решению вопроса, как скачать основное содержимое лишь один раз, если это php.

Решения, вообще, существуют, или тут без данных серверной стороны не через web не обойтись?

★★★

Ну если ты включишь понимание того, что делаешь, то вопрос отпадет сам собой.

Все качалки сайтов понятия не имеют, что там на серверной стороне, они видят только HTML (и хорошо еще, если это не Vue или Angular, которые страницу генерят на лету прямо в браузере, и часто даже файрфокс офигевает и пишет, что нечего показать, когда смотришь сорцы страницы).

И качает он тоже только содержимое, доступное по ссылке.

А анализ содержимого, выделение меню и прочего, инклуды этого друг в друга — это уже серверное.

Если тебе просто для бэкапа — при упаковке в архив, возможно, архиватор сделает за тебя работу и одинаковые элементы будут сжаты до размеров одного элемента, но не факт (я не особо спец в алгоритмах сжатия).

Zhbert ★★★★★
()
Ответ на: комментарий от Zhbert

таких сайтов и без ИИ навалом :)
периодически на такие натыкаюсь. посередине явная копипаста с какогото сайта с умным содержимым, а вокрест умного куча рекламы.

pfg ★★★★★
()
Ответ на: комментарий от pfg

Ну у них там, если речь про GUI качалки, Offline Explorer. На руборде можно спросить, но и в мыслях нет понимания - а что клиент такого сможет, что бы обойти момент генерации страницы уже в «статику».

ESTAF ★★★
() автор топика
Ответ на: комментарий от ESTAF

Ничего он не сможет. Он увидит тот же готовый HTML, если увидит, вообще. Потому что для этого ему надо обладать движком JS, которого во wget нет, само собой. Так что максимум он увидит портянку «собранного» скрипта — нечитабельное нечто.

Zhbert ★★★★★
()

будет качать каждую страницу, которая ладно, что будет весить каждая по мегабайту из-за оформления

Нет, картинки будут находится по одному и тому же адресу, и не будут дублироваться.

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

goingUp ★★★★★
()
Ответ на: комментарий от goingUp

В общем случае задача не решается, но ты можешь передать wget или другой качалке какие-то регэкспы, которые будут отсеивать дублирующие страницы, допустим если есть гет параметр - сортировка, и т.д.
Да, но что бы узнать с дублем ли мы имеем дело, его нужно проанализировать - то есть, скачать. Пусть и удалить потом. Наверное, можно как-то отрисовать сайт иначе при помощи chrome devtools и построив свой dom, уже качать. Но вообще ни ногой, как это и можно ли вообще использовать chrome devtools. Ну, наверное где-то в докере пустить хром в режиме разработчика итц. С иксами, что не под видеокарты.

ESTAF ★★★
() автор топика
Ответ на: комментарий от ESTAF

его нужно проанализировать

Нет, я про фильтр страниц по урлу, не скачивая.

Скачать само по себе вообще не проблема, большая часть веса странички не html, а css, js, картинки. Но если ты будешь слишком много качать страниц в единицу времени, тебя забанит антиддос. Ну и с анализом скачаного на дубли тоже будут проблемы.

Наверное, можно как-то отрисовать сайт

Для того, чтобы отрисовать страничку, браузеру ее ВНЕЗАПНО нужно скачать, и потом еще отрендерить, т.е. работы больше, чем просто скачать.

goingUp ★★★★★
()
Последнее исправление: goingUp (всего исправлений: 1)
Ответ на: комментарий от goingUp

Страницы могут быть однотипные. Список ссылок, всякие сео темы и прочие, повторяющиеся на любой из страниц, помимо уникального содержимого - лишь маленькая часть может отличаться от главной страницы - разделы сайта. И это уже не дубли. А каждая такая страница может весить под метр, если ее качать. Если страниц штук под 100к, то уже 100 гиг на ровном месте.

ESTAF ★★★
() автор топика

Если бы мне надо было сделать что-то для скачивания совершенно разных сайтов, то скорей всего я бы использовал это:

https://github.com/website-scraper/website-scraper-puppeteer

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

anonymous_sama ★★★★★
()
Последнее исправление: anonymous_sama (всего исправлений: 1)

программа будет качать каждую страницу

Пусть программа качает в несколько потоков. У меня сейчас около 20 тысяч висит, если на голом курле, и сильно меньше если на пюпитре. А вопрос то в чем конкретно?

easybreezy
()