Python中BeautifulSoup的findAll方法的JavaScript替代方案是什么?
Python脚本对应的JavaScript替代实现
你的Python代码核心是获取网页HTML并提取所有<li>元素,以下是不同JavaScript环境下的对应实现:
浏览器环境(无需第三方库)
浏览器内置fetch用于请求,DOMParser解析HTML,querySelectorAll等价于BeautifulSoup的findAll():
async function getListItems(url) { // 请求获取HTML文本 const resp = await fetch(url); const htmlText = await resp.text(); // 解析HTML为DOM文档 const parser = new DOMParser(); const doc = parser.parseFromString(htmlText, 'text/html'); // 提取所有<li>元素(和findAll('li')功能一致) const items = doc.querySelectorAll('li'); // 若需要操作元素内容,可遍历items items.forEach(item => { console.log(item.textContent); }); return items; }
Node.js环境
Node.js没有内置DOM解析能力,推荐用cheerio(语法和BeautifulSoup高度相似),或者jsdom模拟浏览器环境:
方案1:使用cheerio(最接近Python写法)
先安装依赖:
npm install cheerio
实现代码:
const cheerio = require('cheerio'); // Node.js 18+ 内置fetch,低于18版本需安装node-fetch:npm install node-fetch const fetch = globalThis.fetch; async function getListItems(url) { const resp = await fetch(url); const htmlText = await resp.text(); // 加载HTML,类似BeautifulSoup初始化 const $ = cheerio.load(htmlText); // 提取所有<li>元素,等价于soup.findAll('li') const items = $('li'); // 转为数组便于操作 const itemsArray = items.toArray(); itemsArray.forEach(item => { console.log($(item).text()); }); return items; }
方案2:使用jsdom
先安装依赖:
npm install jsdom
实现代码:
const { JSDOM } = require('jsdom'); const fetch = globalThis.fetch; async function getListItems(url) { const resp = await fetch(url); const htmlText = await resp.text(); // 创建DOM环境 const dom = new JSDOM(htmlText); const doc = dom.window.document; // 提取所有<li>元素 const items = doc.querySelectorAll('li'); return items; }
内容的提问来源于stack exchange,提问作者programORdie
相关产品推荐
相关产品推荐

