ZBLOG

JS浏览器有什么好用的解析库,可以解析html字符串获取所有的href,action,src url

在JavaScript中,解析HTML字符串并提取链接(hrefactionsrc等属性)时,可以使用以下工具库或原生API:


1. 浏览器原生API(无需第三方库)

DOMParser

const parser = new DOMParser();
const doc = parser.parseFromString(htmlString, "text/html");

// 提取所有链接
const links = Array.from(doc.querySelectorAll("[href], [src], [action]"));
links.forEach(element => {
  const href = element.getAttribute("href") || element.getAttribute("src") || element.getAttribute("action");
  console.log(href);
});

优点:无需依赖第三方库,兼容现代浏览器。
缺点:需要手动处理相对路径转绝对路径。

URL API(补全相对路径)

const baseUrl = "https://example.com";
const absoluteUrl = new URL(relativePath, baseUrl).href;

2. 第三方解析库

Cheerio(Node.js环境推荐)

类似jQuery的语法,适合服务端解析:

const cheerio = require('cheerio');
const $ = cheerio.load(htmlString);

$('[href], [src], [action]').each((i, elem) => {
  const url = $(elem).attr('href') || $(elem).attr('src') || $(elem).attr('action');
  console.log(url);
});

优点:轻量级,API友好。
缺点:仅限Node.js环境使用。

JSDOM(浏览器/Node.js通用)

模拟完整DOM环境:

const { JSDOM } = require('jsdom');
const dom = new JSDOM(htmlString);
const document = dom.window.document;

document.querySelectorAll('[href], [src], [action]').forEach(el => {
  const url = el.href || el.src || el.action;
  console.log(url);
});

优点:支持完整的DOM操作。
缺点:体积较大。

Linkify(专注URL提取)

专门用于从文本/HTML中提取URL:

import linkify from 'linkifyjs';
const links = linkify.find(htmlString);
console.log(links.map(link => link.href));

优点:精准识别文本中的URL。
缺点:不处理HTML标签属性。


3. 注意事项

  • 相对路径转绝对路径:使用 new URL(relativePath, baseUrl).href
  • 过滤无效值:排除 javascript:void(0) 或空属性。
  • 去重: 用 Set 存储结果避免重复。

完整示例(浏览器环境)

function extractUrlsFromHtml(htmlString, baseUrl) {
  const parser = new DOMParser();
  const doc = parser.parseFromString(htmlString, "text/html");
  const urls = new Set();

  doc.querySelectorAll('[href],[src],[action]').forEach(el => {
    let url = el.getAttribute('href') || el.getAttribute('src') || el.getAttribute('action');
    if (url && !url.startsWith('javascript:')) {
      urls.add(new URL(url, baseUrl).href); // 转为绝对路径
    }
  });

  return Array.from(urls);
}

// Usage
const htmlSnippet = `
<a href="/about">About</a>
<img src="image.png">
<form action="/submit"></form>
`;
console.log(extractUrlsFromHtml(htmlSnippet, "https://example.com"));
// Output: ["https://example.com/about", "https://example.com/image.png", "https://example.com/submit"]

根据你的运行环境(浏览器/Node.js)和需求选择合适的方法即可!


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=23128

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?