Добавить в корзинуПозвонить
Найти в Дзене
Анастасия Софт

Пишем свой парсер на Python: собираем данные с сайтов красиво

— или как почувствовать себя цифровым Шерлоком Парсинг — это искусство и наука одновременно. Это когда ты заходишь не с фронта, а по-честному — через requests и BeautifulSoup, и вежливо просишь у сайта: “А ну-ка дай сюда все цены на ноутбуки… желательно без нервов”. 🤓 В этой статье ты научишься: pip install requests beautifulsoup4 pandas lxml openpyxl selenium (И, если нужно Selenium: скачай chromedriver → положи рядом с кодом) Собрать названия и цены кофе с условного сайта. import requests
from bs4 import BeautifulSoup
# Отправляем GET-запрос
url = "https://example-coffee-shop.com/menu"
response = requests.get(url)
soup = BeautifulSoup(response.text, "lxml")
# Ищем блоки с товарами
items = soup.find_all("div", class_="product-item")
for item in items:
name = item.find("h2").text.strip()
price = item.find("span", class_="price").text.strip()
print(name, "-", price) import pandas as pd
data = []
for item in items:
name = item.find("h2").text.strip()
price = ite
Оглавление

— или как почувствовать себя цифровым Шерлоком

👋 Вступление: Кто ты, о парсинг?

Парсинг — это искусство и наука одновременно. Это когда ты заходишь не с фронта, а по-честному — через requests и BeautifulSoup, и вежливо просишь у сайта: “А ну-ка дай сюда все цены на ноутбуки… желательно без нервов”. 🤓

В этой статье ты научишься:

  • Писать базовый HTML-парсер
  • Использовать BeautifulSoup, requests, pandas
  • Хранить данные в CSV/Excel
  • Работать с динамическими сайтами через Selenium
  • И бонус: как не попасть в бан

🔧 Установка

pip install requests beautifulsoup4 pandas lxml openpyxl selenium

(И, если нужно Selenium: скачай chromedriver → положи рядом с кодом)

☕ Пример 1: Парсим список кофе с сайта

Цель:

Собрать названия и цены кофе с условного сайта.

import requests
from bs4 import BeautifulSoup

# Отправляем GET-запрос
url = "https://example-coffee-shop.com/menu"
response = requests.get(url)
soup = BeautifulSoup(response.text, "lxml")

# Ищем блоки с товарами
items = soup.find_all("div", class_="product-item")

for item in items:
name = item.find("h2").text.strip()
price = item.find("span", class_="price").text.strip()
print(name, "-", price)

Комментарии:

  • requests.get() — получаем HTML страницу
  • BeautifulSoup — превращает её в удобное дерево
  • .find_all() — ищем все карточки товаров

📦 Пример 2: Сохраняем в CSV

import pandas as pd

data = []

for item in items:
name = item.find("h2").text.strip()
price = item.find("span", class_="price").text.strip()
data.append({"Название": name, "Цена": price})

df = pd.DataFrame(data)
df.to_csv("coffee.csv", index=False, encoding='utf-8-sig')

✅ Теперь у нас таблица с кофе — можно импортировать в Excel или Google Sheets.

🏠 Пример 3: Парсим объявления о недвижимости

Сайт: условный https://example-realestate.com

url = "https://example-realestate.com/apartments"
html = requests.get(url).text
soup = BeautifulSoup(html, "lxml")

for flat in soup.select(".apartment-card"):
title = flat.select_one("h3.title").text.strip()
location = flat.select_one(".location").text.strip()
price = flat.select_one(".price").text.strip()
print(f"{title} в {location} — {price}")

🧠 Новые фишки:

  • select() и select_one() — это CSS-селекторы как в JavaScript

🔥 Пример 4: Парсим сайт с JavaScript через Selenium

HTML красив, пока JavaScript не вмешался. Для динамического контента нужен браузер.

from selenium import webdriver
from bs4 import BeautifulSoup
import time

driver = webdriver.Chrome()
driver.get("https://example-js-site.com")

# Ждём загрузки
time.sleep(5)

soup = BeautifulSoup(driver.page_source, "lxml")
titles = soup.find_all("h2", class_="post-title")

for t in titles:
print(t.text.strip())

driver.quit()

💡 Можно заменить sleep на WebDriverWait для надёжности.

💬 Пример 5: Собираем отзывы с сайта

Сайт: https://example-product.com/reviews

reviews = []

for page in range(1, 6):
url = f"https://example-product.com/reviews?page={page}"
soup = BeautifulSoup(requests.get(url).text, "lxml")
blocks = soup.select(".review-card")

for block in blocks:
user = block.select_one(".username").text.strip()
rating = block.select_one(".rating").text.strip()
text = block.select_one(".text").text.strip()
reviews.append({"Пользователь": user, "Оценка": rating, "Отзыв": text})

pd.DataFrame(reviews).to_excel("reviews.xlsx", index=False)

🛡 Бонус: как не получить бан

Парсинг ≠ хакерство, но и тут нужна вежливость:

  • ✅ Используй заголовки:

headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"
}
requests.get(url, headers=headers)

  • ✅ Сделай паузу между запросами (time.sleep(1))
  • ✅ Уважай robots.txt
  • ✅ Не бомби сайт сотнями запросов

📚 Идеи, что парсить:

  • Курсы валют с ЦБ
  • Погоду на неделю
  • Товары с маркетплейса
  • Список вакансий по ключевому слову
  • Расписание автобусов
  • Топовые статьи на Хабре
  • Подписчиков в Instagram (через API)

🎯 Выводы

Сегодня ты узнал:

  • Как вытянуть HTML из сайта
  • Как вытянуть из HTML полезную инфу
  • Как сохранить её красиво
  • Как бороться с JavaScript
  • И остаться при этом джентльменом парсинга
Пишем свой парсер на Python: собираем данные с сайтов красиво
Пишем свой парсер на Python: собираем данные с сайтов красиво