gpt4 book ai didi

html - 在 Node.js 中使用 XPath 解析 HTML/XML

转载 作者:太空宇宙 更新时间:2023-11-03 23:36:42 36 4
gpt4 key购买 nike

我正在尝试编写一个 XPath 语句来获取表中每行的内容,但前提是每行的第二列未设置为“TBA”。我正在处理的页面 this page 。我刚开始使用 XPath。

我提出了以下语句,我已成功使用在线 XPath 测试器测试了该语句(或者看起来是成功的),但无法弄清楚如何在 Node.js 中应用它:

//*[@id="body_column_left"]/div[4]/table/tbody/tr/[not(contains(./td[2], 'TBA'))]

这是我在下面的尝试,我尝试了各种变体,但我什至无法将其验证为有效的 XPath 语句,因此我迷失在不是很有帮助的堆栈跟踪中:

var fs = require('fs');
var xpath = require('xpath');
var parse5 = require('parse5');
var xmlser = require('xmlserializer');
var dom = require('xmldom').DOMParser;
var request = require('request');

var getHTML = function (url, callback) {
request(url, function (error, response, body) {
if (!error && response.statusCode == 200) {
return callback(body) // return the HTML
}
})
}

getHTML("http://au.cybergamer.com/pc/csgo/ladder/scheduled/", function (html) {
var parser = new parse5.Parser();
var document = parser.parse(html.toString());
var xhtml = xmlser.serializeToString(document);
var doc = new dom().parseFromString(xhtml);
var select = xpath.useNamespaces({"x": "http://www.w3.org/1999/xhtml"});
var nodes = select("//x:*[@id=\"body_column_left\"]/div[4]/table/tbody/tr/[not(contains(./td[2], 'TBA'))]", doc);
console.log(nodes);
});

如有任何帮助,我们将不胜感激!

最佳答案

我最终使用 cheerio 而不是 xpath 解决了这个问题:

见下文:

    var $ = cheerio.load(html);
$('.s_grad br').replaceWith("\n");
$('.s_grad thead').remove();
$('.s_grad tr').each(function(i, elem) {
rows[i] = $(this).text();
rows[i] = rows[i].replace(/^\s*[\r\n]/gm, ""); // remove empty newlines
matches.push(new match($(this).find('a').attr('href').substring(7).slice(0, -1))) // create matches
});

关于html - 在 Node.js 中使用 XPath 解析 HTML/XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31396171/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com