Python-парсер для Бітрікс: архітектура та реалізація

Python-парсер для Бітрікс: архітектура та реалізація Ви зіткнулися з ситуацією, коли стандартний імпорт через CSV або PHP-скрипт упирається в продуктивність? Наприклад, потрібно зібрати 50 000 товарів із сайту конкурента, але PHP не тягне headless-браузер, а каталог партнера віддає дані тільки че
Послуги, які ми пропонуємо
Показано 1 з 1Усі 1626 послуг
Python-парсер для Бітрікс: архітектура та реалізація
Середній
~1-2 тижні

Наші компетенції:

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1440
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Розробка веб-сайту для компанії ФІКСПЕР
    1013
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Розробка на базі Бітрікс, Бітрікс24, 1С для компанії Development of an Online
    751
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    872
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    791
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    1153

Python-парсер для Бітрікс: архітектура та реалізація

Ви зіткнулися з ситуацією, коли стандартний імпорт через CSV або PHP-скрипт упирається в продуктивність? Наприклад, потрібно зібрати 50 000 товарів із сайту конкурента, але PHP не тягне headless-браузер, а каталог партнера віддає дані тільки через SPA. Ми вирішуємо такі завдання: проєктуємо парсер на Python, який завантажує дані в проміжне сховище, а PHP-імпортер переносить їх в інфоблоки Бітрікс. Понад 5 років досвіду та 40+ реалізованих проектів — від простих RSS-агрегаторів до систем машинного навчання для класифікації контенту.

Багато власників великих каталогів на Бітрікс стикаються з проблемами при оновленні товарів: ручне введення займає дні, імпорт з Excel збиває кодування, а партнери не надають API. Наш підхід — Python для збору, Бітрікс для зберігання та видачі. Це дає економію часу до 70% і повну прозорість процесу. Середня вартість парсера — від $500 до $2000 в залежності від складності.

Чому Python, а не PHP

Конкретні причини, а не абстрактні переваги:

  • Асинхронність. asyncio + aiohttp обробляють 100+ запитів паралельно. PHP curl_multi на практиці дає 20–50 з'єднань.
  • Headless-браузер. Playwright для Python стабільно працює з React-сайтами. PHP-обгортки Puppeteer менш надійні.
  • NLP та ML. Класифікація текстів, вилучення сутностей — бібліотеки spaCy, transformers не мають аналогів у PHP.
  • Бібліотеки. BeautifulSoup, lxml, Scrapy — перевірені інструменти з великою спільнотою.
  • За швидкістю Python краще за PHP у 3-4 рази: Scrapy обробляє 10 000 URL за 5–10 хвилин, а PHP-рішення з curl_multi — за 30–40 хвилин.

Як влаштована архітектура парсера?

Парсер на Python працює як окремий сервіс. Дані проходять через проміжне сховище — таблиці в спільній базі даних або черги RabbitMQ. Python пише сирі дані, PHP-агент забирає їх і пише в інфоблоки за допомогою CIBlockElement::Add.

Варіанти сховища

Спосіб Обсяг даних Особливість
JSON-файли до 1 000 Просто, без залежностей
PostgreSQL/MySQL 1 000–100 000 Індекси, транзакції
REST API Бітрікс будь-який Прямий запис, але HTTP overhead
Redis/RabbitMQ потокова Черги, масштабування

Для більшості проєктів оптимальна спільна база даних: Python пише в проміжну таблицю, PHP імпортує пакетами кожні 5–15 хвилин через cron.

Порівняння підходів: Python vs PHP для парсингу

Критерій Python PHP
Асинхронні запити asyncio + aiohttp (100+ паралельно) curl_multi (20-50)
Headless-браузер Playwright (стабільний) Puppeteer (менш надійний)
NLP/ML spaCy, transformers відсутні
Екосистема парсингу Scrapy (повноцінний фреймворк) Goutte (обмежений)

Приклад реалізації на Scrapy

Код спайдера

Scrapy — фреймворк, який бере на себе черги URL, retry, throttling. Spider для каталогу:

import scrapy class CatalogSpider(scrapy.Spider): name = 'catalog' start_urls = ['http://books.toscrape.com/catalogue/'] def parse(self, response): for product in response.css('.product-card'): yield { 'name': product.css('h2::text').get(), 'price': product.css('.price::text').get(), 'description': product.css('.desc::text').get(), 'image': product.css('img::attr(src)').get(), 'url': product.css('a::attr(href)').get(), } next_page = response.css('.pagination .next::attr(href)').get() if next_page: yield response.follow(next_page, self.parse) 
Pipeline для запису в БД
import psycopg2 class BitrixPipeline: def open_spider(self, spider): self.conn = psycopg2.connect( host='localhost', port=5433, dbname='bitrix_db', user='bitrix' ) def process_item(self, item, spider): cursor = self.conn.cursor() cursor.execute(""" INSERT INTO parser_staging (name, price, description, image_url, source_url, status) VALUES (%s, %s, %s, %s, %s, 'new') ON CONFLICT (source_url) DO UPDATE SET price = EXCLUDED.price, updated_at = NOW() """, (item['name'], item['price'], item['description'], item['image'], item['url'])) self.conn.commit() return item 

Headless-браузер для SPA

Сайти на React або Vue віддають порожній HTML. Playwright вирішує це:

from playwright.async_api import async_playwright async def parse_spa(url): async with async_playwright() as p: browser = await p.chromium.launch(headless=True) page = await browser.new_page() await page.goto(url, wait_until='networkidle') content = await page.content() await browser.close() return content 

Ресурсоємність: кожен екземпляр Chromium споживає 100–300 МБ RAM. Для масового парсингу використовуйте пул із 3–5 екземплярів і чергу завдань.

Як передати дані в Бітрікс?

PHP-скрипт на стороні Бітрікс забирає дані з проміжної таблиці:

$rows = $DB->Query("SELECT * FROM parser_staging WHERE status = 'new' LIMIT 100"); while ($row = $rows->Fetch()) { $elementId = (new CIBlockElement())->Add([ 'IBLOCK_ID' => CATALOG_IBLOCK_ID, 'NAME' => $row['name'], 'XML_ID' => md5($row['source_url']), // ... ]); if ($elementId) { $DB->Query("UPDATE parser_staging SET status='imported', bx_id={$elementId} WHERE id={$row['id']}"); } } 

Скрипт запускається по cron кожні 5–15 хвилин і обробляє нові записи пакетами.

Деплой та моніторинг

Python-парсер деплоїться окремо від Бітрікс. Використовуйте systemd-сервіс або cron для запуску за розкладом. Virtual environment (venv) ізолює залежності. Логування через модуль logging з ротацією. Моніторинг — скрипт перевіряє, що парсер відпрацював за останні N годин, і надсилає алерт при зависанні.

Типовий crontab:

0 1 * * * cd /opt/parsers && /opt/parsers/venv/bin/scrapy crawl catalog 2>> /var/log/parser.log 0 */4 * * * cd /opt/parsers && /opt/parsers/venv/bin/python news_parser.py 2>> /var/log/parser.log 

Ми використовуємо custom healthcheck: кожні 4 години перевіряємо, що парсер відпрацював без помилок. Якщо завис — автоматичний перезапуск і повідомлення в Telegram. Для критичних проєктів додаємо систему алертів на базі Prometheus та Grafana.

Коли потрібен Python-парсер?

Якщо джерело — SPA (React/Vue/Angular), обсяг даних перевищує 10 000 елементів, потрібна класифікація контенту або захист від DDoS — Python дає значну перевагу.

Що входить в роботу

  • Аналіз джерела та узгодження архітектури.
  • Розробка павука на Scrapy або асинхронного парсера на aiohttp.
  • Налаштування імпортера для Бітрікс (інфоблоки, HL-блоки, торгові пропозиції).
  • Створення проміжної бази даних та скриптів синхронізації.
  • Деплой на сервер (systemd, cron, моніторинг).
  • Документація з експлуатації та навчання адміністратора.
  • Підтримка після запуску та гарантія стабільної роботи 24/7.

Орієнтовні терміни та вартість

Термін розробки парсера — від 5 до 20 робочих днів залежно від складності джерела та обсягу даних. Середня вартість — від $500 до $2000. Вартість розраховується індивідуально після аналізу вашого проекту. Пропонуємо розробку під ключ: пишіть нам, оцінимо проект протягом дня.