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

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

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

  • инструмент командной строки для одной загрузки торрента (например, wget или curl)
  • wget и curl сохранение веб-страницы в виде тарабарщины (зашифровано?)
  • Разница между «ping» и «wget» в отношении разрешения имени хоста
  • Wget: конвертировать ссылки и избежать повторной загрузки уже загруженных файлов?
  • Фиксирование типа mime на Ubuntu
  • Как сообщить wget для загрузки файлов с именами, закодированными url?
  • Вот в командной строке я использую: wget -P 20 -r -l 0 http://www.omardo.com/blog (мой собственный блог)

  • Разница между версиями wget
  • Как сообщить wget для загрузки файлов с именами, закодированными url?
  • Отправка HTML с помощью Mutt (или другого клиентского терминала)
  • Как исправить кодировку имени файла
  • Проблема с загрузкой Java JDK с помощью WGET на Ubuntu
  • Как поставить отметку времени с помощью: wget --output-file =
  • 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 - лучшая ОС в мире.