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

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

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

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

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); 
  • Как загрузить дубликаты изображений?
  • Как загрузить файлы с веб-страницы, указывающей на каталог?
  • Как запретить wget загружать списки каталога Apache в разных заказах?
  • Загружайте данные на веб-сайте (http) рекурсивно с помощью wget
  • make wget ссылается на локальную копию без избыточной загрузки файлов
  • Как загрузить все файлы, связанные с веб-сайтом с помощью wget
  • Использование / dev / tcp с прокси-сервером
  • синтаксическая ошибка в условном выражении при выполнении сценария оболочки?
  • Загрузка с динамически изменяющихся URL-адресов через скрипт
  • wget-файл, протоколирование вывода и отображение вывода в командной строке
  • Auth через wget работает, но не может перемещаться по веб-странице после него
  • Рекурсивный wget дает «недопустимый символ найден в заданном диапазоне»
  • Linux и Unix - лучшая ОС в мире.