Парсинг данных с сайтов: готовые скрипты на Python для сбора информации
-
Парсинг данных с сайтов позволяет автоматизировать сбор информации, которая нужна для анализа, мониторинга цен или исследований. С помощью Python это делается быстро и просто с готовыми библиотеками. В этой статье разберём готовые скрипты, которые решают типичные задачи.
Вы узнаете, как парсить статические страницы, динамический контент и даже обходить защиты. Это поможет сэкономить часы ручного копирования данных. Проблемы с нестабильными сайтами или капчей тоже решаемы — покажу примеры кода.
Основы парсинга с Requests и BeautifulSoup
Парсинг начинается с получения HTML-кода страницы. Библиотека requests отправляет HTTP-запрос, а BeautifulSoup разбирает код и извлекает нужные элементы. Это базовый подход для статических сайтов без JavaScript.
Например, можно собрать заголовки статей или цены товаров. Представьте, вы мониторите магазин: скрипт проверяет цены ежедневно и сохраняет в файл. Такой метод работает на большинстве простых страниц, но требует проверки структуры HTML через инспектор браузера. Далее приведу готовый код для старта.
Вот базовый скрипт для парсинга заголовка и текста:
from bs4 import BeautifulSoup import requests url = 'https://example.com' response = requests.get(url) soup = BeautifulSoup(response.text, 'lxml') title = soup.find('h1').text print(title)- Установка библиотек:
pip install requests beautifulsoup4 lxml— это займёт минуту. - Проверка статуса: Добавьте
response.raise_for_status()чтобы избежать ошибок 404. - Извлечение списков: Используйте
soup.find_all('div', class_='item')для множественных элементов.
Шаг Действие Пример 1 Получить HTML requests.get(url)2 Парсить BeautifulSoup(response.text, 'lxml')3 Найти элемент soup.find('h1')Парсинг списков и пагинации на реальных сайтах
Когда сайт имеет несколько страниц, скрипт должен перебирать их автоматически. Для этого добавляем цикл по параметрам URL, например
?page=1. BeautifulSoup легко находит ссылки на страницы и строит список URL.Возьмём сайт с цитатами или товарами: сначала парсим первую страницу, ищем пагинацию, затем проходим по всем. Это полезно для сбора базы данных — скажем, 1000 товаров за раз. Логика подводит к циклу, где каждый запрос обрабатывается отдельно, с паузами против блокировок.
Готовый скрипт для пагинации:
import requests from bs4 import BeautifulSoup url = 'https://quotes.toscrape.com/' response = requests.get(url) soup = BeautifulSoup(response.text, 'lxml') # Находим все страницы links = soup.find_all('li', class_='next') # Цикл по страницам for i in range(1, 11): params = {'page': i} resp = requests.get(url, params=params) print(resp.text[:200])- Цикл по страницам: Используйте
whileс проверкой наличия next-ссылки. - Паузы между запросами:
import time; time.sleep(1)чтобы не нагружать сервер. - Сохранение данных: Записывайте в CSV с
pandas.to_csv().
Проблема Решение Библиотека Блокировка User-Agent requests Много страниц Цикл params BeautifulSoup Данные в JSON .json() requests Обработка динамических сайтов с Selenium
Динамические сайты загружают контент через JavaScript, и requests их не видит. Здесь нужен Selenium — он управляет реальным браузером, имитируя клики и скролл. Идеально для SPA-приложений или бесконечной прокрутки.
Пример: парсим соцсеть или магазин с AJAX. Selenium открывает страницу, ждёт загрузки и извлекает данные. Минус — медленнее requests, но решает задачу полностью. Подводим к настройке headless-режима для фоновой работы.
Простой скрипт для Chrome:
from selenium import webdriver from selenium.webdriver.chrome.options import Options options = Options() options.add_argument('--headless') driver = webdriver.Chrome(options=options) driver.get('https://example.com') print(driver.title) driver.quit()- Установка:
pip install selenium+ скачать chromedriver. - Headless режим: Скрывает окно браузера для сервера.
- Ожидание элементов:
WebDriverWaitдля динамического контента. - Прокси: Добавьте
--proxy-server=ip:portпротив блокировок.
Функция Описание Пример .get() Открыть URL driver.get(url) .find_element() Найти элемент by.CLASS_NAME .quit() Закрыть driver.quit() Продвинутые приёмы и обход защит
Сайты защищаются от парсинга User-Agent, капчей или rate-limit. Добавляем заголовки, прокси и ротацию IP. Scrapy подходит для крупных проектов с pipeline-обработкой.
Реальный случай: мониторинг цен — скрипт меняет User-Agent и паузы. Аргумент за: экономия времени. Логично перейти к комбо requests + Selenium или готовым фреймворкам.
Код с заголовками:
import requests headers = {'User-Agent': 'Mozilla/5.0'} response = requests.get(url, headers=headers)- Scrapy фреймворк: Для сложных краулеров с middleware.
- Капча: Используйте сервисы вроде 2captcha API.
- Хранение: Pandas в Excel или SQLite база.
Защита Обход Инструмент User-Agent Headers requests Капча API сервисы Selenium Rate-limit Sleep + proxy time, proxies Что ещё предстоит освоить в парсинге
Готовые скрипты решают 80% задач, но остаётся работа с API сайтов вместо парсинга. Стоит изучить XPath для точного поиска и облачные сервисы для масштаба. Для больших объёмов подойдёт распределённый парсинг с Celery.
Далее думайте о легальности: проверяйте robots.txt и ToS. Экспериментируйте с кодом, комбинируя библиотеки под конкретный сайт.
- Установка библиотек:
© 2024 - 2025 ExLends, Inc. Все права защищены.