使用node.js中的XPath解析HTML / XML

编程入门 行业动态 更新时间:2024-10-24 12:21:19

使用node.<a href=https://www.elefans.com/category/jswz/34/1771451.html style=js中的XPath解析HTML / XML"/>

使用node.js中的XPath解析HTML / XML

我正在尝试编写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("/", 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": ""});    
    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
    });

更多推荐

使用node.js中的XPath解析HTML / XML

本文发布于:2024-05-07 05:39:31,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1754556.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:js   node   XPath   XML   HTML

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!