问题描述
我正在运行一些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
而不是*
(即//x:div[contains(@class,'pdp-product-brand')]/a/text()
)的xpath时,它却告诉我nodes.length === 0
。
我希望它会产生相同的结果,因为它指向的div实际上具有子锚标记(请参见上面的屏幕截图)。我只是感到困惑,为什么它不适用于a
,并且想知道是否有人知道答案。谢谢!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)