【问题标题】:Parsing HTML File using cheerio使用 Cheerio 解析 HTML 文件
【发布时间】:2015-10-07 23:39:34
【问题描述】:

我有一个要解析的 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。之后我想在代码中提到的 span 类中找到文本。

通过 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 是动态的,它会改变

【问题讨论】:

  • 那么,你想要&lt;ul data-reactid=\".0.1.0.0.1.1.0.0.0.0.1.0\"&gt; 作为输出,对吧?
  • @Patel 不,我想提取我的随机文本。然而,即使是 ul 标签下的 html 内容也失败了

标签: jquery html parsing cheerio


【解决方案1】:

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

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();

【讨论】:

  • 你几乎是对的!你能解释一下 data-reactid* 的作用吗? *的意义是什么?我认为目前它正在搜索任何带有 data-reactid 的跨度标签,其中包含用户变量?我是对的?
  • @user1692342 是的,它正在搜索span 标签(其中包含 用户变量)inside specific @ 987654324@.
  • 谢谢!我现在已经开始工作了!! :) 这在我的节点 js 模块中工作,但是我遇到了 nodewebkit 的问题。你能检查我的这个问题吗 :) stackoverflow.com/questions/31489279/…
【解决方案2】:

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

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

【讨论】:

  • 有了这个我会得到值.0.1.0.0.1.1.0.0.0.0.1.0,这不是我问的。我已经知道如何获得该值。我试图在 ul 标签下的 span 标签中找到值。我试过这个 console.log($(data).find('li._1ht1 _1ht2').data('reactid')); & 它显示为未定义
  • 检查我制作的版本,我使用子选择器来定位span。希望它有效。
  • 也许我的问题措辞是错误的,而您无法理解。我不是在 ul 类中寻找第一个跨度。从第一个 ul 类中,我想查看第一个 li 标签,提取 data-reactid 然后使用从 li 标签接收到的 data-reactid 搜索 span 类中的文本
【解决方案3】:

我的第一个答案的问题是,我实际上并没有找到您想要从中提取 reactid 的元素。通过一些 js 摆弄,我能够将类似于您的场景的东西放在一起。在小提琴中注意到我使用.html()。事不宜迟,我们开始吧:http://jsfiddle.net/0r5k9egu/。运行小提琴,在控制台中你应该会看到.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

【讨论】:

  • 是的,我可以看到输出,在这种情况下,是否可以在 span 内获取值,这是我的随机文本。你能简要解释一下你的代码是如何工作的吗?我无法跟进
  • 我用我的 Html 文件尝试了这个,但我无法让它工作。我的 html 文件在 li 标签中有更多的 span 标签!在我提到的那个之前还有多个 ul 标签。我将需要在具有特定 react-id 的 ul 标签中搜索
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-29
  • 1970-01-01
  • 1970-01-01
  • 2013-08-09
  • 2017-10-31
  • 1970-01-01
  • 2010-10-10
相关资源
最近更新 更多