темный логотип proxyscrape

Пошаговое руководство: Как соскабливать изображения с помощью Python

Путеводители, Как сделать, Скрапинг, Сентябрь-05-20245 минут чтения

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

Основы скраппинга изображений с помощью Python

Чтобы приступить к поиску изображений с помощью Python, вам нужно ознакомиться с некоторыми ключевыми библиотеками, которые облегчают эту задачу. Наиболее популярными являются BeautifulSoup, Scrapy и Requests.

BeautifulSoup для извлечения URL-адресов изображений

BeautifulSoup - это библиотека Python для разбора HTML- и XML-документов. Она создает дерево разбора из исходных кодов страниц, которое можно использовать для извлечения данных.

Вот простой пример извлечения URL-адресов изображений с помощью BeautifulSoup:

Шаг 1: Установите BeautifulSoup и Requests:

 pip install bs4 requests

Шаг 2: Извлечение URL-адресов изображений:

 импортировать запросы
 из bs4 import BeautifulSoup

 url = 'https://books.toscrape.com/'

 response = requests.get(url)

 soup = BeautifulSoup(response.text, 'html.parser')
 изображения = soup.find_all('img')

This code fetches the HTML content of the specified URL, parses it with BeautifulSoup, and then finds all the `<img>` tags, printing out their `src` attributes.

Загрузка изображений с помощью Python

После того как вы извлекли URL-адреса изображений, следующим шагом будет их загрузка. Библиотека Requests идеально подходит для этой задачи благодаря своей простоте и удобству использования.

Использование запросов для загрузки изображений

Вот как можно загрузить изображения с помощью Requests:

Загрузите изображение с URL:

for ind, img in enumerate(images):
   img_data = requests.get(url+img['src']).content
   with open(f'image_{ind+1}.jpg', 'wb') as handler:
       handler.write(img_data)

Этот скрипт отправляет GET-запрос на URL-адрес изображения и записывает его двоичное содержимое в файл.

Обработка ошибок и исключений

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

Обработка ошибок:

for ind, img in enumerate(images):
   try:
       img_data = requests.get(url+img['src']).content
       with open(f'image_{ind+1}.jpg', 'wb') as handler:
           handler.write(img_data)
   except Exception as e:
       print(f"An error occurred during the extraction of image \n Image Url: {img['src']} \n Error: {e}")

Этот фрагмент кода включает блок try-except, чтобы перехватить любые ошибки, которые могут возникнуть в процессе загрузки.

Продвинутые техники поиска изображений

Для более сложных задач, таких как создание нескольких страниц или целых веб-сайтов, Scrapy - это мощная библиотека, которая эффективно справляется с такими сценариями.

Использование Scrapy для решения сложных задач

Scrapy - это фреймворк для совместного веб-скраппинга на Python с открытым исходным кодом. Он создан для скорости и эффективности, что делает его идеальным для крупных проектов по скраппингу.

Шаг 1: Установите Scrapy:

 pip install scrapy

Шаг 2: Создайте проект Scrapy:

 scrapy startproject image_scraper
 cd image_scraper

Шаг 3: Определите паука:

Создайте файл паука (`spiders/image_spider.py`) со следующим содержимым:

import scrapy
class ImageSpider(scrapy.Spider):
   name = 'imagespider'
   start_urls = ['https://books.toscrape.com/']
   def parse(self, response):
       # Extract image URLs and convert them to absolute if necessary
       for img in response.css('img::attr(src)').getall():
           abs_img_url = response.urljoin(img)
           yield {'image_url': abs_img_url}
      
       # Find the link to the next page and create a request for it
       next_page = response.css('a.next::attr(href)').get()
       if next_page is not None:
           next_page_url = response.urljoin(next_page)
           yield response.follow(next_page_url, self.parse)

Этот простой паук Scrapy запускается по заданному URL-адресу, извлекает все URL-адреса изображений и переходит по ссылкам на следующую страницу, чтобы продолжить поиск.

Улучшение проектов по скрапбукингу изображений

Чтобы еще больше усовершенствовать проекты по скрапбукингу, используйте API для доступа к высококачественным изображениям и автоматизируйте свои задачи для повышения эффективности.

Использование API для скрапинга изображений

API обеспечивают надежный и легальный способ доступа к изображениям. Многие сайты предлагают API, позволяющие программно искать и загружать изображения. Один из таких сайтов - Unsplash API.

Пример с использованием API Unsplash:

import requests
# Replace 'YOUR_ACCESS_KEY' with your actual Unsplash Access Key
api_url = "https://api.unsplash.com/photos/random"
headers = {"Authorization": "Client-ID YOUR_ACCESS_KEY"}
params = {"query": "nature"}
try:
   response = requests.get(api_url, headers=headers, params=params)
   response.raise_for_status()  # This will raise an exception for HTTP errors
   data = response.json()
   image_url = data['urls']['full']
   print(image_url)
except requests.exceptions.HTTPError as err:
   print(f"HTTP error occurred: {err}")
except Exception as err:
   print(f"An error occurred: {err}")

Этот скрипт использует API Unsplash для получения случайного изображения природы.

Автоматизация задач по поиску изображений

Автоматизация экономит время и обеспечивает бесперебойное выполнение задач по скрапбукингу без ручного вмешательства. Такие инструменты, как задания cron в Unix-системах или планировщик задач в Windows, позволяют планировать выполнение скриптов через регулярные промежутки времени.

Задания Cron в Unix-системах - Crontab:

Crontab - это мощная утилита в Unix-подобных операционных системах для планирования задач, известных как"задания cron", для автоматического выполнения в указанное время. Давайте посмотрим, как можно запланировать задание с помощью Crontab.

Понимание синтаксиса Crontab:

Файл crontab состоит из командных строк, где каждая строка представляет собой отдельное задание. Синтаксис выглядит следующим образом:

МИН ЧАС ДОМ МОН ДОУ СМД
  • MIN: поле минут (от 0 до 59)
  • HOUR: поле часов (от 0 до 23)
  • DOM: День месяца (от 1 до 31)
  • MON: поле месяца (от 1 до 12)
  • DOW: День недели (от 0 до 7, где 0 и 7 обозначают воскресенье)
  • CMD: команда для запуска (в данном случае это будет исполняемый файл вашего скрипта python).

Вот пример запуска сценария python ежедневно в 8:00PM

0 20 * * * /usr/bin/python3/path/to/Image_Scraper.py

Использование планировщика задач (Windows):

  • Откройте "Планировщик заданий" (используйте строку поиска в windows и найдите "Task Scheduler").
  • Нажмите"Создать основную задачу".
  • Укажите имя и описание и нажмите"Далее".
  • Выберите гранулярность или интервал, через который нужно запускать эту задачу, и нажмите"Далее".
  • Теперь убедитесь, что флажок"Запустить программу" установлен, и нажмите"Далее".
  • Укажите путь к вашему скрипту python, нажав на кнопку"Обзор". Если вам необходимо указать какие-либо аргументы для вашего скрипта python, вы можете сделать это, добавив их в поле"Добавить аргументы" и нажав"Далее".
  • В качестве последнего шага просто нажмите кнопку"Готово", и все, задача готова к запуску через заданный интервал времени.

Заключение

В этой статье мы рассмотрели, как с помощью Python соскребать изображения с сайтов. Мы рассмотрели основы работы с BeautifulSoup и Requests, продвинутые методы работы со Scrapy и этические нормы скрапинга. Кроме того, мы обсудили, как улучшить ваши проекты по скраппингу с помощью API и инструментов автоматизации, таких как планировщик задач Windows.

Скраппинг изображений - это мощный навык, который может расширить ваши возможности по сбору данных и открыть новые возможности для ваших проектов.

Счастливого скраппинга!