当前位置: 首页 > 知识库问答 >
问题:

node.js:如何根据来自html字符串的数据创建特定对象的数组?

皇甫聪
2023-03-14

我是Node.js的乞丐,为了测试purpouse,我想创建一个简单的应用程序,它基于给定的HTML创建一个对象数组。

让我解释一下。我有一个HTML字符串,它包含多个div元素,如下所示:

<div class="user_container">
    <div class="user">
        <div class="thumb">
            <!--            thumbnail block-->
        </div>
        <div class="web_presence_locations"></div>

        <div class="user_data">
            <span class="name">Jaroslaw Chujczynski</span>
            <p class="location_with_flag">
                <!--                img with url here-->
                Leeds,
                United Kingdom
            </p>
            <div class="user_details">
                <div class="amount currency">
                    £28,000.00
                    <span class="overbooked">(in overfunding)</span>
                </div>
            </div>
        </div>
    </div>
    <div class="profile_container">
        <div class="extra_profile_data" style="">
            <div class="investments last">
                <h3 class="h5">Recent Investments</h3>
                <ul>
                    <li class="first">
                        <div class="campaign-logo-frame">
                            <a class="campaign_link" href="/test1">test1</a>
                            <span class="currency">£28,000.00</span>
                        </div>
                    </li>
                    <li class="">
                        <div class="campaign-logo-frame">
                            <a class="campaign_link" href="/test2">test2</a>
                            <span class="currency">£28,000.00</span>
                        </div>
                    </li>
                    <li class="">
                        <div class="campaign-logo-frame">
                            <a class="campaign_link" href="/test3">test3</a>
                            <span class="currency">£28,000.00</span>
                        </div>
                    </li>
                    <li class="">
                        <div class="campaign-logo-frame">
                            <a class="campaign_link" href="/test4">test4</a>
                            <span class="currency">£28,000.00</span>
                        </div>
                    </li>
                </ul>
            </div>
        </div>
    </div>
</div>

我想要做的是基于我在上面的div中的数据创建一个对象,例如,它将如下所示:

{
name: 'Jaroslaw Chujczynski',
location: 'Leeds, United Kingdom',
ammountCurrency: '£28,000.00 (in overfunding)',
lastInvestments: [
 {
  name: 'test1',
  currency: '£28,000.00'
 }, {
  name: 'test2',
  currency: '£28,000.00'
 }, {
  name: 'test3',
  currency: '£28,000.00'
 }, {
  name: 'test4',
  currency: '£28,000.00'
 }]
}

当然,在我的html中会有很多这样的div,所以我将创建一个这样的对象数组。

好吧,我现在有的是:

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

const getAllData = (fileName) => {
    try {
        return  fs.readFileSync(fileName, 'utf8');
    } catch(e) {
        console.log('Error:', e.stack);
    }
}
const data = getAllData('test.html');
const $ = cheerio.load(data);

const filterData = () => {
    console.log($('div[class="user_container"]'));
}

filterData();

它给我的回报是这样的--那是不需要的(或者它必须是这样的?):

 namespace: 'http://www.w3.org/1999/xhtml',
    attribs: [Object: null prototype] {
      class: 'user_container'
    },
    'x-attribsNamespace': [Object: null prototype] {
      class: undefined
    },
    'x-attribsPrefix': [Object: null prototype] {
      class: undefined
    },
    children: [ [Node], [Node], [Node], [Node], [Node], [Node] ],
    parent: Node {
      type: 'tag',
      name: 'section',
      namespace: 'http://www.w3.org/1999/xhtml',
      attribs: [Object: null prototype],
      'x-attribsNamespace': [Object: null prototype],
      'x-attribsPrefix': [Object: null prototype],
      children: [Array],
      parent: [Node],
      prev: [Node],
      next: [Node]
    },
    etc....

所以我不确定,但我认为首先我必须获得一个div块的数组,其中class是user_container,当我获得它时,我必须迭代这个数组,为它们每个创建对象。

有人能帮我一下吗?

共有1个答案

都建树
2023-03-14

html是XML的一种类型--您应该查看XML工具--让这些工具解析html,然后您可以使用该工具对它们运行XML查询。这将允许您使用xtract XML,您可以将其转换为JSON。

快速的google搜索会返回以下用于nodejs的XML工具--但还有更多:

https://www.npmjs.com/package/fast-xml-parser-说它还将导出到JSON

http://www.curtismlarson.com/blog/2018/10/03/edit-xml-node-js/-有一个详细的walk thu.

 类似资料:
  • 问题内容: 我想基于由MySQL数据库中的字符串定义的类型在PHP中创建一个对象。数据库表具有以下列和样本数据: …使用PHP数据类型 我只想使用一个查询,通过ID选择一行,然后创建一个类型为Object的对象,该对象定义表的type列,并将SELECTed行中的其他列分配给新创建的对象。 我当时在想使用: 读取类型属性 创建具有由type属性定义的类型的对象 但是没有办法动态地基于字符串创建类型

  • 问题内容: 我要使用read_csv读取的软件包中包含一些csv文本数据。我是这样做的 但是,StringIO.StringIO在Python 3中消失了,并且io.StringIO仅接受Unicode。有没有简单的方法可以做到这一点? 编辑 :以下似乎无效 失败于 问题答案: 以下内容在3.3中为我工作: 注意:我必须手动将其放置在该位置,所以我不能保证我已正确复制了它,并且没有终端空格,因为我

  • 问题内容: 我想获取一个传递的列表,该列表我知道是同构的,并从中创建一个与其中的元素类型相同的数组。 就像是… 问题答案: 转换将在运行时发生,而类型在编译时丢失。因此,您应该执行以下操作: 但是请注意,上面的第三行可能会引发异常-它不是类型安全的。

  • 问题内容: 问题:有没有办法使用字符串在python中 创建函数对象 ? 信息:我正在一个项目中,该项目将数据存储在sqlite3服务器后端中。没什么可疯狂的。DAL类通常是通过代码生成来完成的,因为代码是如此平凡。但这给了我一个主意。在python中找不到属性时,如果定义函数,它将在错误之前调用该函数。因此,我通过解析器和逻辑树来计算它的方式可以动态生成第一次调用时所需的代码,然后将函数对象另存

  • 问题内容: 我有一个包含多个子节点的大HTML字符串。 是否可以使用此字符串构造 jQuery DOM对象? 我试过了,但它只返回一个包含所有单个节点的数组。 试图获得一个我可以使用.find()函数的元素。 问题答案: 更新: 从jQuery 1.8开始,我们可以使用$.parseHTML,它将HTML字符串解析为DOM节点数组。例如: 这段代码中发生了什么: 是DOM中不存在的伪造品 作为孩子

  • 我想在应用程序中保存请求数据。获取('/')到某物。出现“TypeError:将循环结构转换为JSON” 你知道把数据串起来吗?我已经试过这个密码了 出现“TypeError:无法将对象转换为基元值”