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

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

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

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

  • WGET Продолжить без --no-check-certificate
  • Проблемы рекурсии wget
  • Использование wget, Какая правильная команда для получения gzip-версии вместо фактического HTML
  • Могу ли я доверять статусу выхода wget, даже если он был перезапущен?
  • Найти рекурсивный поиск Grep
  • cURL и wget не могут разрешать хосты, но apt-get работает
  • Есть ли способ отключить wget от получения файлов из родительских каталогов до заданной глубины?
  • Как получить все файлы определенного типа из виртуального веб-пути?
  • 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 - лучшая ОС в мире.