132 подписчика
Создание парсера данных с сайта: Пошаговое руководство
Сегодня я научился создавать парсер данных с сайта, что оказалось увлекательным и полезным опытом. В этой статье я расскажу, как я разработал парсер для извлечения информации о книгах. Мы пройдемся по шагам, которые я использовал для создания этого парсера, и разберем ключевые моменты, которые помогут вам понять процесс.
Основные этапы разработки парсера
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 минуты
31 июля