正在使用 cheerio 解析 HTML 文件

Parsing HTML File using cheerio

我有一份 HTML 文档,我想对其进行解析。我正在尝试使用 cheerio 来解析 HTML 文件。

<ul data-reactid=".0.1.0.0.1.1.0.0.0.0.1.0">
    <li class="_1ht1 _1ht2" data-reactid=".0.1.0.0.1.1.0.0.0.0.1.0.1:$user=xyz">
        .
        .
        .
        .
        <span data-reactid=".0.1.0.0.1.1.0.0.0.0.1.0.1:$user=xyz.0.0.$right.0.0.1.$left.0.1:0">
            My Random Text
        </span>
    </li>
</ul>

从我的 HTML 我正在尝试使用 data-reactid=".0.1.0.0.1.1.0.0.0.0.1.0"

提取 ul 标签的第一个实例

在第一个 li 标签中,我想提取用户,在本例中为 xyz。之后我想在代码中提到的 class 范围内找到文本。

通过 Cheerio,我尝试了以下操作:

var cheerio = require('cheerio'), 
fs = require('fs'); 

fs.readFile('index.html', 'utf8', dataLoaded);

function dataLoaded(err, data) {
    $ = cheerio.load(data);
    console.log("Trying out " + JSON.stringify($("<ul data-reactid=\".0.1.0.0.1.1.0.0.0.0.1.0\">").data()));
}   

它打印 Trying out {"reactid":".0.1.0.0.1.1.0.0.0.0.1.0"} 如何获取 HTML 中的值?

注意:xyz 是动态的,它会发生变化

试试这个。基本上它将你的 HTML 变成 jquery 可以使用的东西,然后它找到未排序的列表,当然你可以使查找更具体。使用 .data() 它提取 data-reactid 属性的值。

reactid = $($(data).find('ul>li>span')).data('reactid');

我的第一个答案的问题是我实际上没有找到您想从中提取 reactid 的元素。通过一些 js 摆弄,我能够将类似于您的场景的东西放在一起。在 fiddle 中注意到我使用 .html()。事不宜迟,我们开始吧:http://jsfiddle.net/0r5k9egu/。 运行 fiddle 并且在控制台中您应该看到 .0.1.0.0.1.1.0.0.0.0.1.0.1:$user=xyz.0.0.$right.0.0.1.$left.0.1:0

如果我正确理解你的问题,我认为这对你有用:

var myDataReactId = '.0.1.0.0.1.1.0.0.0.0.1.0'
var firstLi = $("ul[data-reactid = '" + myDataReactId + "'] li")[0];
//console.log(firstLi);
var user = $(firstLi).data('reactid');
$(firstLi).find("span[data-reactid*='" + user + "']").text();