【问题标题】:Nodejs cheerio returns undefined when web scraping网页抓取时Nodejs Cheerio返回未定义
【发布时间】:2021-05-24 09:26:10
【问题描述】:

我试图从一个名为 NSE 的网站抓取数据,所以首先我尝试在检查元素控制台中进行:

(编辑问题)

objs = $('div[class="table-wrap"] > table > tbody > tr > td').slice(0, 8)
objs.map((i,element) => console.log($(element).text()))

我得到了输出:

401.20
417.00
- 
411.45
361.10 
441.30 
No Band
-

所以我很高兴我得到了我想要的。 但是当我去我的 vscode 并尝试为它制作一个脚本时,我猜相同的代码返回了一些随机值。下面是代码:

const cheerio = require("cheerio")
const axios = require("axios")

const url = "https://www.nseindia.com/get-quotes/equity?symbol=SBIN";

async function getDataFromNse() {
    const { data } = await axios.get(url)
    let $ = cheerio.load(data)
    const objectArray = $('div[class="table-wrap"] > table > tbody > tr > td').slice(0, 8)
    objectArray.map((i,element) => console.log($(element).text()))
}

getDataFromNse()

我得到了输出:

Indicative Equilibrium Price (In )
-
Indicative Equilibrium Quantity
-
Final Price (In )
                                                                    
-
Final Quantity
-

我不知道这些值在检查器中的位置。 在控制台中我得到了正确的数值。 如果有人可以提供帮助,我将不胜感激! 提前致谢。

【问题讨论】:

  • 当使用Array.map 时,元素位于索引之前。你可以试试objectArray.map((element, i) => console.log(element.innerText))
  • @violet 是的,我改变了你的要求,但我仍然收到undefined :(
  • 正如我在问题中提到的那样,当我在检查元素控制台上尝试它时,我得到了所需的值,因此这意味着 (i, element) 的位置是正确的......

标签: javascript node.js cheerio


【解决方案1】:

innerText 是一个 DOM 节点属性,所以浏览器有这些属性,而节点没有。

要获取cheerio 节点的文本,请使用:

$(element).text()

【讨论】:

  • 嘿,我根据您的回答编辑了问题,但值仍然不正确,为了检查它,我在控制台上尝试了相同的代码,它工作正常,但在脚本中它打印了其他内容,如问题。如果可以,请务必看一看!
  • 您似乎想要来自 xhr 的数据 - 不会出现在您的欢呼中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多