0

我正在使用 Cheerio js 抓取一个网站,我有一个数组中的表格行列表,当我在 for 循环中使用 $.html('text') 修改内部 HTML 的内容时似乎工作但一旦函数退出我丢失了修改后的文本:

var cheerio = require('cheerio');
var bands = [];
var res = function (data) {
    for (var j=0; j < data.length; j++) {
        var perline = data[j];
        var $ = cheerio.load(perline);
        var chline = $('[class^="eventSlot"]');
        for (var i=0; i < chline.length; i++) {
            console.log($(chline[i]).html());   // looks correct
            $(chline[i]).html('some text');     // modify inner HTML
            console.log($(chline[i]).html());   // looks modified
        }
        bands.push(perline);
    }
    return bands;
};

var html = ['<td>11/04/2014</td><td><span class="eventSlot slot1 headliner">Band1</span><span class="eventSlot slot2">Band2</span></td><td>',
    '<td>11/04/2014</td><td><span class="eventSlot slot1 headliner">Band3</span></td>'];

console.log(res(html));  // contents are not modified from original html
4

2 回答 2

1

您需要bands使用 Cheerio 的.html()功能将您推送到的每一行渲染为 HTML。如果将第 13 行更改为:

bands.push(perline.html());

这是完整的代码:

var cheerio = require('cheerio');

var html = ['<td>11/04/2014</td><td><span class="eventSlot slot1 headliner">Band1</span><span class="eventSlot slot2">Band2</span></td><td>',
    '<td>11/04/2014</td><td><span class="eventSlot slot1 headliner">Band3</span></td>'];

var res = function (data) {
    for (var j=0; j < data.length; j++) {
        var perline = data[j];

        var $ = cheerio.load(perline);
        var chline = $('[class^="eventSlot"]');

        for (var i=0; i < chline.length; i++) {
            $(chline[i]).html('some text');     // modify inner HTML
        }
        bands.push(perline.html());     // Render the HTML back to text
    }
    return bands;
};

var bands = [];

console.log(res(html));  // contents *ARE* modified from original html

需要考虑的事情:您的方法似乎有点奇怪,因为您正在逐行转换 HTML。也许我确实错过了您的内容,但我认为您会在更大的块上进行操作,然后在最后转换为 HTML 一次。

于 2016-02-22T16:37:24.603 回答
0

您可能希望bands.push($.html())因为 Cheerio 不会修改原始源数据。它修改了自己的 DOM 模型。您必须调用一些cheerio 渲染方法来检索修改后的模型

于 2014-04-12T15:13:09.200 回答