{
 "№": 188,
 "заголовок": "Пять тысяч строк одного списка: собираю франчайзинговую сеть 1С по открытым данным и сверяю с ЕГРЮЛ",
 "площадка": "Habr",
 "статус": "Опубликовано",
 "тип": "разбор",
 "контур": "спутник · разбор",
 "рубрика": "Франшизы",
 "кластер": "А1",
 "волна": "П1",
 "приоритет": "P1",
 "создана": "2026-10-12",
 "выход": null,
 "просмотры": 3996,
 "ключи": [
  {
   "фраза": "1с франчайзи",
   "показы": 3835,
   "главный": true
  },
  {
   "фраза": "франчайзер это",
   "показы": 253,
   "главный": false
  },
  {
   "фраза": "франчайзи это",
   "показы": 1254,
   "главный": false
  }
 ],
 "ключи_нота": "",
 "ключи_кластер": "Каталог франшиз",
 "ключи_замер": "из шапки материала",
 "описание": null,
 "ключи_из_текста": [],
 "знаков": 12878,
 "слов": 1971,
 "файл": "завод/публикации/habr-05-1s-franchayzi.md",
 "статус_текста": "ОПУБЛИКОВАНО на Habr 13.10.2026, отмечено в панели",
 "ссылки": {
  "опубликована": "https://habr.com/ru/articles/1093722/",
  "витрина": [],
  "документ": null,
  "документ_локальный": false,
  "страница": true
 },
 "картинки": [
  {
   "файл": "habr-05-egryul.jpg",
   "alt": "Франчайзи - это юрлицо, и из 150 названий списка 75 связались с одним действующим юрлицом, у 19 несколько действующих тёзок, 37 не связались, 11 оказались ИП",
   "подпись": null,
   "адрес": "данные/картинки/habr-05-egryul.jpg",
   "блок": 43,
   "обложка": false,
   "ключи": [
    "франчайзи это"
   ]
  },
  {
   "файл": "habr-05-kdpv.jpg",
   "alt": "1С-франчайзи за работой: специалист по внедрению показывает кладовщице терминал сбора данных на светлом складе",
   "подпись": null,
   "адрес": "данные/картинки/habr-05-kdpv.jpg",
   "блок": 3,
   "обложка": false,
   "ключи": [
    "1с франчайзи"
   ]
  },
  {
   "файл": "habr-05-set.jpg",
   "alt": "Франчайзер - это одна фирма 1С, а размеров у её сети четыре: более 8 500 и более 8 000 по словам фирмы, 5 261 офис в списке и 4 985 точек на карте; больше всего офисов в Москве и Казахстане",
   "подпись": null,
   "адрес": "данные/картинки/habr-05-set.jpg",
   "блок": 32,
   "обложка": false,
   "ключи": [
    "франчайзер это"
   ]
  }
 ],
 "картинки_нота": null,
 "иллюстрации": {
  "слов": 2022,
  "норма": 20,
  "в_тексте": 3,
  "ключи": [
   {
    "фраза": "1с франчайзи",
    "в_подписи": true
   },
   {
    "фраза": "франчайзер это",
    "в_подписи": true
   },
   {
    "фраза": "франчайзи это",
    "в_подписи": true
   }
  ],
  "повторы": []
 },
 "площадка_правила": {
  "имя": "Habr",
  "адрес": "https://habr.com/ru/",
  "как_публикуем": "руками",
  "ссылки_вес": null,
  "ссылки_правило": null,
  "картинки": null,
  "объём": null,
  "регистрация": [
   "почта",
   "никнейм",
   "пароль дважды",
   "капча",
   "согласие с соглашением и политикой"
  ],
  "телефон": "нет",
  "аккаунт": "заведён",
  "статус_площадки": "РАБОТАЕТ, ЧЕТЫРЕ МАТЕРИАЛА. 16.09.2026 первый (регулярки, 8500 просмотров - лучший результат среди всех наших площадок), 21.09.2026 второй («Парсер, который не падает, а врёт», 6200), 30.09.2026 третий - «Источник данных, который закрыт и для меня, и для веб-архива»: https://habr.com/ru/articles/1088562/ , 13.10.2026 четвёртый - «Пять тысяч строк одного списка: собираю франчайзинговую сеть 1С по открытым данным и сверяю с ЕГРЮЛ»: https://habr.com/ru/articles/1093722/ . Отказов не было ни разу, второй, третий и четвёртый материалы вышли сразу в ленту, без песочницы. Ссылку на портал здесь не ставим вовсе - не из-за прогрева, а по правилам площадки: самопиар разрешён только в корпоративном блоге",
  "ограничения": [
   "для публикации нужна карма или инвайт - новый аккаунт пишет в песочницу, оттуда выпускают модераторы",
   "аудитория враждебна к маркетинговым текстам, наказывает кармой",
   "тематика франшиз ей чужая: заходить только с разборами с цифрами и без продающего тона",
   "есть платный корпоративный блог - отдельная статья расходов, решение руководителя",
   "проверено чужим опытом: у PR-завода Adonis четыре статьи подряд не прошли модерацию, площадку припарковали как неподходящую по теме (созвон 27.08.2026, материалы/разбор-видео-27.08.md)",
   "ПРОВЕРЕНО 09.09.2026, страница о Песочнице: полноправный аккаунт даётся через Песочницу, первая статья проходит модерацию и ждёт приглашения. Точно не пройдут: пресс-релизы, рекламные материалы, СГЕНЕРИРОВАННЫЕ материалы, тексты из списков более чем наполовину и статьи, слабо относящиеся к тематике сайта. Уникальность ниже 75% - почти отказ",
   "ПРОВЕРЕНО 09.09.2026: форма на account.habr.com - почта, никнейм, пароль дважды, капча и два чекбокса. Телефон не спрашивают",
   "ЧАСТОТА ПУБЛИКАЦИЙ, из справки Хабра 17.09.2026 (раздел «Публикации»). Формальный лимит мягкий: «если пользователь опубликовал три материала с интервалами менее 24 часов, то следующий он сможет опубликовать не ранее чем через 24 часа с момента последнего». То есть до трёх статей в сутки, дальше пауза сутки. Отдельно: в хаб «Я пиарюсь» нельзя две и более публикации подряд - но мы туда и не ходим. РЕАЛЬНОЕ ОГРАНИЧЕНИЕ НЕ В ЛИМИТЕ, А В КАРМЕ. Публиковать без модерации может только полноправный аккаунт с положительной кармой, а карму ставят читатели. Аудитория наказывает кармой за маркетинговый тон, и при уходе в минус публиковать станет нельзя. Поэтому темп держим по качеству темы, а не по лимиту: одна сильная техническая статья в неделю-полторы"
  ]
 },
 "чеклист": [
  {
   "что": "Ссылка на портал в тексте",
   "готово": false
  },
  {
   "что": "Заголовок совпадает с тем, что в плане",
   "готово": true
  },
  {
   "что": "Текст написан и лежит в заводе",
   "готово": true
  },
  {
   "что": "alt у каждой картинки",
   "готово": true
  },
  {
   "что": "Ключ у каждого кадра, у каждого свой",
   "готово": true
  },
  {
   "что": "Дисклеймер про доход и окупаемость, если в тексте есть такие цифры",
   "готово": true
  }
 ],
 "письмо": null,
 "размещение": [
  {
   "поле": "Хабы",
   "значение": "Открытые данные, Data Mining, Python, Программирование"
  },
  {
   "поле": "Целевая аудитория",
   "значение": "Системный и бизнес-анализ"
  },
  {
   "поле": "Теги",
   "значение": "открытые данные, парсинг, python, ЕГРЮЛ, 1С, франчайзинг, качество данных, сопоставление записей, геокодирование, регулярные выражения"
  }
 ],
 "анонс": null,
 "текст_html": "<blockquote> Пятый материал для Habr. Тема согласована руководителем 12.10.2026: франчайзинговая сеть 1С по открытым данным. Угол технический - как собрать и сверить массив, - поэтому площадка его примет, а предмет наш: франчайзинг.  <b>Чего нет намеренно:</b> названия портала и ссылок на него, названий конкретных партнёров 1С (правило проекта: имена реальных компаний только с их согласия), оценок «хорошая или плохая франшиза», личных данных из ЕГРЮЛ. Фирма 1С названа, потому что она и есть предмет разбора и источник данных; про неё в тексте только то, что она сама пишет.</blockquote>\n<h2>Пять тысяч строк одного списка: собираю франчайзинговую сеть 1С по открытым данным и сверяю с ЕГРЮЛ</h2>\n<figure class=\"статья-кадр\" data-файл=\"habr-05-kdpv.jpg\"><img src=\"данные/картинки/habr-05-kdpv.jpg\" alt=\"1С-франчайзи за работой: специалист по внедрению показывает кладовщице терминал сбора данных на светлом складе\" loading=\"lazy\"><figcaption>1С-франчайзи за работой: специалист по внедрению показывает кладовщице терминал сбора данных на светлом складе</figcaption></figure>\n<p>У фирмы «1С» есть открытый список 1С-франчайзи: страница, где можно выбрать регион и увидеть всех, кто внедряет «1С:Предприятие» в вашем городе. Это, пожалуй, самая большая франчайзинговая сеть в российском IT, и нечастый случай, когда франчайзер сам выкладывает всю сеть одной страницей. Я хотел простого: собрать этот список целиком, посчитать, как сеть разложена по карте, и привязать каждую строку к юрлицу в ЕГРЮЛ.</p>\n<p>Простого не вышло. Ниже - как устроен источник, что в нём сломано и сколько строк в итоге удаётся честно связать с реестром. Код на Python, короткими кусками, всё снято 12 октября 2026 года.</p>\n<h3>Франчайзер - это одна фирма, франчайзи - пять тысяч строк</h3>\n<p>Франчайзер - это компания, которая разрешает другим работать под своей маркой и по своим правилам, а взамен берёт плату и требует соблюдать стандарт. Здесь франчайзер один - фирма «1С». Франчайзи у неё - фирмы, которые продают и внедряют её программы под маркой «1С:Франчайзинг».</p>\n<p>Условия фирма описывает сама, на странице «Как стать партнёром»: начальные затраты от 27 000 рублей, ежеквартальный взнос 3 000 рублей и аттестация специалистов. Это слова фирмы на её странице, а не проверенная смета: что на деле стоит вход в сеть, из открытых данных не видно, и в этом разборе я эти цифры не проверял.</p>\n<p>Для разработчика интереснее другое. Обычно франчайзер прячет список своих точек или отдаёт его кусками. Здесь список открыт, и его можно обойти скриптом.</p>\n<h3>Откуда берутся данные</h3>\n<p>Страница <code>franch-citylist.jsp</code> с моего сервера открылась сразу. Сервер стоит в Амстердаме, и половина российских сайтов встречает его антиботом, так что это первое, что я проверяю. Здесь перед сайтом стоит защитный слой, но обычный запрос с браузерным заголовком получает 200.</p>\n<p>Внутри страницы один и тот же список живёт дважды.</p>\n<p>Первый раз - в таблице под фильтрами: город, название, отметки, телефон, по 30 строк на страницу и пагинация через POST формы. Второй раз - в JavaScript, в массиве для карты, причём целиком, без пагинации:</p>\n<p>``<code>python m = re.search(r\"var partners = (\\[.<i>?\\]);?\\s</i>\\n\", page) points = json.loads(m.group(1)) len(points)  # 4985 </code>``</p>\n<p>Массив карты - подарок: адрес, телефон, сайт, число сертифицированных специалистов, всё в одном JSON. Таблица беднее, но только в ней есть город, а регион - только в фильтре над ней. Поэтому я обошёл обе: массив целиком одним запросом и таблицу по каждому из 93 значений фильтра, от Абхазии до Ярославской области, с паузой в две секунды. Сырые ответы легли на диск сжатыми, чтобы любой пересчёт шёл без нового обхода.</p>\n<h3>Грабли первая: широта лежит в поле долготы</h3>\n<p>Первая запись массива выглядит так (сокращаю):</p>\n<p>``<code>json {\"partcode\": \"03096\", \"lat\": \"37.574804\", \"lon\": \"55.814300\", \"contentName\": \" &lt;b&gt; ... &lt;/b&gt; \", \"contentBoby\": \" &lt;div ...&gt; Адрес: 127434, Москва ...\"} </code>``</p>\n<p>Москва лежит на 55-й параллели и 37-м меридиане. Здесь в поле <code>lat</code> записана долгота, в <code>lon</code> - широта. Карта на странице при этом рисуется правильно, потому что JavaScript тоже читает их наоборот:</p>\n<p>``<code>javascript new ymaps.Placemark([partner.lon, partner.lat], ...) </code>``</p>\n<p>Две ошибки компенсируют друг друга, и снаружи всё работает. Сломается у того, кто возьмёт JSON и поверит именам полей: Москва уедет на север Ирана, а вместе с ней и остальные пять тысяч точек. Рядом поле <code>contentBoby</code> - с опечаткой в имени, и его тоже надо писать именно так.</p>\n<p>Второе про координаты: 14 точек стоят в одной и той же точке - в центре Москвы, хотя адреса у них разные, от переулка в центре до абонентского ящика. Всего повторов координат 153. Предположительно, когда геокодер не разобрал адрес, он поставил точку в центр города. Для карты это не страшно, для любого анализа «кто где» - да: эти фирмы окажутся у Кремля.</p>\n<h3>Грабли вторая: регулярка видела только каждую двадцатую строку</h3>\n<p>Таблицу я начал разбирать регуляркой «ячейка города, затем <code>&lt;h3&gt;</code>, в нём ссылка на офис». На первой странице она нашла 29 строк из 30, и я решил, что потерял одну на краю страницы. Оказалось наоборот.</p>\n<p>Тег <code>&lt;h3&gt;</code> вокруг названия получают только партнёры с сертификатом ISO 9001. Без фильтра первая страница почти целиком состоит из них: таких на ней было 29. Во всём списке - 260 строк из 5 264. Регулярка с обязательным <code>&lt;h3&gt;</code> молча прочла бы двадцатую часть списка и выдала результат, который выглядит правдоподобно: Москва, крупные фирмы, всё на месте.</p>\n<p>Починка - резать таблицу по <code>&lt;tr&gt;</code> и делать заголовок необязательным:</p>\n<p>```python CELL = re.compile( r'&lt;a href=\"\\?city=([^\"]<i>)\"&gt;.</i>?&lt;/a&gt;\\s*&lt;/td&gt;\\s*&lt;td&gt;\\s*(?:&lt;h3&gt;\\s*)?' r'&lt;a href=\"franch\\.jsp\\?id=(\\d+)[^\"]<i>\"&gt;(.</i>?)&lt;/a&gt;', re.S)</p>\n<p>for chunk in page.split(\"&lt;tr&gt;\")[1:]: m = CELL.search(chunk) ```</p>\n<p>Вывод общий: если первая страница отдала почти всё, проверьте это на второй. Первая страница отсортирована, и как раз она нетипична.</p>\n<h3>Одна сеть, четыре разных размера</h3>\n<p>Сколько же франчайзи у 1С? Ответов у меня четыре, и все с сайта самой фирмы.</p>\n<figure class=\"статья-кадр\" data-файл=\"habr-05-set.jpg\"><img src=\"данные/картинки/habr-05-set.jpg\" alt=\"Франчайзер - это одна фирма 1С, а размеров у её сети четыре: более 8 500 и более 8 000 по словам фирмы, 5 261 офис в списке и 4 985 точек на карте; больше всего офисов в Москве и Казахстане\" loading=\"lazy\"><figcaption>Франчайзер - это одна фирма 1С, а размеров у её сети четыре: более 8 500 и более 8 000 по словам фирмы, 5 261 офис в списке и 4 985 точек на карте; больше всего офисов в Москве и Казахстане</figcaption></figure>\n<p>На странице «Как стать партнёром» написано «более 8 500 партнёров». На страницах о партнёрской сети - «более 8000 организаций». В самом списке 5 264 строки, из них разных номеров офисов 5 261: один номер встречается четыре раза. А массив карты, который должен быть тем же списком, содержит 4 985 точек.</p>\n<p>Разницу между списком и картой удалось разобрать почти до конца. Каждое название с карты есть в таблице, обратное неверно: у 279 строк точки нет. Ещё интереснее с зарубежными странами. В полной карте точки Казахстана, Беларуси и других стран есть, а если выбрать в фильтре любую из одиннадцати стран, таблица заполняется, а карта остаётся пустой. По российским регионам фильтры дают 4 190 точек, остальные живут только в общей карте.</p>\n<p>Между «более 8000» и пятью тысячами строк я объяснения не нашёл. Предположительно, слова на страницах писались в разные годы и считают все договоры, а список показывает только аттестованных франчайзи, но проверить это по открытым данным нельзя. Практический вывод проще: размер сети в тексте фирмы и размер её открытого списка - два разных числа, и в любой таблице надо писать, какое из них взято.</p>\n<p>География по списку такая. 535 городов, из них 467 в России. 824 строки, то есть почти шестая часть списка, - не Россия: Казахстан (547), Беларусь (96), Узбекистан (60) и ещё восемь стран. Москва - 726 строк, Санкт-Петербург - 314, вместе 23,4% российской части. Остальное разложено по региональным центрам и небольшим городам: российских регионов в фильтре 82, и в одном из них, Карачаево-Черкесии, строк ноль - фильтр есть, офисов нет.</p>\n<h3>Франчайзи - это юрлицо, а в списке марка</h3>\n<p>Франчайзи - это не офис на карте и не название в таблице, а сторона договора: юрлицо или индивидуальный предприниматель с ИНН. Чтобы узнать, сколько фирме лет и жива ли она, нужен ЕГРЮЛ. И вот здесь список ломается сильнее всего: ИНН в нём нет. Ни в таблице, ни в карточке офиса - я открыл карточку и проверил.</p>\n<p>Значит, связать 1С-франчайзи с реестром можно только поиском по названию в регионе. Я взял случайную выборку из 150 названий (зерно генератора записано в скрипте) и прогнал каждое через поиск <a class=\"автоссылка\" href=\"https://egrul.nalog.ru\" target=\"_blank\" rel=\"noopener\">egrul.nalog.ru</a>. Запрос двухшаговый: сначала отправляешь форму и получаешь токен, потом забираешь результат по токену.</p>\n<p>``<code>python t = s.post(\"https://egrul.nalog.ru/\", data={\"query\": name, \"region\": fns_code}).json()[\"t\"] rows = s.get(f\"https://egrul.nalog.ru/search-result/{t}\").json()[\"rows\"] </code>``</p>\n<p>Тут же вторая ловушка: коды регионов у 1С свои. Алтайский край в фильтре 1С - «01», у ФНС - «22». Сводил по названию региона, причём названия у 1С тоже свои: «Республика Татарстан (Татарстан)», «Чувашская Республика - Чувашия».</p>\n<p>Поиск ФНС нечёткий: на название из трёх обычных слов он возвращает тысячи строк, медиана по выборке - 214. Поэтому совпадением я считаю только равенство имени в кавычках из краткого наименования и названия из списка после нормализации: регистр, «ё», кавычки, пробелы и дефисы.</p>\n<figure class=\"статья-кадр\" data-файл=\"habr-05-egryul.jpg\"><img src=\"данные/картинки/habr-05-egryul.jpg\" alt=\"Франчайзи - это юрлицо, и из 150 названий списка 75 связались с одним действующим юрлицом, у 19 несколько действующих тёзок, 37 не связались, 11 оказались ИП\" loading=\"lazy\"><figcaption>Франчайзи - это юрлицо, и из 150 названий списка 75 связались с одним действующим юрлицом, у 19 несколько действующих тёзок, 37 не связались, 11 оказались ИП</figcaption></figure>\n<p>Что получилось на 150 названиях:</p>\n<ul><li>75 связались с одним действующим юрлицом в своём регионе;</li><li>у 19 нашлось несколько действующих тёзок, и без второго признака не выбрать;</li><li>у 8 совпали только прекращённые юрлица: имя есть, живой фирмы с ним нет;</li><li>37 не связались вовсе;</li><li>11 - индивидуальные предприниматели, их в ЕГРЮЛ нет, они в ЕГРИП.</li></ul>\n<p>У 36 названий из 150 среди совпадений есть хотя бы одно прекращённое юрлицо. Если взять из ответа первую строку, не глядя на признак прекращения, часть сети окажется давно закрытой. Это не так: закрыт тёзка.</p>\n<h3>Почему 37 названий не связались</h3>\n<p>Я посмотрел их глазами, и почти все причины видны прямо в названиях.</p>\n<p><b>Украшения вместо имени.</b> 423 названия в списке начинаются с «1С:Франчайзи» или «1С:Франчайзинг.», а в ЕГРЮЛ фирма записана без этой приставки. Есть и обычные «Компания», «Фирма», «Группа компаний», «Внедренческий центр», пояснения в скобках вроде «(бывший ...)».</p>\n<p><b>Латиница внутри кириллицы.</b> 21 название начинается с латинской «1C», а не с кириллической «1С»: поиск по списку на «1С» их просто не найдёт. Ещё семь слов содержат одну букву чужого алфавита. Где-то это игра слов, а где-то явная опечатка: латинская «c» внутри русского слова, латинская «u» посреди слова «Франчайзинг». В одном названии и сама приставка с опечаткой: «Фрайчайзинг». На экране не видно, а <code>==</code> видит.</p>\n<p>```python LOOKALIKE = str.maketrans(\"ABCEHKMOPTXaceopxy\", \"АВСЕНКМОРТХасеорху\")</p>\n<p>def clean(name): name = re.sub(r\"\\([^)]*\\)\", \" \", name) name = PREFIXES.sub(\"\", name.strip()) # латиницу переводим только в словах, где уже есть кириллица return norm(\" \".join( w.translate(LOOKALIKE) if re.search(\"[а-я]\", w, re.I) and re.search(\"[a-z]\", w, re.I) else w for w in name.split())) ```</p>\n<p>Второй проход с такой чисткой по уже сохранённым ответам ФНС добавил 13 совпадений к 89 точным, новых запросов не понадобилось. Поэтому я сохраняю всю первую страницу ответа, а не только то, что подошло под правило: правило меняется, а ходить в реестр второй раз не хочется.</p>\n<p><b>Марка, которой нет в реестре.</b> Оставшиеся - латинские торговые марки при русском юрлице и названия, которые вообще не похожи на зарегистрированное имя. Их без ИНН не связать никак.</p>\n<p><b>Одинаковые имена у разных фирм.</b> Это видно ещё до реестра: 137 названий встречаются в списке в разных городах, одно - в семи. Сети с филиалами пишут город после запятой, а эти нет, значит, это разные фирмы с одинаковой вывеской. Группировать сеть по названию нельзя.</p>\n<p>И честное ограничение метода: я разбирал только первую страницу ответа ФНС, до 20 строк. У названий-тёзок с тысячами совпадений нужная фирма могла оказаться дальше, и часть «не связали» - это, предположительно, недобор, а не отсутствие.</p>\n<h3>Сколько лет франчайзи</h3>\n<p>У 75 названий, связанных с одним действующим юрлицом, годы регистрации - от 2002-го до 2023-го, медиана 2011. 35 зарегистрированы раньше 2010 года, 8 - начиная с 2020-го. Выборка маленькая, и это год регистрации юрлица, а не стаж работы с 1С: фирма могла прийти в сеть позже, а работать раньше под другим юрлицом. Но порядок виден: большая часть сети - фирмы с десятилетней историей, а не вчерашние стартапы.</p>\n<h3>Пять правил, которые я вынес из этого списка</h3>\n<p><b>Имя поля - не документ.</b> <code>lat</code> с долготой внутри работает годами, потому что фронтенд ошибается симметрично. Проверить координаты по одному известному адресу - пять секунд, не проверить - пять тысяч точек не в той стране.</p>\n<p><b>Первая страница отсортирована, а значит, нетипична.</b> 29 из 30 на первой странице и 260 из 5 264 во всём списке - это одна и та же регулярка.</p>\n<p><b>У сети несколько размеров, и надо писать, какой взят.</b> Слова франчайзера, его открытый список и его же карта дают три разных числа. Ни одно не враньё, они просто считают разное.</p>\n<p><b>Без общего ключа сопоставление - вероятностное.</b> Половину выборки удалось связать с одним действующим юрлицом, остальное требует либо ИНН, либо ручной проверки. Прекращённые тёзки - отдельная ловушка: без фильтра по статусу живая сеть превращается в кладбище.</p>\n<p><b>Сохраняйте сырые ответы.</b> Правило сопоставления я менял уже после обхода, а в ФНС сходил один раз.</p>\n<p>Данные разбора: список «Франчайзи, внедряющие 1С:Предприятие» на сайте фирмы «1С» и три её страницы о партнёрах, снятые 12 октября 2026 года; поиск по ЕГРЮЛ на <a class=\"автоссылка\" href=\"https://egrul.nalog.ru\" target=\"_blank\" rel=\"noopener\">egrul.nalog.ru</a> в тот же день, случайная выборка 150 названий. Названий конкретных фирм в тексте нет намеренно: разбор про данные, а не про партнёров.</p>",
 "есть_текст": true
}
