【问题标题】:Selector for cheerio (Node.js) working in console but not in my scriptCheerio (Node.js) 的选择器在控制台中工作但不在我的脚本中
【发布时间】:2020-12-18 04:12:30
【问题描述】:

我正在编写一个简单的脚本来从网站上抓取货币表。

到目前为止,这是我的脚本,我想做的是从这个网站获取外汇汇率表:https://www.bangkokbank.com/en/Personal/Other-Services/View-Rates/Foreign-Exchange-Rates

这是我目前的代码。

const cheerio = require('cheerio');
const request = require('request');

request({
    method: 'GET',
    url: 'https://www.bangkokbank.com/en/Personal/Other-Services/View-Rates/Foreign-Exchange-Rates'
}, (err, res, body) => {

    if (err) return console.error(err);
    let $ = cheerio.load(body);
    var x = [];
    var hello = $("#exchange-rates > div.table-outer > table > tbody> tr > td");
    
    console.log(hello);


    $("#exchange-rates > div.table-outer > table > tbody> tr > td").each((i, elem) => {
        x.push($(elem).text());
        console.log($(elem).text());
    });
    
});

当我在网页的控制台中运行“$("#exchange-rates > div.table-outer > table > tbody> tr > td")”时(通过单击检查),它能够识别所有相关要素。但是当我在 JavaScript 中运行脚本时,它什么也没得到。

有人可以建议吗?谢谢!

【问题讨论】:

  • 你需要一个包request,是deprecatedrequest - npm吗?
  • 啊,是的!但我猜它应该仍然有效
  • 即使您没有明确地将listen 响应对象error 事件... if (err) return console.error(err);;如果您没有为end 事件明确地listen 并使用该结果,您应该如何consume 您的响应?

标签: javascript node.js cheerio


【解决方案1】:

静态网站中不存在给定路径。该网站动态呈现内容,即一旦 Web 内容在浏览器上交付,就会进行进一步的 DOM 操作以呈现数据。所以,静态网页只有"#exchange-rates > div.table-outer > table > tbody。 tr、td 标签一旦在浏览器上被获取,就会被附加。您可能需要查看任何其他替代解决方案来获取外汇汇率,例如使用任何现有的 API。

【讨论】:

    猜你喜欢
    • 2015-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-22
    • 2016-08-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多