Web ページからリンクを抽出する
Bun の HTMLRewriter API は、HTML コンテンツから効率的にリンクを抽出するために使用できます。これは、処理したい要素、テキスト、属性に一致するように CSS セレクターをチェーンすることで機能します。これは Web ページからリンクを抽出するシンプルな例です。.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 に変換する
ウェブサイトをスクレイピングする際は、相対 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 を絶対 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");Bun での HTML 変換に関する完全なドキュメントについては、ドキュメント > API > HTMLRewriter を参照してください。