在Node.js环境中使用jQuery选择器需要理解几个关键点:
const jsdom = require("jsdom");
const { JSDOM } = jsdom;
const { window } = new JSDOM(`<!DOCTYPE html><p>Hello world</p>`);
const $ = require("jquery")(window);
// 使用jQuery选择器
$("p").text("Hello Node.js!");
console.log($("p").text()); // 输出: Hello Node.js!
const cheerio = require('cheerio');
const $ = cheerio.load('<html><body><p>Hello world</p></body></html>');
// 使用类似jQuery的选择器
$('p').text('Hello Node.js!');
console.log($('p').text()); // 输出: Hello Node.js!
| 方案 | 优点 | 缺点 | 适用场景 | |---------|-----------------------------|-----------------------------|----------------------------| | jsdom | 完整DOM模拟,支持完整jQuery功能 | 较重,性能较低 | 需要完整DOM操作和浏览器环境模拟 | | cheerio | 轻量快速,API类似jQuery | 不完整DOM模拟,部分jQuery功能缺失 | 简单HTML解析和操作 |
原因:jsdom默认不加载外部资源(如图片、样式表) 解决:配置jsdom参数
const { JSDOM } = require("jsdom");
const dom = new JSDOM(`<script src="external.js"></script>`, {
runScripts: "dangerously",
resources: "usable"
});
原因:HTML结构可能不符合预期 解决:先检查HTML内容
console.log($.html()); // 输出当前DOM结构
建议:对于大量HTML处理,使用cheerio而非jsdom+jQuery组合
const axios = require('axios');
const cheerio = require('cheerio');
async function scrapeWebsite(url) {
try {
const { data } = await axios.get(url);
const $ = cheerio.load(data);
const titles = [];
$('h1, h2, h3').each((i, elem) => {
titles.push($(elem).text());
});
return titles;
} catch (error) {
console.error('Error:', error);
}
}
scrapeWebsite('https://example.com').then(titles => console.log(titles));
通过以上方法,您可以在Node.js环境中有效地使用类似jQuery的选择器功能来处理HTML内容。
没有搜到相关的文章