【问题标题】:Get text of multiple elements as separate values获取多个元素的文本作为单独的值
【发布时间】:2019-01-27 11:49:06
【问题描述】:

我正在尝试从 WEB 收集信息,但如果一页中有 2 个元素,则信息存储在同一 obj 行中。如何将信息存储在不同的行中? 代码:

if (!error && response.statusCode == 200) {
  var $ = cheerio.load(html);
  $('#ctl00_MainContent_ipcAvaDay_upnlResultOutbound').each((e, el) => {
    var arrival_airport = $(el).find('.rowinfo2 td:nth-child(2)').text();
    var alio = [arrival_airport];

我得到的console.log是

[RigaRiga] 

而不是

[Riga]
[Riga]

也许有一些想法?

【问题讨论】:

    标签: jquery node.js web-scraping web-crawler cheerio


    【解决方案1】:

    text() 被一个元素集合调用时,jQuery 会将所有值连接到一个字符串中。

    如果您想创建一个包含所有单独值的数组,请使用map()

    var arrival_airport = $(el).find('.rowinfo2 td:nth-child(2)').map(function() {
      return $(this).text();
    }).get();
    console.log(arrival_airport);
    

    【讨论】:

    • 很好的答案,但我们可能应该停止在这些块中使用this,因为大多数人已经转向箭头功能,它只会引起混乱。
    • 我认为根本不是这样,特别是因为 IE 根本不支持箭头功能
    • 好的,但请考虑这是一个欢快的问题。此代码在 node.js 中运行,而不是在浏览器中。
    【解决方案2】:

    为了清楚起见,避免 this 可以在 pre-ES6 以及 ES6 + 箭头函数中完成:

    Pre-ES6(没有this):

    var airports = $(el).find('.rowinfo2 td:nth-child(2)').map(function(i, el) {
      return $(el).text();
    }).get();
    

    ES6:

    let airports = $(el).find('.rowinfo2 td:nth-child(2)').map((i, el) => $(el).text()).get()
    

    不要在这些块中使用this,因为它很奇怪并且会引起混淆。

    【讨论】:

      猜你喜欢
      • 2016-10-03
      • 1970-01-01
      • 2016-10-19
      • 1970-01-01
      • 2015-08-20
      • 1970-01-01
      • 1970-01-01
      • 2021-12-20
      • 1970-01-01
      相关资源
      最近更新 更多