CoderCastrov logo
CoderCastrov
Питон

Парсинг изображений с веб-страниц

Парсинг изображений с веб-страниц
просмотров
3 мин чтение
#Питон

Приложение на Python

Функциональный подход к сохранению повторяющихся изображений

Отказ от ответственности: Представленная информация предназначена только для образовательных целей и не является юридическим советом. Автор не несет ответственности за ошибки или упущения или за результаты, полученные при использовании этой информации. Читатели должны проконсультироваться со своим юридическим советником, прежде чем принимать любые меры, которые могут иметь юридические последствия.

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

Процесс:

Найти структуру веб-страницы для указанного URL

Мы будем использовать VS Code с настроенным Python и Jupiter notebook. Однако, также подойдет файл с кодом на Python. Вот три пакета, которые нужно установить с помощью Window Power Shell:

# Запустите Power Shell, нажав Start, а затем введите Power Shell в строке поиска
# Процедура установки
py -m pip install requests
py -m pip install bs4
py -m pip install urllib

Прежде всего, мы начинаем с импорта необходимых модулей. Затем нам нужно сделать HTTP-запрос, чтобы просмотреть структуру данных веб-страницы, которую мы хотим. Это можно сделать следующим образом:

import requests
from bs4 import BeautifulSoup
import urllib.request

def getdata(url): 
    r = requests.get(url) 
    return r.text 

htmldata = getdata("https://www.nationalgeographic.co.uk/space/2023/01/asteroids-vs-comets-how-do-they-differ-and-do-they-pose-a-threat-to-earth") 
soup = BeautifulSoup(htmldata, 'html.parser') 

Вы можете проверить вывод, введя имя переменной:

Output representing webpage structure.

Поиск ссылок на изображения и сохранение их в списке

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

test = list()
for item in soup.find_all('img'): 
    print(item['src'])
    test.append(item.get('src'))
Все найденные ссылки в списке

Загрузка всех изображений

Теперь просто используя цикл for, мы можем сохранить все изображения в текущей папке. Количество итераций, n, будет равно количеству изображений в списке. В нашем коде мы также переименуем изображения с номерами 0,1,2,...,n, чтобы избежать дублирования имен файлов.

for i in range(len(test)):
    urllib.request.urlretrieve(test[i], str(i)+".jpg")
Все загруженные изображения.

Extra:

На некоторых веб-сайтах могут быть перемешаны несколько URL-адресов изображений, включая .svg, .png, .gif и .jpg. Мы можем использовать оператор if для решения этой проблемы:

temp = list()
for i in range(len(test)):
    if test[i].__contains__('.png' or '.jpg' or '.jpeg'):
        temp.append(test[i])

for i in range(len(temp)):
    urllib.request.urlretrieve(temp[i], str(i)+".jpg")

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


Ссылки:

Markdown - язык разметки, который позволяет создавать форматированный текст с использованием простого синтаксиса.

Парсинг - процесс анализа структуры данных для извлечения нужной информации.

Парсер - программа или библиотека, которая выполняет парсинг данных.

Парсинг - изображение, иллюстрирующее процесс парсинга.

Парсер - изображение, иллюстрирующее работу парсера.