Extraer enlaces de una página web
La API HTMLRewriter de Bun se puede usar para extraer enlaces de contenido HTML de manera eficiente. Funciona encadenando selectores CSS para coincidir con los elementos, texto y atributos que deseas procesar. Este es un ejemplo simple de cómo extraer enlaces de una página web. Puedes pasar a .transform una Response, Blob o string.
ts
async function extractLinks(url: string) {
const links = new Set<string>();
const response = await fetch(url);
const rewriter = new HTMLRewriter().on("a[href]", {
element(el) {
const href = el.getAttribute("href");
if (href) {
links.add(href);
}
},
});
// Esperar a que la respuesta sea procesada
await rewriter.transform(response).blob();
console.log([...links]); // ["https://bun.com", "/docs", ...]
}
// Extraer todos los enlaces del sitio web de Bun
await extractLinks("https://bun.com");Convertir URLs relativas a absolutas
Al hacer scraping de sitios web, a menudo deseas convertir URLs relativas (como /docs) a URLs absolutas. Aquí te mostramos cómo manejar la resolución de URLs:
ts
async function extractLinksFromURL(url: string) {
const response = await fetch(url);
const links = new Set<string>();
const rewriter = new HTMLRewriter().on("a[href]", {
element(el) {
const href = el.getAttribute("href");
if (href) {
// Convertir URLs relativas a absolutas
try {
const absoluteURL = new URL(href, url).href;
links.add(absoluteURL);
} catch {
links.add(href);
}
}
},
});
// Esperar a que la respuesta sea procesada
await rewriter.transform(response).blob();
return [...links];
}
const websiteLinks = await extractLinksFromURL("https://example.com");Consulta Documentación > API > HTMLRewriter para documentación completa sobre la transformación de HTML con Bun.