В этом блоге мы расскажем вам о процессе извлечения изображений с веб-сайтов с помощью Python. Вы узнаете, как начать работу с популярными библиотеками, разобраться с потенциальными подводными камнями и даже изучить продвинутые техники, чтобы поднять свои навыки веб-скрепинга на новый уровень.
Чтобы приступить к поиску изображений с помощью Python, вам нужно ознакомиться с некоторыми ключевыми библиотеками, которые облегчают эту задачу. Наиболее популярными являются BeautifulSoup, Scrapy и Requests.
BeautifulSoup - это библиотека Python для разбора HTML- и XML-документов. Она создает дерево разбора из исходных кодов страниц, которое можно использовать для извлечения данных.
Вот простой пример извлечения URL-адресов изображений с помощью BeautifulSoup:
pip install bs4 requests
импортировать запросы
из 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.
После того как вы извлекли URL-адреса изображений, следующим шагом будет их загрузка. Библиотека Requests идеально подходит для этой задачи благодаря своей простоте и удобству использования.
Вот как можно загрузить изображения с помощью Requests:
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 - это фреймворк для совместного веб-скраппинга на Python с открытым исходным кодом. Он создан для скорости и эффективности, что делает его идеальным для крупных проектов по скраппингу.
pip install scrapy
scrapy startproject image_scraper
cd image_scraper
Создайте файл паука (`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, позволяющие программно искать и загружать изображения. Один из таких сайтов - Unsplash API.
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, позволяют планировать выполнение скриптов через регулярные промежутки времени.
Crontab - это мощная утилита в Unix-подобных операционных системах для планирования задач, известных как"задания cron", для автоматического выполнения в указанное время. Давайте посмотрим, как можно запланировать задание с помощью Crontab.
Файл crontab состоит из командных строк, где каждая строка представляет собой отдельное задание. Синтаксис выглядит следующим образом:
МИН ЧАС ДОМ МОН ДОУ СМД
Вот пример запуска сценария python ежедневно в 8:00PM
0 20 * * * /usr/bin/python3/path/to/Image_Scraper.py
В этой статье мы рассмотрели, как с помощью Python соскребать изображения с сайтов. Мы рассмотрели основы работы с BeautifulSoup и Requests, продвинутые методы работы со Scrapy и этические нормы скрапинга. Кроме того, мы обсудили, как улучшить ваши проекты по скраппингу с помощью API и инструментов автоматизации, таких как планировщик задач Windows.
Скраппинг изображений - это мощный навык, который может расширить ваши возможности по сбору данных и открыть новые возможности для ваших проектов.
Счастливого скраппинга!