Задача стояла скопировать верстку главной страницы одного сайта. Изначально использовал wget, но он не цеплял важные файлы, которые грузились с другого домена. Файлов ~150 и хотелось сохранить струкутуру домен/../../../file.css. Решил, что полюбому на Node.js что-то такое можно сделать(Node.js потому что чуть чуть умею в js). Нашел модуль на js .
Написал код:
'use strict';
const fs = require("fs");
const wget = require('wget-improved');
let htmlContent = fs.readFileSync("sun.html", "utf8");
let result = htmlContent.match(/"https:\/\/g.+?"/g) || [];
console.log(result);
function httpGet(url) {
const options = {
protocol: 'https'
};
let src = url.replace(/\"/g, "");
let output = "./" + url.replace('https://', '').replace(/\"/g, "");
console.log(output);
let download = wget.download(src, output, options);
download.on('error', function(err) {
});
download.on('start', function(fileSize) {
console.log(fileSize);
});
download.on('end', function(output) {
console.log(output);
});
download.on('progress', function(progress) {
typeof progress === 'number'
});
}
result.forEach((item) => {
httpGet(item);
});
console.log('Done');
Запускаю, а он
node:events:353
throw er; // Unhandled 'error' event
^
Error: ENOENT: no such file or directory, open
А почему я должен создавать, нормально же общались. В доке:
const wget = require('wget-improved');
const src = 'http://nodejs.org/images/logo.svg';
const output = '/tmp/logo.svg';
const options = {
// see options below
};
let download = wget.download(src, output, options);
download.on('error', function(err) {
console.log(err);
});
download.on('start', function(fileSize) {
console.log(fileSize);
});
download.on('end', function(output) {
console.log(output);
});
download.on('progress', function(progress) {
typeof progress === 'number'
// code to show progress bar
});
Для создания файлов с нужным расширением нужно будет куча кода писать. Можно ли как-то обойтись малой кровью в данном случае. С путями и формируемыми ссылками из html все ок.