Парсинг 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="<div class='mt-1 mb-1'>Предыдущий юридический адрес<br>420073, республика Татарстан, г. Казань, ул. Аделя Кутуя, д. 50/9<hr>Нажмите для перехода к истории изменений</div>"></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 тыс. руб. <span class="text-muted">= 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"> = </span><span class="d-none d-md-inline-block"> понизилась до </span> 898,7 млн руб.
<span class="text-nowrap financial-statement-change text-danger" data-bs-toggle="tooltip" data-bs-title="1,4 млрд руб. в 2023 году"> -37%</span>
</div>
<div><a class="link-pseudo" href="#accounting">Чистая прибыль</a><span class="d-inline-block d-md-none"> = </span><span class="d-none d-md-inline-block"> понизилась до</span> 2 млн руб.
<span class="text-nowrap financial-statement-change text-danger" data-bs-toggle="tooltip" data-bs-title="26 млн руб. в 2023 году"> -93%</span>
</div>
<div><a class="link-pseudo" href="#accounting">Основные средства</a><span class="d-inline-block d-md-none"> = </span><span class="d-none d-md-inline-block"> составили</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 году"> +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 году"> +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 тыс. руб. <span class="text-muted">= 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"> = </span><span class="d-none d-md-inline-block"> выросла до</span> 658,4 млн руб.
<span class="text-nowrap financial-statement-change text-success" data-bs-toggle="tooltip" data-bs-title="306,5 млн руб. в 2022 году"> +115%</span>
</div>
<div><a class="link-pseudo" href="#accounting">Чистая прибыль</a><span class="d-inline-block d-md-none"> = </span><span class="d-none d-md-inline-block"> выросла до</span> -9,3 млн руб.
<span class="text-nowrap financial-statement-change text-success" data-bs-toggle="tooltip" data-bs-title="-56 млн руб. в 2022 году"> +84%</span>
</div>
<div><a class="link-pseudo" href="#accounting">Основные средства</a><span class="d-inline-block d-md-none"> = </span><span class="d-none d-md-inline-block"> составили</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 году"> +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 году"> +4782%</span>
</div>
</div>
</div>
^^^ здесь нужно чтобы спарсилось - "Выручка выросла до 658,4 млн руб. +115%"
Пробовал делать так: (?<=<div\ class="fw-bold">Финансовая\ отчетность\ .*\ .*\ .*</div>)[\w\W]*?(?=</div>), но может можно сделать лучше...
Ответы (2 шт):
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);
Сергей, Вам надо получше познакомиться с инструментом.
Для чего нужен XPath в ZennoPoster?
Для парсинга данных с сайтов (экшен Парсить данные)
Для поиска и взаимодействия с элементами на веб-странице
Выполнить действие
Установить значение
Взять значение
Можно использовать в Конструкторе действий.
С помощью XPath Вы можете реализовать более универсальный и устойчивый
к изменениям вёрстки сайта алгоритм поиска данных в сравнении с регулярными выражениями.
Данный язык запросов позволяет значительно упростить логику парсеров и
тем самым ускорить их разработку.
Вот регулярка которая получает фрагмент между указаными в скрине границами:
(?<=Финансовая отчетность за \d{4} год<\/div>)[\w\W]*?(?=<\/div>)
Можно проверить в песочнице:
- для ООО "СМ-СТРОЙИНВЕСТ"
- для ООО "АВИАТЕХ"