Xpath无法识别锚标记?

问题描述

我正在运行一些Node.js代码来抓取网站并从html的这一部分返回一些文本:

screenshot of div container in chrome devtools

这是我用来获取它的代码

const fs = require('mz/fs');
const xpath = require('xpath');
const parse5 = require('parse5');
const xmlser = require('xmlserializer');
const dom = require('xmldom').DOMParser;
const axios = require('axios');

(async () => {
    const response = await axios.get('https://www.aritzia.com/en/product/sculpt-knit-tank-%28arjun-knit-top%29/66139.html?dwvar_66139_color=17388');
    const html = response.data;
    const document = parse5.parse(html.toString());
    const xhtml = xmlser.serializeToString(document);
    const doc = new dom().parseFromString(xhtml);
    const select = xpath.useNamespaces({"x": "http://www.w3.org/1999/xhtml"});
    const nodes = select("//x:div[contains(@class,'pdp-product-brand')]/*/text()",doc);
    console.log(nodes.length ? nodes[0].nodeValue : nodes.length)
})();

上面的代码按预期工作-打印Babaton

但是,当我将上面的xpath换为包含a而不是*(即//x:div[contains(@class,'pdp-product-brand')]/a/text())的xpath时,它却告诉我nodes.length === 0

我希望它会产生相同的结果,因为它指向的div实际上具有子锚标记(请参见上面的屏幕截图)。我只是感到困惑,为什么它不适用于a,并且想知道是否有人知道答案。谢谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...