Como clonar um site baixar arquivos HTML, CSS, JS, imagens e HTML usando Node.js?
clonar site node js
Você pode utilizar a biblioteca node-fetch para fazer requisições HTTP e o módulo fs para salvar os arquivos localmente.
npm install node-fetch
Em seguida, você pode utilizar o seguinte código para fazer a requisição HTTP para o site desejado e salvar os arquivos localmente:
const fetch = require('node-fetch');
const fs = require('fs');
const url = 'https://dominiodosite.com';
const outputDir = './pastalocal';
fetch(url)
.then(res => res.text())
.then(body => {
fs.mkdirSync(outputDir, { recursive: true });
fs.writeFileSync(`${outputDir}/index.html`, body);
const regex = /<link.*?href="(.*?)".*?>/g;
let match;
while (match = regex.exec(body)) {
const cssUrl = new URL(match[1], url).href;
fetch(cssUrl)
.then(res => res.text())
.then(css => {
const cssFilename = cssUrl.split('/').pop();
fs.writeFileSync(`${outputDir}/${cssFilename}`, css);
});
}
const regex2 = /<script.*?src="(.*?)".*?>/g;
while (match = regex2.exec(body)) {
const jsUrl = new URL(match[1], url).href;
fetch(jsUrl)
.then(res => res.text())
.then(js => {
const jsFilename = jsUrl.split('/').pop();
fs.writeFileSync(`${outputDir}/${jsFilename}`, js);
});
}
const regex3 = /<img.*?src="(.*?)".*?>/g;
while (match = regex3.exec(body)) {
const imgUrl = new URL(match[1], url).href;
fetch(imgUrl)
.then(res => res.buffer())
.then(img => {
const imgFilename = imgUrl.split('/').pop();
fs.writeFileSync(`${outputDir}/${imgFilename}`, img);
});
}
})
.catch(err => console.error(err));
Neste exemplo, o código faz uma requisição HTTP para a URL desejada e salva o conteúdo HTML no arquivo index.html. Em seguida, ele utiliza expressões regulares para encontrar todos os links para arquivos CSS, JS e imagens no HTML e faz requisições HTTP para cada um deles. Os arquivos são salvos localmente na pasta especificada em outputDir.
Leia mais em: odejs.org/en