Найти тему

Создание парсера данных с сайта: Пошаговое руководство


Сегодня я научился создавать парсер данных с сайта, что оказалось увлекательным и полезным опытом. В этой статье я расскажу, как я разработал парсер для извлечения информации о книгах. Мы пройдемся по шагам, которые я использовал для создания этого парсера, и разберем ключевые моменты, которые помогут вам понять процесс.

Основные этапы разработки парсера

1. Импорт необходимых библиотек
Первым шагом было импортирование библиотек, необходимых для парсинга веб-страниц:
import requests
from bs4 import BeautifulSoup
import csv
requests: позволяет отправлять HTTP-запросы к веб-страницам.
BeautifulSoup: используется для парсинга HTML и XML документов.
csv: модуль для работы с файлами CSV (в данном коде он не используется, но его можно добавить для сохранения данных).

2. Определение базового URL
Далее я определил базовый URL для страницы с книгами:
base_url = 'https:/...63'
Этот URL указывает на раздел сайта с книгами, которые я хотел проанализировать.

3. Получение числа страниц
Для того чтобы пройтись по всем страницам раздела, мне нужно было узнать, сколько всего страниц доступно. Я написал функцию number_str, которая делает запрос к базовому URL, парсит HTML и извлекает номер последней страницы:
def number_str(base_url):
  html = requests.get(base_url).text
  soup = BeautifulSoup(html, 'html.parser')
  nums = soup.find_all('span', class_='pagination__text')
  last_nums_pages = None

  for nums_links in nums:
   last_nums_pages = nums_links
   nums_pages = last_nums_pages.get_text(strip=True)

  return nums_pages

Функция number_str находит элемент с классом pagination__text, который содержит номер последней страницы, и возвращает это число.

4. Парсинг данных с нескольких страниц
Теперь, когда у нас есть общее количество страниц, мы можем перейти к извлечению данных. В функции parser_boock я обрабатываю каждую страницу по очереди:
def parser_boock(nums_pages, base_url):
  for pages in range(1, int(nums_pages) + 1):
   base_url_patterns = base_url + '?page=' + str(pages)
   print(base_url_patterns)

   html = requests.get(base_url_patterns).text
   soup = BeautifulSoup(html, 'html.parser')
   articls = soup.find_all('article', class_='product-card product-card product')

   for i, items in enumerate(articls):
   url = items.get("href")
   title = soup.find_all('div', class_='product-title__head')[i]
   title_book = title.get_text(strip=True)
   img = soup.find_all('img', class_='product-picture__img')[i]
   img_book = img.get('data-srcset')
   img_str_link = img_book.split('?width=400&height=560&fit=bounds 2x')[0] if img_book else img.get('src')

   old_prices = items.find('div', class_='product-price__old')
   old_prices_text = old_prices.get_text(strip=True) if old_prices else ''

   sale_prices = items.find('div', class_='product-price__value')
   sale_prices_text = sale_prices.get_text(strip=True) if sale_prices else ''

   autor = items.find('div', class_='product-title__author')
   autor_text = autor.get_text(strip=True) if autor else 'Автор не указан'

   print(title_book, old_prices_text, sale_prices_text, autor_text)

В этом коде я проанализировал каждую страницу, извлек информацию о книгах (название, старую и новую цену, автора) и распечатал её. Я также обработал URL изображения, чтобы получить правильную ссылку.

Заключение
Создание парсера данных с сайта — это отличное упражнение для понимания работы с веб-технологиями и обработки данных. На примере создания парсера я узнал, как обходить страницы, извлекать нужные данные и обрабатывать HTML-документы. Этот опыт будет полезен для дальнейшей работы с веб-данными и создания более сложных парсеров.
Создание парсера данных с сайта: Пошаговое руководство  Сегодня я научился создавать парсер данных с сайта, что оказалось увлекательным и полезным опытом.
3 минуты