javascript - Xpath 不识别锚标签?
问题描述
我正在运行一些 Node.js 代码来抓取网站并从 html 的这一部分返回一些文本:
这是我用来获取它的代码
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
而不是*
(ie //x:div[contains(@class, 'pdp-product-brand')]/a/text()
) 的 xpath 时,它会告诉我nodes.length === 0
.
我希望它给出相同的结果,因为它指向的 div实际上有一个子锚标签(见上面的截图)。我只是很困惑为什么它不起作用,a
并且想知道是否有其他人知道答案。谢谢!
解决方案
推荐阅读
- reactjs - BottomTabBar 转换图标不可垂直点击
- javascript - 如何在反应应用程序中为任务设置条件?
- c++ - C ++中的意外答案
- asp.net - Kentico CMS Repeater UniPager 在一页上显示所有内容
- c# - 有没有办法在 Xamarin C# 中的 ListView 的列上方创建列名
- c++ - 'nmake' 未被识别为内部或外部命令
- c - 读取 %d 格式说明符时 char 和 short 数据类型的行为
- p5.js - 创建嘈杂字体动画
- python - 如何从 tkinter 输入框中获取价值并在 Pandas 中使用它
- python - 提前停止使用 Pycaret?使用 Catboost 和 XGBoost 过拟合