ПАРСИНГ ИЗОБРАЖЕНИЙ С САЙТА
Парсинг веб-сайтов — это процесс извлечения данных с веб-страниц с целью их анализа, обработки или сохранения. Один из распространенных случаев парсинга — это извлечение изображений с веб-сайта. В этой статье мы рассмотрим пример парсинга изображений с помощью Python.
Установка необходимых библиотек и зависимостей
Что нам понадобится?
Для создания парсера нам понадобятся следующие инструменты и библиотеки:
- Python — язык программирования, который мы будем использовать для написания скрипта парсера.
- Библиотека requests — для отправки HTTP-запросов к сайту и получения ответов.
- Библиотека BeautifulSoup — для парсинга HTML-кода страницы и извлечения информации.
- Библиотека openpyxl — для записи извлеченных данных в Excel-файл.
Шаги по созданию парсера:
- Отправка запроса к сайту с изображениями с помощью get(url) .
- Получение HTML-кода страницы и создание объекта BeautifulSoup .
- Извлечение ссылок на изображения из HTML-кода страницы.
- Сохранение изображений на компьютер.
Для того чтобы создать парсер для извлечения изображений с сайта, необходимо установить несколько библиотек и зависимостей. Вот инструкции по установке необходимых инструментов:
1. Установка Python
Первым шагом является установка Python, если у вас его еще нет. Вы можете загрузить установщик Python с официального сайта python.org и следовать инструкциям по установке для вашей операционной системы.
2. Установка библиотек requests
beautifulsoup
и
openpyxl
После установки Python, откройте терминал (или командную строку на Windows) и выполните следующие команды для установки необходимых библиотек:
Мы создаем Excel-файл, в котором будем хранить данные об изображениях. Мы создаем новый лист и добавляем заголовки для каждого столбца, такие как название товара, название изображения, ссылка на изображение и т.д. Затем мы начинаем цикл по страницам веб-сайта, откуда будем парсить изображения. Мы отправляем запрос к каждой странице, получаем HTML-код и с помощью BeautifulSoup находим необходимые элементы, такие как название товара, ссылку на изображение и т.д. Для каждого товара мы извлекаем данные и записываем их в Excel-файл. Также мы скачиваем изображение по ссылке и сохраняем его на диск. Важно обрабатывать возможные ошибки при парсинге данных, чтобы избежать сбоев в программе. Мы используем блок try-except для обработки исключений и выводим сообщение об ошибке, если что-то идет не так. После завершения парсинга всех страниц мы закрываем Excel-файл. Теперь у нас есть файл с данными о товарах и изображениями, которые мы смогли извлечь с веб-сайта.
Для удобства разработки вы также можете установить интегрированную среду разработки (IDE), такую как PyCharm, VS Code или Jupyter Notebook.
Создаём любую папку где будет наш проект, в нём создаём файл с расширением питон.
Эти команды установят библиотеки requests для отправки HTTP-запросов, beautifulsoup4 для парсинга HTML-кода и openpyxl для работы с Excel-файлами.
pip install requests
pip install beautifulsoup4
pip install openpyxl
Устанавливаем библиотеку в среду в терминале :
Настройка парсинга, краткая инфа по функционалу
worksheet.write(row, col, data) :
- Описание: Записывает данные
data
в указанную ячейку листаworksheet
в Excel-файле. - Использование: Для записи данных в определенную ячейку Excel-файла.
soup = BeautifulSoup(html_content, 'html.parser') :
- Описание: Записывает данные
data
в указанную ячейку листаworksheet
в Excel-файле. - Использование: Для записи данных в определенную ячейку Excel-файла.
response = requests.get(url, headers=headers) :
- Описание: Отправляет GET-запрос по указанному URL с заданными заголовками.
- Использование: Для получения ответа от веб-сервера на запрос.
if not os.path.exists('images'): :
- Описание: Проверяет наличие директории
images
в файловой системе. - Использование: Для проверки существования директории перед сохранением файлов.
os.makedirs('images') :
- Описание: Создает новую директорию
images
в файловой системе. - Использование: Для создания директории, в которую будут сохраняться изображения.
with open('images/' + image_name, 'wb') as f: :
- Описание: Создает новую директорию
images
в файловой системе. - Использование: Для создания директории, в которую будут сохраняться изображения.
with open('images/' + image_name, 'wb') as f:
- Описание: Открывает файл с именем
image_name
в режиме записи бинарного содержимого. - Использование: Для сохранения бинарных данных (изображения) в файл.
f.write(image_content) :
- Описание: Записывает бинарное содержимое
image_content
в файл. - Использование: Для сохранения бинарных данных (изображения) в файл.
Эти функции и библиотеки совместно используются для парсинга веб-страниц, извлечения данных, записи их в Excel-файл, а также загрузки изображений на компьютер. Каждая функция выполняет определенную задачу в данном процессе и является важным звеном для сбора и обработки информации.
Проверка установки
Вы можете проверить правильность установки, запустив Python и попробовав импортировать установленные библиотеки:
import requests
import xlsxwriter
from bs4 import BeautifulSoup
Установка
pip install requests
pip install beautifulsoup4
pip install openpyxl
Этот простой парсер отправляет запрос к указанному сайту, извлекает все изображения со страницы и сохраняет их в созданную директорию images
на компьютере.
Дополнения:
- Для более сложных задач можно добавить обработку различных типов изображений, ресурсов и размеров.
- Реализация автоматического сохранения изображений в базу данных или облачное хранилище для более удобного доступа и управления данными.
- Добавление логики для обработки ошибок, страниц с пагинацией или аутентификацией.
Запуск
import requests
import xlsxwriter
import os
from bs4 import BeautifulSoup
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'}
workbook = xlsxwriter.Workbook('parsed_data.xlsx')
worksheet = workbook.add_worksheet()
worksheet.write(0, 0, 'Название товара')
worksheet.write(0, 1, 'Название изображения')
worksheet.write(0, 2, 'Ссылка на изображение')
worksheet.write(0, 3, 'Item code')
row = 1
if not os.path.exists('image'):
os.makedirs('image')
for page_num in range(1, 22):
url = f'https://www.scmgroupspareparts.com/en/index.php/m6.html?mode=grid&p={str(page_num).zfill(2)}'
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.content, 'html.parser')
items = soup.find_all(class_='col-lg-3 col-md-3 col-sm-6 col-xs-12 item')
for item in items:
try:
product_name = item.find(class_='product-name').a.text.strip()
code_element = item.find('p', string='Item code:')
if code_element:
item_code = code_element.find_next('b').text.strip()
else:
item_code = 'Item code not found'
image_url = item.find(class_='product-image').img['src']
# Extracting image name from the URL
image_name = image_url.split('/')[-1]
image_name = image_name.replace('.jpg', f'_{row}.jpg') # Append row number to make the image name unique
print(f'Обрабатывается товар: {product_name}')
print(f'Ссылка на изображение: {image_url}')
worksheet.write(row, 0, product_name)
worksheet.write(row, 1, image_name)
worksheet.write(row, 2, image_url)
worksheet.write(row, 3, item_code)
image_response = requests.get(image_url)
with open(f'image/{image_name}', 'wb') as image_file:
image_file.write(image_response.content)
print(f'Изображение сохранено как: {image_name}')
except Exception as e:
print('Ошибка при парсинге данных:', e)
row += 1
workbook.close()
Создание собственного парсера для извлечения изображений позволяет автоматизировать процесс сбора информации с веб-сайтов. Надеемся, что данная статья поможет вам освоить основы парсинга и вдохновит на создание собственных проектов. Успехов в изучении парсинга данных! 🚀