Извлечение ссылок из веб-страницы
API HTMLRewriter в Bun можно использовать для эффективного извлечения ссылок из HTML-контента. Оно работает путём цепочки CSS-селекторов для сопоставления элементов, текста и атрибутов, которые вы хотите обработать. Это простой пример того, как извлекать ссылки из веб-страницы. Вы можете передать в .transform объект Response, Blob или 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);
}
},
});
// Дождаться обработки ответа
await rewriter.transform(response).blob();
console.log([...links]); // ["https://bun.com", "/docs", ...]
}
// Извлечь все ссылки с сайта Bun
await extractLinks("https://bun.com");Преобразование относительных URL в абсолютные
При парсинге сайтов вы часто хотите преобразовать относительные URL (например, /docs) в абсолютные URL. Вот как обработать разрешение URL:
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) {
// Преобразовать относительные URL в абсолютные
try {
const absoluteURL = new URL(href, url).href;
links.add(absoluteURL);
} catch {
links.add(href);
}
}
},
});
// Дождаться обработки ответа
await rewriter.transform(response).blob();
return [...links];
}
const websiteLinks = await extractLinksFromURL("https://example.com");Смотрите Документация > API > HTMLRewriter для полной документации по преобразованию HTML в Bun.