You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

62 lines
2.5 KiB

4 months ago
import requests
from bs4 import BeautifulSoup
import csv
from tqdm import tqdm
# Базовый URL для страниц палитр
base_url = "https://www.color-hex.com/color-palettes/?page="
# Количество страниц, которые нужно парсить
total_pages = 1780
output_file = "color_palettes.csv"
with open(output_file, mode='w', newline='', encoding='utf-8') as file:
writer = csv.writer(file)
# Заголовки CSV
headers = ['Palette Category', 'Palette Name'] + [f"Color {i + 1}" for i in range(448)]
writer.writerow(headers)
for page in tqdm(range(1, total_pages + 1), desc="Parsing pages", unit="page"):
# Формируем URL для текущей страницы
url = f"{base_url}{page}"
response = requests.get(url)
if response.status_code == 200:
soup = BeautifulSoup(response.content, 'html.parser')
# Ищем все контейнеры палитр
palettes = soup.find_all('div', class_='palettecontainerlist')
# Проходим по каждой палитре и собираем информацию
for palette in palettes:
# Ищем ссылку с названием палитры (тег <a>)
title_tag = palette.find('a')
palette_name = title_tag['title'] if title_tag else 'No title'
palette_category = "Default Category"
# Ищем все div с цветами внутри палитры
color_divs = palette.find_all('div', class_='palettecolordiv')
color_codes = []
# Извлекаем цвета из атрибута style
for div in color_divs:
style = div['style']
# Ищем hex-код цвета в стиле
color_code = style.split('background-color:')[1].replace(';', '').strip()
color_codes.append(color_code)
# Заполняем недостающие ячейки пустыми значениями, если цветов меньше 448
while len(color_codes) < 448:
color_codes.append('')
writer.writerow([palette_category, palette_name] + color_codes)
else:
print(f"Ошибка при запросе страницы {page}: {response.status_code}")
print(f"Парсинг завершён. Данные записаны в файл {output_file}")