首页 > 解决方案 > 使用 Cheerio 和 node.js 从 span 获取文本

问题描述

嗨,我正在尝试跨度内的文本,即带有“要获取的文本”的文本

我使用 Cheerio 和 node.js 获取带有 class="membership-limit-section capture-area" 的 div,但我无法从 span 中获取文本。

我有这个函数来获取 div,我可以看到它里面确实有更多元素,但我无法获取文本

 url = "URLdata";
      rp(url)
        .then(function (html) {
          var getHtml = $("div[class='membership-limit-section capture-area']", html);
          console.log(getHtml);
        })
        .catch(function (err) {
          console.log(err);
        });

<body data-n-head>
  <div id="_nuxt">
    <div id="__layout">
      <div class="app-wrapper purge-css-ignore">
        <div class="main-container">
          <section class="el-container">
            <main
              class="el-main auto-height-on-print capture-area"
              id="components-root"
            >
              <div data-v-5cc60f9e>
                <div data-v-5cc60f9e class="responsive-section">
                  <div
                    data-v-7ce2662e
                    data-v-5cc60f9e
                    class="membership-limit-section capture-area"
                  >
                    <div data-v-5cc60f9e class="dividends">
                      <div>
                        <div
                          data-v-593f497d
                          class="el-card capture-area is-always-shadow"
                        >
                          <h1 data-v-593f497d>Test</h1>
                          <div
                            role="alert"
                            class="el-alert el-alert--warning is-light"
                            data-v-593f497d
                          >
                            <div class="el-alert__content">
                              <span class="el-alert__title">Text to get</span>
                              <i
                                class="el-alert__closebtn el-icon-close"
                                style="display: none;"
                              ></i>
                            </div>
                          </div>
                        </div>
                      </div>
                    </div>
                  </div>
                </div>
              </div>
            </main>
          </section>
        </div>
      </div>
    </div>
  </div>
</body>

有人可以帮助如何从跨度中获取文本吗?

谢谢

标签: node.jscheerio

解决方案


以下选择器将针对该特定响应执行:.membership-limit-section.capture-area .el-alert__title

然后就可以使用.text()来获取文本了span

var getHtml = $(
  ".membership-limit-section.capture-area .el-alert__title",
  html
);

console.log(getHtml.text())

更新:

gurufocus.com/stock/KO/dividend 我想要“自 1963 年以来持续增加股息”,但我无法得到它。我可以使用cheerio解析来自雅虎的信息,但不能来自这个网站

您要抓取的内容是使用 XHR 在客户端加载的。因此,您将无法使用request&直接解析它,cheerio因为没有返回该部分,要么直接点击返回该数据的端点,要么puppeteer在主站点上使用。

当使用请求和cheerio 进行抓取时,请始终记录内容并查看您要解析的内容是否存在。


推荐阅读