В этом блоге мы расскажем вам о процессе извлечения изображений с веб-сайтов с помощью 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.
Once you've extracted the image URLs, the next step is to download them. The Requests library is perfect for this task due to its simplicity and ease of use.
Вот как можно загрузить изображения с помощью 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.
Скраппинг изображений - это мощный навык, который может расширить ваши возможности по сбору данных и открыть новые возможности для ваших проектов.
Счастливого скраппинга!