wget – Как загрузить рекурсивно и только определенные типы / расширения mime (т. е. только текст)

Как загрузить полный веб-сайт, но игнорируя все двоичные файлы.

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

Вот в командной строке я использую: wget -P 20 -r -l 0 http://www.omardo.com/blog (мой собственный блог)

  • Загрузите файл yesterdays с FTP-сервера
  • Доступ к Google-трансляции через wget
  • Преобразование ссылок загруженного веб-сайта
  • Как обновить автономный веб-сайт с помощью wget для настройки расширений и конвертации ссылок?
  • Wget не загружает изображения в рекурсивную загрузку
  • Загрузить файл с фактическим именем wget
  • Как я могу использовать wget для создания списка URL-адресов из index.html?
  • После загрузки файла .asp или .php его можно преобразовать в .html-файл?
  • 3 Solutions collect form web for “wget – Как загрузить рекурсивно и только определенные типы / расширения mime (т. е. только текст)”

    Вы можете указать список разрешенных или. запрещенные шаблоны имен файлов:

    Позволил:

     -A LIST --accept LIST 

    Недопустимое:

     -R LIST --reject LIST 

    LIST – это список шаблонов / расширений имен файлов, разделенных запятыми.

    Для указания шаблонов вы можете использовать следующие зарезервированные символы:

    • *
    • ?
    • [
    • ]

    Примеры:

    • скачать PNG-файлы: -A png
    • не загружайте файлы CSS: -R css
    • Не загружайте PNG-файлы, начинающиеся с «avatar»: -R avatar*.png

    Если файл не имеет расширения или. имя файла не имеет шаблона, который вы могли бы использовать, вам нужен синтаксический анализ типа MIME, я думаю (см. ответ Ларса Коттоффа ).

    Вы можете попробовать установить wget с этим (также здесь ), чтобы фильтровать по типу MIME. Однако этот патч довольно старый, так что он больше не работает.

    Я пробовал совершенно другой подход – использовать Scrapy, однако у него такая же проблема! Вот как я это решил: SO: Python Scrapy – фильтр на основе mimetype, чтобы избежать загрузки нетекстовых файлов?

    Решение заключается в настройке прокси-сервера Node.js и настройке Scrapy для использования через http_proxy окружения http_proxy .

    Что должен сделать прокси-сервер :

    • Возьмите HTTP-запросы от Scrapy и отправьте их на обход сервера. Затем он возвращает ответ от Scrapy, т.е. перехватывает весь HTTP-трафик.
    • Для двоичных файлов (на основе эвристики, которую вы реализуете) она отправляет 403 Forbidden error в Scrapy и немедленно закрывает запрос / ответ. Это помогает сэкономить время, трафик и Scrapy не сбой.

    Пример кода прокси-сервера, который действительно работает!

     http.createServer(function(clientReq, clientRes) { var options = { host: clientReq.headers['host'], port: 80, path: clientReq.url, method: clientReq.method, headers: clientReq.headers }; var fullUrl = clientReq.headers['host'] + clientReq.url; var proxyReq = http.request(options, function(proxyRes) { var contentType = proxyRes.headers['content-type'] || ''; if (!contentType.startsWith('text/')) { proxyRes.destroy(); var httpForbidden = 403; clientRes.writeHead(httpForbidden); clientRes.write('Binary download is disabled.'); clientRes.end(); } clientRes.writeHead(proxyRes.statusCode, proxyRes.headers); proxyRes.pipe(clientRes); }); proxyReq.on('error', function(e) { console.log('problem with clientReq: ' + e.message); }); proxyReq.end(); }).listen(8080); 
    Linux и Unix - лучшая ОС в мире.