Веб-Скраппинг

Что необходимо знать?

  • HTML: Необходимо знать HTML-структуру веб-страницы, чтобы понимать, как получить нужные данные.
  • CSS: Каскадные таблицы стилей помогают в разметке и оформлении веб-страниц. Знание CSS поможет в работе со структурой HTML и определении селекторов.
  • Python: Веб-скрапинг в основном выполняется с использованием языка программирования Python. Необходимо знать основные конструкции языка, типы данных, функции и библиотеки, такие как Requests, Beautiful Soup, Selenium.
  • XPath: Это язык запросов, который используется для извлечения данных из HTML-страниц. Он позволяет определить путь к элементу на странице.
  • Регулярные выражения: Используются для поиска и извлечения данных из текстовых строк.
  • HTTP и HTTPS: Необходимо знать, как работает протокол передачи гипертекста и как веб-серверы обрабатывают запросы.
  • CLI: Умение работать с командной строкой поможет в установке и настройке необходимых инструментов.
  • Database: Некоторые проекты по веб-скрапингу могут включать работу с базами данных.
  • Этика веб-скрапинга: Необходимо соблюдать правила этики веб-скрапинга, чтобы не нарушать законы и соблюдение авторских прав на полученные данные.

Веб-сайты для скраппинга

  • Books To Scrape - это сайт с каталогом книг, содержащий информацию о книгах, такую как автор, цена, описание и т.д.
  • Quotes to Scrape - это сайт для изучения основных концепций веб-скрапинга, таких как выборка элементов с помощью CSS-селекторов, работа с пагинацией и т.д.
  • Crummy - это сайт документации Beautiful Soup, который можно использовать для практики веб-скрапинга с помощью Beautiful Soup.
  • Data Camp - это сайт для онлайн-обучения, который также содержит много интересной информации, которую можно извлечь с помощью веб-скрапинга.
  • IMDB - это сайт, содержащий информацию о фильмах, актерах, режиссерах и т.д.
  • Reddit - это сайт социальных новостей, который можно использовать для практики извлечения информации из нескольких страниц.

Визуальное знакомство с веб сайтом

На примере сайта для поиска работы hh.ru

Перед началом веб-скрапинга важно обратить внимание на следующие аспекты:

  • Структуру сайта
    Необходимо понять, как устроен сайт, какие страницы в него входят, как связаны между собой различные элементы.
  • Разрешения на скрапинг
    Некоторые сайты запрещают скрапинг или ограничивают его. Перед началом работы необходимо убедиться в том, что скрапинг разрешен и что нет ограничений на количество запросов.
  • Формат данных
    Необходимо определить, какие данные нужно извлекать с сайта и в каком формате они представлены.
  • Методы идентификации элементов
    Необходимо понять, как идентифицировать элементы на странице, которые нужны для извлечения данных. Это могут быть классы CSS, теги HTML, XPath-выражения и т.д.
  • Способы парсинга
    Необходимо выбрать способ парсинга данных, наиболее подходящий для данного сайта. Например, можно использовать библиотеки BeautifulSoup или lxml для парсинга HTML-кода страницы.
Подробнее: Разрешения на скрапинг
  1. Проверьте robots.txt файла сайта. robots.txt является стандартом для указания правил для веб-краулеров. Он сообщает, какие страницы сайта можно сканировать, а какие - нет. Обычно файл robots.txt находится в корневом каталоге сайта. Например, для сайта http://books.toscrape.com/ его путь будет выглядеть как http://books.toscrape.com/robots.txt.
  2. Проверьте заголовки ответа сервера. Они могут указать на то, есть ли ограничения на сканирование.
  3. Используйте инструменты веб-аналитики, такие как Google Analytics, чтобы проверить, есть ли на сайте ограничения на сканирование.
  4. Проверьте, есть ли у веб-сайта правила для скрытия информации от веб-краулеров, например, применение JavaScript, CAPTCHA или IP блокировки.
  5. Обратитесь к администраторам сайта, чтобы узнать о возможности сканирования данных с их сайта и получить разрешение на выполнение веб-скрапинга.



Анализ веб-сайта

Необходимо понять какие данные мы можем извлечь из этого сайта. На пример: * Название книги * Цена * Описание * Код товара * Книга в наличии или нет * Ссылка на обложку книги

Books Books

ID Book_Title Price Description UPC Availability Link
1 When We Collided £31.77 We are seventeen and shattered and
still dancing. We have messy, throbbing hearts, and we
are stronger than anyone could ever know
3ecb690d1542c568 In stock (16 available) Link

Начало веб-скраппинга

Сформируем структуру проекта

WEBSCRAPPING/
│   
├── BooksToScrape/          # папка с приложением.
│   │ 
│   ├── main.py             # файл, содержащий основную логику приложения.
│   │ 
│   ├── database.py         # файл, отвечающий за подключение к базе данных.
│   │ 
│   ├── requirements.txt    # файл, содержащий список зависимостей для проекта.
│   │ 
│   └── .env_db             # файл, описываются параметры для подключения к БД
│ 
└── README.md               # файл с описанием проекта и инструкциями по его использованию.

Библиотеки для скраппинга

В файл requirements.txt сохраните следующие библиотеки:

requests
beautifulsoup4
  • Библиотека requests в Python предоставляет простой и удобный интерфейс для отправки HTTP-запросов и работы с ответами на них. С помощью этой библиотеки можно получить HTML-страницы, изображения, файлы и другие ресурсы из Интернета. Библиотека requests может использоваться во многих задачах, включая веб-скрапинг.

  • Библиотека Beautiful Soup является инструментом для разбора HTML- и XML-документов. Она позволяет обращаться к отдельным элементам HTML-страницы, находить элементы по их атрибутам, классам и тегам, а также извлекать данные из них. Библиотека Beautiful Soup широко используется для веб-скрапинга в Python благодаря своей простоте и мощности. Она может работать с HTML-кодом, который не соответствует стандартам, и автоматически исправлять ошибки разметки.


Виртуальное окружение и установка библиотек

Создайте виртуальное окружение с именем venv и активируйте его:

python3 -m venv venv
source venv/bin/activate

Установите зависимости из файла requirements.txt, затем просмотрите установленные библиотеки:

pip install -r requirements.txt
pip list

Python main.py