Перейти к содержанию
  • Лента
  • Категории
  • Последние
  • Метки
  • Популярные
  • Пользователи
  • Группы
Свернуть
exlends
Категории
  1. Главная
  2. Категории
  3. Новости
  4. Парсинг данных с сайтов: готовые скрипты на Python для сбора информации

Парсинг данных с сайтов: готовые скрипты на Python для сбора информации

Запланировано Прикреплена Закрыта Перенесена Новости
1 Сообщения 1 Постеры 1 Просмотры
  • Сначала старые
  • Сначала новые
  • По количеству голосов
Ответить
  • Ответить, создав новую тему
Авторизуйтесь, чтобы ответить
Эта тема была удалена. Только пользователи с правом управления темами могут её видеть.
  • kirilljsxK Не в сети
    kirilljsxK Не в сети
    kirilljsx
    js
    написал отредактировано
    #1

    Парсинг данных с сайтов позволяет автоматизировать сбор информации, которая нужна для анализа, мониторинга цен или исследований. С помощью 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. Экспериментируйте с кодом, комбинируя библиотеки под конкретный сайт.

    1 ответ Последний ответ
    0

    Категории

    • Главная
    • Новости
    • Фронтенд
    • Бекенд
    • Языки программирования

    Контакты

    • Сотрудничество
    • info@exlends.com
    • Наш чат
    • Наш ТГ канал

    © 2024 - 2025 ExLends, Inc. Все права защищены.

    Политика конфиденциальности
    • Войти

    • Нет учётной записи? Зарегистрироваться

    • Войдите или зарегистрируйтесь для поиска.
    • Первое сообщение
      Последнее сообщение
    0
    • Лента
    • Категории
    • Последние
    • Метки
    • Популярные
    • Пользователи
    • Группы