Кафедра ИСиТ УО ВГТУ
  • Специальности
    • Экономика электронного бизнеса
    • Информационные системы
    • Information Control Systems
  • Каталог
  • Сайт кафедры
  • Сервисы
    • GitLab
    • ownCloud
    • JupyterHub
    • JupyterHub 2
    • VNC
    • Soft
  1. ИСиТ
  2. РиОИИС
  3. Практика
  4. Лаб. работа “Сбор данных с помощью веб-скрейпинга”
  • ИСиТ
    • АОС
      • Теория
        • Введение в операционные системы
        • Управление памятью
        • Управление процессами
        • Система ввода-вывода
        • Информационная безопасность
        • Виртуализация
      • Практика
    • РВПсИПП
      • Теория
        • Настройка среды разработки для PHP
        • Разработка web-приложений на базе фреймворков
        • Основы Laravel
        • Шаблоны в Laravel
        • Модели и базы данных в Laravel
        • Формы и валидация в Laravel
        • Аутентификация и авторизация в Laravel
        • Создание REST API в Laravel
        • Работа с файлами и изображениями в Laravel
        • Тестирование и отладка в Laravel
        • Введение в фреймворк Symfony
        • Маршруты и контроллеры в Symfony
        • Шаблоны и Twig в Symfony
        • Формы и валидация в Symfony
        • Доступ к базам данных в Symfony
        • Аутентификация и авторизация в Symfony
        • Сервисы и зависимости в Symfony
        • Создание REST API в Symfony
        • Работа с файлами и медиа в Symfony
        • Сравнение и выбор фреймворка
        • Развертывание веб-приложения
      • Практика
        • Лаб. работа 1 “Создание нового приложения Laravel”
        • Лаб. работа 2 “Добавление главной страницы и базовых маршрутов”
        • Лаб. работа 3 “Создание моделей, миграций и сидеров”
        • Лаб. работа 4 “Создание индексных страниц и пагинация”
        • Лаб. работа 5 “Создание форм для работы с сущностями”
        • Лаб. работа 6 “Работа с файлами (эмуляция S3-хранилища)”
        • Лаб. работа “Создание маршрутов в Laravel”
        • Лаб. работа “Работа с базами данных в Laravel”
        • Лаб. работа “Работа с формами в Laravel”
        • Лаб. работа “Аутентификация и авторизация в Laravel”
        • Лаб. работа “Работа с файлами в Laravel”
        • Лаб. работа “Тестирование и оптимизация в Laravel”
        • Лаб. работа “Создание REST API в Laravel”
        • Лаб. работа “Основы Symfony”
        • Лаб. работа “Шаблоны и представления в Symfony”
        • Лаб. работа “Работа с базами данных в Symfony”
        • Лаб. работа “Фомы и аутентификация в Symfony”
        • Лаб. работа “Сервисы и зависимости в Symfony”
        • Лаб. работа “REST API в Symfony”
        • Лаб. работа “Работа с медиа контентом в Symfony”
        • Лаб. работа “Создание и развертывание проекта”
    • ПСП
      • Теория
        • Введение
        • Протокол HTTP
        • Программирование с использованием сокетов
        • Введение в PHP
        • Работа с базами данных в PHP
        • Объектно-ориентированные возможности PHP
        • Настройка среды разработки для PHP
        • Разработка web-приложений на базе фреймворков
      • Практика
        • Программное обеспечение
        • Регистрация в JupyterHub
        • Лаб. работа “Почтовые протоколы”
        • Лаб. работа “Протокол FTP”
        • Лаб. работа “Протокол HTTP”
        • Лаб. работа “Программирование сетевых приложений с использованием сокетов”
        • Лаб. работа “Основы PHP”
        • Лаб. работа “Массивы в PHP”
        • Лаб. работа “Создание веб-приложений с использованием Slim”
    • Компьютерные сети
      • Теория
        • Введение в компьютерные сети
        • Топологии сетей
        • Кодирование и мультиплексирование
        • Стеки протоколов
        • Адресация в компьютерных сетях
        • Система доменных имен (DNS)
        • Программирование с использованием сокетов
        • Введение в PHP
        • Протокол HTTP
        • Введение в компьютерные сети
      • Практика
        • Программное обеспечение
        • Регистрация в JupyterHub
        • Лаб. работа “Почтовые протоколы”
        • Лаб. работа “Протокол FTP”
        • Лаб. работа “Протокол HTTP”
        • Лаб. работа “Программирование сетевых приложений с использованием сокетов”
        • Лаб. работа “Основы PHP”
        • Лаб работа “Массивы в PHP”
    • РиОИИС
      • Теория
        • Классификация оптимизационных задач
        • Генетические алгоритмы
        • Системы массового обслуживания
        • Теория игр
        • Машинное обучение
        • Глубокое обучение (Deep learning)
        • Основы функционального программирования
        • Основы программирования на Haskell
        • Введение в логическое программирование
        • Инференция и рассуждения в логическом программировании
        • Разработка экспертных систем
        • Интеллектуальные системы и их архитектура
        • Веб-скрэйпинг
        • Сбор данных с открытых API
      • Практика
        • JupyterHub
        • Лаб. работа “Методы одномерной оптимизации”
        • Лаб. работа “Методы многомерной оптимизации”
        • Лаб. работа “Функции в Python”
        • Лаб. работа “Рекурсия в Python”
        • Лаб. работа “Итераторы в Python”
        • Лаб. работа “Генетические алгоритмы”
        • Лаб. работа “Haskell”
        • Лаб. работа “Логическое программирование”
        • Лаб. работа “Сбор данных с помощью веб-скрейпинга”
    • КСКР
      • Практика
        • Лаб. работа “Одномерные и двумерные массивы в C#”
        • Лаб. работа “Обращение матриц в C#”
    • Системное программирование
      • Теория
        • Управление памятью в Windows
        • Файловые операции в Windows
        • Управление процессами в Windows
        • Графический интерфейс Windows
        • ОС Unix
      • Практика
        • Лаб. работа “Работа с динамической памятью в Windows”
        • Лаб. работа “Операции с файлами в Windows”
        • Лаб. работа “Управление процессами в Windows”
        • Лаб. работа “Работа с виртуальной машиной Linux”
        • Лаб. работа “Язык командного энтерпритатора Shell”
        • Лаб. работа “Работа с файлами в Linux”
        • Лаб. работа “Работа с процессами в Linux”

Содержание

  • Лабораторная работа: Сбор данных с помощью веб-скрейпинга
    • Цель работы
    • Задания
  1. ИСиТ
  2. РиОИИС
  3. Практика
  4. Лаб. работа “Сбор данных с помощью веб-скрейпинга”

Лаб. работа “Сбор данных с помощью веб-скрейпинга”

Разработка и оптимизация интеллектуальных информационных систем
Практика
Автор

Бизюк Андрей

Дата публикации

10 сентября 2024 г.

Лабораторная работа: Сбор данных с помощью веб-скрейпинга

Цель работы

Изучить основные концепции и методы работы с фреймворком Scrapy, включая создание проекта, написание пауков, парсинг данных и сохранение их в файлы.

Задания

  1. Создание виртуальной среды

    1.1. Создайте виртуальную среду с помощью venv:

    python -m venv scrapy_env

    1.2. Активируйте виртуальную среду:

    • На Windows:

      scrapy_env\Scripts\activate
    • На macOS и Linux:

      source scrapy_env/bin/activate

    1.3. Убедитесь, что виртуальная среда активирована. В командной строке должно появиться (scrapy_env) перед приглашением.

  2. Установка и настройка Scrapy

    2.1. Установите Scrapy:

    pip install scrapy

    2.2. Создайте новый проект Scrapy:

    scrapy startproject lab_scrapy
  3. Создание паука

    3.1. Перейдите в директорию проекта:

    cd lab_scrapy

    3.2. Создайте нового паука для скрейпинга веб-сайта (например, quotes.toscrape.com):

    scrapy genspider quotes quotes.toscrape.com
  4. Написание паука

    4.1. Откройте файл паука quotes.py, созданный в директории spiders.

    4.2. Измените паука, чтобы он собирал цитаты, авторов и теги с сайта:

    import scrapy
    
    class QuotesSpider(scrapy.Spider):
        name = "quotes"
        start_urls = [
            'http://quotes.toscrape.com/page/1/',
        ]
    
        def parse(self, response):
            for quote in response.css('div.quote'):
                yield {
                    'text': quote.css('span.text::text').get(),
                    'author': quote.css('span small.author::text').get(),
                    'tags': quote.css('div.tags a.tag::text').getall(),
                }
    
            next_page = response.css('li.next a::attr(href)').get()
            if next_page is not None:
                next_page = response.urljoin(next_page)
                yield scrapy.Request(next_page, callback=self.parse)
  5. Запуск паука

    5.1. Запустите паука для сбора данных:

    scrapy crawl quotes
  6. Сохранение данных

    6.1. Запустите паука и сохраните данные в файл формата JSON:

    scrapy crawl quotes -o quotes.json

    6.2. Откройте файл quotes.json и проверьте собранные данные.

  7. Дополнительные задания

    7.1. Модифицируйте паука для сбора дополнительной информации.

    7.2. Изучите возможности использования Item Pipelines для постобработки данных перед их сохранением. Реализуйте простую pipeline для очистки или трансформации данных.

    7.3. Настройте паука для работы с другими страницами сайта.

Самостоятельные задания

  1. Анализ и логирование данных

    1.1. Добавьте в паука логирование, чтобы отслеживать процесс скрейпинга, например, количество собранных цитат или текущую страницу.

    1.2. Изучите, как использовать scrapy.statscollectors для сбора статистики по работе паука, и реализуйте сбор и вывод основных метрик (например, количество успешных запросов, количество ошибок).

  2. Работа с различными форматами данных

    2.1. Изучите, как сохранять данные в формате CSV, и модифицируйте паука для сохранения данных в quotes.csv.

    2.2. Реализуйте сохранение данных в базу данных SQLite. Создайте соответствующую таблицу и используйте Scrapy’s Feed Exporters для сохранения данных.

  3. Оптимизация производительности

    3.1. Настройте параллельное выполнение запросов для ускорения скрейпинга. Изучите параметры CONCURRENT_REQUESTS и DOWNLOAD_DELAY в settings.py.

    3.2. Реализуйте механизм повторного выполнения запросов при возникновении ошибок, используя RetryMiddleware.

  4. Обработка и анализ данных

    4.1. Реализуйте функцию для удаления дубликатов данных из собранных цитат.

    4.2. Напишите скрипт на Python для простого анализа собранных данных (например, подсчет количества цитат каждого автора, анализ часто встречающихся тегов).

Отчет по работе

  1. Описание задачи.
  2. Пошаговое выполнение заданий с кодом и объяснениями.
  3. Примеры собранных данных.
  4. Проблемы, с которыми столкнулись, и способы их решения.
  5. Возможные улучшения и дальнейшие шаги.
Наверх
Лаб. работа “Логическое программирование”
КСКР