Парсинг html регулярками в ZennoPoster

Есть ниже часть кода и нужно чтобы осталось только слово - "Финансовая отчетность". Подскажите как сделать такое регулярное выражение?

<div class="fw-bold">Финансовая отчетность за 2024 год</div>

Ниже примеры исходных html страниц


Первый отчёт (ООО "СМ-СТРОЙИНВЕСТ):

<!DOCTYPE html>

<h1 class="mb-2">ООО "СМ-СТРОЙИНВЕСТ"</h1>

<div class="fw-bold mb-2">ОБЩЕСТВО С ОГРАНИЧЕННОЙ ОТВЕТСТВЕННОСТЬЮ "СМ-СТРОЙИНВЕСТ"</div>


<div class="text-success fw-bold"><span class="check-icon"><svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 96 960 960" width="24"><path fill="currentColor" d="M382 816 154 588l57-57 171 171 367-367 57 57-424 424Z"></path></svg></span>Действующая компания</div>




<hr class="mt-4">

<div id="yandex_rtb_R-A-2319215-1" style="min-height: 250px; max-width: 1304px" data-ab1a96633d=""><div class="csr-uniq1"></div><div data-r-a-2319215-1-yandex_rtb_r-a-2319215-1="" class="csr-uniq2"></div></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
window.yaContextCb.push(()=>{
  Ya.Context.AdvManager.render({
renderTo: 'yandex_rtb_R-A-2319215-1',
blockId: 'R-A-2319215-1'
  })})})
</script>


<hr class="mb-4">

<div class="row gy-2 gx-5">

<div class="col-12 col-xl-6">

<div class="mb-3">

<div><strong class="fw-bold">ОГРН</strong> <strong id="copy-ogrn" class="copy" data-bs-html="true" data-bs-toggle="tooltip" data-bs-title="Копировать" onclick="copy_cb('copy-ogrn')">1121690059314</strong><span class="text-muted ms-2">от 8 августа 2012 года</span></div>

<div><strong class="fw-bold">ИНН</strong> <strong id="copy-inn" class="copy" data-bs-html="true" data-bs-toggle="tooltip" data-bs-title="Копировать" onclick="copy_cb('copy-inn')">1660173033</strong></div>

<div><strong class="fw-bold">КПП</strong> <strong id="copy-kpp" class="copy" data-bs-html="true" data-bs-toggle="tooltip" data-bs-title="Копировать" onclick="copy_cb('copy-kpp')">166001001</strong></div>

<div><strong class="fw-bold">ОКПО</strong> <strong id="copy-okpo" class="copy" data-bs-html="true" data-bs-toggle="tooltip" data-bs-title="Копировать" onclick="copy_cb('copy-okpo')">12989565</strong></div>

<a class="link-pseudo" href="#details">Все реквизиты и коды статистики</a>

</div>


<div class="mb-3">
<div class="fw-bold">Дата регистрации</div>
<div>8 августа 2012 года</div>
</div>

<div class="mb-3">
<div class="fw-bold">Основной вид деятельности</div>
<div><a href="/select?code=412000">Строительство жилых и нежилых зданий</a>
<br><a class="link-pseudo" href="#activity">+ 53 дополнительных</a>
</div>
</div>

<div class="mb-3">
<div class="fw-bold">Юридический адрес</div>
<span id="copy-address" class="copy" data-bs-html="true" data-bs-toggle="tooltip" data-bs-title="Копировать" onclick="copy_cb('copy-address')">420081, Республика Татарстан, г. Казань, пр-кт Альберта Камалеева, д. 1, помещ. 1234</span><a rel="nofollow" href="/id/1121690059314/timeline" class="history" data-bs-toggle="tooltip" data-bs-html="true" data-bs-title="&lt;div class='mt-1 mb-1'&gt;Предыдущий юридический адрес&lt;br&gt;420073, республика Татарстан, г. Казань, ул. Аделя Кутуя, д. 50/9&lt;hr&gt;Нажмите для перехода к истории изменений&lt;/div&gt;"></a>

</div>


<div class="mb-3">
<div class="fw-bold">Организационно-правовая форма</div>
<div>Общества с ограниченной ответственностью</div>
</div>

<div class="mb-3">
<div class="fw-bold">Форма собственности</div>
<div>Частная собственность</div>
</div>


<div class="mb-3">
<div class="fw-bold">Система налогообложения</div>
<div>Общая (ОСНО)</div>
<div class="text-secondary">Согласно данным ФНС за 2023 год</div>
</div>

<div class="mb-3">
<div class="fw-bold">Уставный капитал</div>
<div>500 тыс. руб.&nbsp;&nbsp;<span class="text-muted">=&nbsp;&nbsp;500 000 руб.</span></div>
</div>

<div class="mb-3">
<div class="fw-bold">Финансовая отчетность за 2024 год</div>
<div><a class="link-pseudo" href="#accounting">Выручка</a><span class="d-inline-block d-md-none">&nbsp;=  </span><span class="d-none d-md-inline-block">&nbsp;понизилась до </span> 898,7 млн руб.

<span class="text-nowrap financial-statement-change text-danger" data-bs-toggle="tooltip" data-bs-title="1,4 млрд руб. в 2023 году">&nbsp;-37%</span>

</div>


<div><a class="link-pseudo" href="#accounting">Чистая прибыль</a><span class="d-inline-block d-md-none">&nbsp;=  </span><span class="d-none d-md-inline-block">&nbsp;понизилась до</span> 2 млн руб.

<span class="text-nowrap financial-statement-change text-danger" data-bs-toggle="tooltip" data-bs-title="26 млн руб. в 2023 году">&nbsp;-93%</span>

</div>

<div><a class="link-pseudo" href="#accounting">Основные средства</a><span class="d-inline-block d-md-none">&nbsp;= </span><span class="d-none d-md-inline-block">&nbsp;составили</span> 41,9 млн руб.
</div>


</div>

<div>
<div class="fw-bold">Налоги и сборы за 2023 год</div>
<div>Уплачены <a class="link-pseudo" href="#taxes">налоги</a> на сумму 50,2 млн руб.
<span class="text-nowrap financial-statement-change text-success" data-bs-toggle="tooltip" data-bs-title="7,4 млн руб. в 2022 году">&nbsp;+581%</span>
</div>
<div>Уплачены <a class="link-pseudo" href="#taxes">страховые взносы</a> на сумму 2,8 млн руб.
<span class="text-nowrap financial-statement-change text-success" data-bs-toggle="tooltip" data-bs-title="2,1 млн руб. в 2022 году">&nbsp;+39%</span>
</div>
</div>

</div>

^^^ здесь нужно чтобы спарсилось - "Выручка понизилась до 898,7 млн руб. -37%"

Второй отчёт (ООО "АВИАТЕХ"):

<!DOCTYPE html>
<h1 class="mb-2">ООО "АВИАТЕХ"</h1>

<div class="fw-bold mb-2">ОБЩЕСТВО С ОГРАНИЧЕННОЙ ОТВЕТСТВЕННОСТЬЮ "АВИАТЕХ"</div>


<div class="text-success fw-bold"><span class="check-icon"><svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 96 960 960" width="24"><path fill="currentColor" d="M382 816 154 588l57-57 171 171 367-367 57 57-424 424Z"></path></svg></span>Действующая компания</div>




<hr class="mt-4">

<div id="yandex_rtb_R-A-2319215-1" style="min-height: 250px; max-width: 1304px" data-c6b0516736=""><div class="csr-uniq1"></div><div data-r-a-2319215-1-yandex_rtb_r-a-2319215-1="" class="csr-uniq2"></div></div>
<script>
document.addEventListener('DOMContentLoaded', function() {
window.yaContextCb.push(()=>{
  Ya.Context.AdvManager.render({
renderTo: 'yandex_rtb_R-A-2319215-1',
blockId: 'R-A-2319215-1'
  })})})
</script>


<hr class="mb-4">

<div class="row gy-2 gx-5">

<div class="col-12 col-xl-6">

<div class="mb-3">

<div><strong class="fw-bold">ОГРН</strong> <strong id="copy-ogrn" class="copy" data-bs-html="true" data-bs-toggle="tooltip" data-bs-title="Копировать" onclick="copy_cb('copy-ogrn')">1176196023662</strong><span class="text-muted ms-2">от 23 мая 2017 года</span></div>

<div><strong class="fw-bold">ИНН</strong> <strong id="copy-inn" class="copy" data-bs-html="true" data-bs-toggle="tooltip" data-bs-title="Копировать" onclick="copy_cb('copy-inn')">6166104950</strong></div>

<div><strong class="fw-bold">КПП</strong> <strong id="copy-kpp" class="copy" data-bs-html="true" data-bs-toggle="tooltip" data-bs-title="Копировать" onclick="copy_cb('copy-kpp')">616601001</strong></div>

<div><strong class="fw-bold">ОКПО</strong> <strong id="copy-okpo" class="copy" data-bs-html="true" data-bs-toggle="tooltip" data-bs-title="Копировать" onclick="copy_cb('copy-okpo')">15771499</strong></div>

<a class="link-pseudo" href="#details">Все реквизиты и коды статистики</a>

</div>


<div class="mb-3">
<div class="fw-bold">Дата регистрации</div>
<div>23 мая 2017 года</div>
</div>

<div class="mb-3">
<div class="fw-bold">Основной вид деятельности</div>
<div><a href="/select?code=331300">Ремонт электронного и оптического оборудования</a>
<br><a class="link-pseudo" href="#activity">+ 229 дополнительных</a>
</div>
</div>

<div class="mb-3">
<div class="fw-bold">Юридический адрес</div>
<span id="copy-address" class="copy" data-bs-html="true" data-bs-toggle="tooltip" data-bs-title="Копировать" onclick="copy_cb('copy-address')">344065, Ростовская область, г. Ростов-На-Дону, ул. Троллейбусная, зд. 24/2В, офис 923-924</span>

</div>


<div class="mb-3">
<div class="fw-bold">Организационно-правовая форма</div>
<div>Общества с ограниченной ответственностью</div>
</div>

<div class="mb-3">
<div class="fw-bold">Форма собственности</div>
<div>Частная собственность</div>
</div>


<div class="mb-3">
<div class="fw-bold">Система налогообложения</div>
<div>Общая (ОСНО)</div>
<div class="text-secondary">Согласно данным ФНС за 2023 год</div>
</div>

<div class="mb-3">
<div class="fw-bold">Уставный капитал</div>
<div>40 тыс. руб.&nbsp;&nbsp;<span class="text-muted">=&nbsp;&nbsp;40 000 руб.</span></div>
</div>

<div class="mb-3">
<div class="fw-bold">Финансовая отчетность за 2023 год</div>
<div><a class="link-pseudo" href="#accounting">Выручка</a><span class="d-inline-block d-md-none">&nbsp;=  </span><span class="d-none d-md-inline-block">&nbsp;выросла до</span> 658,4 млн руб.

<span class="text-nowrap financial-statement-change text-success" data-bs-toggle="tooltip" data-bs-title="306,5 млн руб. в 2022 году">&nbsp;+115%</span>

</div>


<div><a class="link-pseudo" href="#accounting">Чистая прибыль</a><span class="d-inline-block d-md-none">&nbsp;=  </span><span class="d-none d-md-inline-block">&nbsp;выросла до</span> -9,3 млн руб.

<span class="text-nowrap financial-statement-change text-success" data-bs-toggle="tooltip" data-bs-title="-56 млн руб. в 2022 году">&nbsp;+84%</span>

</div>

<div><a class="link-pseudo" href="#accounting">Основные средства</a><span class="d-inline-block d-md-none">&nbsp;= </span><span class="d-none d-md-inline-block">&nbsp;составили</span> 107,1 млн руб.
</div>


</div>

<div>
<div class="fw-bold">Налоги и сборы за 2023 год</div>
<div>Уплачены <a class="link-pseudo" href="#taxes">налоги</a> на сумму 63,1 млн руб.
<span class="text-nowrap financial-statement-change text-success" data-bs-toggle="tooltip" data-bs-title="1,7 млн руб. в 2022 году">&nbsp;+3702%</span>
</div>
<div>Уплачены <a class="link-pseudo" href="#taxes">страховые взносы</a> на сумму 71,6 млн руб.
<span class="text-nowrap financial-statement-change text-success" data-bs-toggle="tooltip" data-bs-title="1,5 млн руб. в 2022 году">&nbsp;+4782%</span>
</div>
</div>

</div>

^^^ здесь нужно чтобы спарсилось - "Выручка выросла до 658,4 млн руб. +115%"


Пробовал делать так: (?<=<div\ class="fw-bold">Финансовая\ отчетность\ .*\ .*\ .*</div>)[\w\W]*?(?=</div>), но может можно сделать лучше...


Ответы (2 шт):

Автор решения: Faraday
const el = document.querySelector('.fw-bold');

const originalText = el.textContent;
const newText = originalText.replace(/\s+за.*$/, '');

el.textContent = newText;

Если воспринимать весь html как текст, эта регулярка опишет сам текст:

(?<=<div class=""fw-bold"">)Финансовая отчетность(?=\s+за)

Если для C#, этот код выдаст то, что вам нужно:

var html = @"<div class=""fw-bold"">Финансовая отчетность за 2024 год</div>";
var pattern = @"(?<=<div class=""fw-bold"">)Финансовая отчетность(?=\s+за)";
var match = Regex.Match(html, pattern);
Console.WriteLine(match.Value);
→ Ссылка
Автор решения: SVBazuev

Сергей, Вам надо получше познакомиться с инструментом.


Для чего нужен XPath в ZennoPoster?

  1. Для парсинга данных с сайтов (экшен Парсить данные)

  2. Для поиска и взаимодействия с элементами на веб-странице

    • Выполнить действие

    • Установить значение

    • Взять значение

  3. Можно использовать в Конструкторе действий.

С помощью XPath Вы можете реализовать более универсальный и устойчивый
к изменениям вёрстки сайта алгоритм поиска данных в сравнении с регулярными выражениями.

Данный язык запросов позволяет значительно упростить логику парсеров и
тем самым ускорить их разработку.


Вот регулярка которая получает фрагмент между указаными в скрине границами:
(?<=Финансовая отчетность за \d{4} год<\/div>)[\w\W]*?(?=<\/div>)
Можно проверить в песочнице:

Успехов!

→ Ссылка