VPS для бота-парсера: сбор данных 24/7
Парсер собирает цены, объявления, курсы или новости по расписанию — и делает это надёжнее всего с сервера, который всегда онлайн. Разберём деплой бота-парсера на VPS: запуск по cron, работа с прокси, обход блокировок и хранение результатов.
Содержание
Почему парсер держат на VPS
['Парсинг — это регулярность. Собирать цены раз в час имеет смысл только если сборщик работает без пропусков, а домашний компьютер выключается на ночь и зависит от вашего интернета. Пропущенный запуск — дыра в данных, которую потом не восстановить.', 'VPS даёт круглосуточную работу и, что важнее для парсинга, отдельный внешний IP. С серверного IP парсер не мешает вашему домашнему браузингу, а при необходимости IP можно менять через прокси, не трогая основную сеть. Плюс сервер обычно имеет широкий канал — скачивание тысяч страниц идёт быстро.', '- Запуск по расписанию — cron не пропустит время сбора.
- Отдельный IP — не пересекается с личным трафиком.
- Широкий канал — массовая загрузка страниц идёт быстро.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK и США. Оплата картой РФ и по СБП.
Арендовать VPS для бота-парсераУстановка окружения
['Ставим Python и типовой стек парсинга: requests для HTTP, BeautifulSoup или lxml для разбора HTML. Для JS-сайтов может понадобиться Playwright, но это тяжелее по ресурсам.', "sudo apt update && sudo apt install -y python3 python3-venv git\nsudo useradd -r -m -s /bin/bash parser\nsudo -u parser bash -c 'cd ~ && python3 -m venv venv && venv/bin/pip install requests beautifulsoup4 lxml'", 'Простой сборщик, который тянет страницу и достаёт заголовки:', "import requests\nfrom bs4 import BeautifulSoup\n\nheaders = {'User-Agent': 'Mozilla/5.0'}\nr = requests.get('https://example.com', headers=headers, timeout=15)\nsoup = BeautifulSoup(r.text, 'lxml')\nfor h in soup.select('h2'):\n print(h.get_text(strip=True))"]
Запуск по расписанию через cron
['Для периодического парсинга проще всего cron. Он запускает скрипт по времени, а не держит процесс постоянно — экономит ресурсы, если сбор нужен раз в час или в день.', 'sudo -u parser crontab -e\n# собирать каждый час в 5 минут:\n5 * * * * /home/parser/venv/bin/python /home/parser/scrape.py >> /home/parser/scrape.log 2>&1', 'Перенаправление в лог с 2>&1 сохранит и ошибки — без этого упавший запуск пройдёт незамеченным. Если же парсер должен мониторить события в реальном времени, а не по расписанию, оформляйте его как systemd-сервис с Restart=always.']
Прокси и обход блокировок
['Сайты защищаются от парсинга по частоте запросов с одного IP. Если данных много, нужна ротация прокси и разумные паузы между запросами. requests поддерживает прокси через параметр proxies.', "proxies = {'http': 'http://user:pass@proxy:8080',\n 'https': 'http://user:pass@proxy:8080'}\nr = requests.get(url, headers=headers, proxies=proxies, timeout=15)", 'Главное правило вежливого парсинга — уважать сайт: ставьте задержки (time.sleep), читайте robots.txt, не создавайте нагрузку, эквивалентную DDoS. Соблюдайте условия использования сайтов и законодательство — парсинг персональных данных и защищённого контента может быть незаконным.', 'import time, random\ntime.sleep(random.uniform(1.5, 4.0)) # человекоподобная пауза']
Хранение результатов
['Собранные данные надо где-то держать. Для небольших объёмов хватает SQLite или CSV прямо на сервере, для крупных — PostgreSQL. NVMe-диск важен здесь: тысячи операций записи в базу идут заметно быстрее, чем на обычном SATA.', "import sqlite3\ndb = sqlite3.connect('/home/parser/data.db')\ndb.execute('CREATE TABLE IF NOT EXISTS prices(ts INTEGER, item TEXT, price REAL)')\ndb.execute('INSERT INTO prices VALUES (?,?,?)', (int(time.time()), 'item1', 199.0))\ndb.commit()", 'Ежедневные бэкапы VPS защитят накопленную базу — потерять месяц собранных данных из-за сбоя диска обидно.']
Сервер и частые ошибки
['Парсеру важны быстрый диск (запись данных), широкий канал и стабильный аптайм. На тарифах MAATRIX это AMD EPYC + NVMe и локации UK/США — с зарубежного IP многие сайты отдают контент без региональных ограничений. Ежедневные бэкапы сохранят базу, а оплата картой РФ, СБП, криптой или MAAT удобна из России. От $8/мес.', '- Нет таймаута у requests — зависший запрос вешает весь скрипт.
- Нет пауз между запросами — сайт банит IP за флуд.
- Логи не пишутся — упавший cron-запуск проходит незамеченным.
- Парсинг без учёта robots.txt и закона — юридические риски.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK и США. Оплата картой РФ и по СБП.
Арендовать VPS для бота-парсераЧастые вопросы
cron или systemd для парсера?
cron — для сбора по расписанию (раз в час/день). systemd с Restart=always — для парсеров, что мониторят события в реальном времени постоянным процессом.
Нужны ли прокси для парсинга?
При небольших объёмах хватает пауз между запросами. Прокси и ротация IP нужны, когда сайт блокирует по частоте обращений с одного адреса.
Законно ли парсить сайты?
Зависит от данных и условий сайта. Публичная информация обычно допустима, но парсинг персональных данных или защищённого контента может нарушать закон и ToS — проверяйте юридическую сторону.