首页 > 解决方案 > 将 HTML 元素字符串分成多个字符串

问题描述

我正在使用 puppeteer 进行网页抓取,并且正在尝试提取这个 h4 元素的 innerText 。

<h4 class="loss">
(NA)
<br>
<span class="team-name">TEAMNAME</span>
<br>
<span class="win spoiler-wrap">0</span>
</h4>

我可以使用以下方法获取此元素:

const teamName = await matches.$eval('h4', (h4) => h4.innerHTML);

这会将 teamName 设置为:

(NA)<br><span class="team-name">TEAMNAME</span><br><span class="win spoiler-wrap">0</span>

我试图只获取每个元素的内部文本。

我可以使用 (NA)const s = teamName.substr(0, teamName.indexOf('<'));

但我似乎无法弄清楚如何从这个字符串中获取“TEAMNAME”或“0”。我有使用正则表达式的想法,但我不确定我将如何实现这一点。

PS内部文本并不总是相同,因此我无法查找特定单词。

标签: node.jsweb-scrapingpuppeteer

解决方案


使用正则表达式,您可以这样做:

teamName.match(/<span class="team-name">(.*)<\/span>/)[1]

match返回一个数组,其中第一个元素是整个正则表达式的匹配项,第二个元素是第一个正则表达式组的匹配项,第三个元素是第二个正则表达式组的匹配项(本例中没有),等等。

/.../标记匹配它可以找到的第一个最大匹配的正则表达式。.在正则表达式中是任何字符。*指定匹配任意次数的字符,包括 0 次。(...)是一个正则表达式组,由match. \是转义字符,因为/是开始和结束正则表达式的特殊字符。

我非常推荐阅读有关匹配和正则表达式的 Mozilla 文档以了解详细信息。你会经常发现它们很有用。

但是,在 puppeteer 的情况下,可能还有一种直接匹配选择器的方法h4 span,这比使用正则表达式更直接。我对 puppeteer 的了解还不够,无法告诉你这样做的确切方法。:/


推荐阅读