NodeJS 使用Cheerio获取ul的第n个子级

cyvaqqii  于 2022-11-29  发布在  Node.js
关注(0)|答案(1)|浏览(154)

我正试图刮亚马逊书籍使用CheeriorequestnodeJS
但是我不知道如何从下面的HTML代码中得到Print lengthpublication date

<table id="productDetailsTable" cellspacing="0" cellpadding="0" border="0">
  <tbody>
    <tr>
      <td class="bucket">
        <h2>Product Details</h2>
        <div class="content">
          <ul>
            <li>
              <b>File Size:</b>
              2544 KB
            </li>
            <li>
              <b>Print Length:</b>
              658 pages
            </li>
            <li>
              <b>Publisher:</b>
              Anchor; 1st edition (September 15, 2009)
            </li>
          </ul>
        </div>
      </td>
    </tr>
  </tbody>
</table>

任何形式的帮助都将不胜感激。谢谢。

vyu0f0g1

vyu0f0g11#

你可以通过调整Cheerio中的方法来做到这一点:获取normal + text节点和如何在Cheerio中获取由不同HTML标记分隔的文本。.content()方法提供normal和text节点:

const $ = cheerio.load(html);
const result = [...$("#productDetailsTable .bucket .content li")].map(e =>
  [...$(e).contents()]
    .map(e => $(e).text().trim())
    .filter(Boolean)
);
console.log(result);

其给出:

[
  [ 'File Size:', '2544 KB' ],
  [ 'Print Length:', '658 pages' ],
  [ 'Publisher:', 'Anchor; 1st edition (September 15, 2009)' ]
]

还应考虑

const obj = Object.fromEntries(result.map(([a, b]) => [a.slice(0, -1), b]));

其产生:

{
  'File Size:': '2544 KB',
  'Print Length:': '658 pages',
  'Publisher:': 'Anchor; 1st edition (September 15, 2009)'
}

如果您特别需要发布日期,请尝试:

console.log(obj.Publisher.match(/(?<=\().+(?=\))/g)[0]);

它打印September 15, 2009

相关问题