CoderCastrov logo
CoderCastrov
Парсер

Myntra: Парсинг веб-сайта с использованием Selenium

Myntra: Парсинг веб-сайта с использованием Selenium
просмотров
3 мин чтение
#Парсер

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

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

Здесь, в этой статье, мы научимся парсить Myntra, индийскую компанию электронной коммерции модной одежды, с использованием веб-драйвера Selenium.

**Шаг I: **Импорт модулей и зависимостей

from selenium import webdriver
import urllib.request
import os
import json

В дополнение к вышеупомянутым библиотекам Python, вам понадобится chromedriver, который вы можете установить напрямую с https://chromedriver.chromium.org/ в зависимости от версии Chrome, которую вы в настоящее время используете.

Шаг II: Открытие Myntra.com с помощью Selenium

driver = webdriver.Chrome('chromedriver')
driver.get('https://www.myntra.com/')
time.sleep(5)

Вышеуказанный код позволит вам получить и загрузить URL, и откроется окно Chrome с ответной страницей.


Шаг III: Поиск

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

driver.find_element_by_class_name('desktop-searchBar').send_keys(search_string)driver.find_element_by_class_name('desktop-submit').click()
**Результат поиска для строки 'Футболка'**

Шаг IV: Парсинг URL-адресов объектов

Если целью вашей коллекции данных является только получение миниатюр, то вы можете получить их только с этой страницы ответа. Но если вы хотите получить метаданные вместе с изображениями, то вы можете продолжить.

while(True): 
    time.sleep(5)
    for product_base in driver.find_elements_by_class_name('product-base'):
        links.append( product_base.find_element_by_xpath('./a').get_attribute("href")) 
        try:
            driver.find_element_by_class_name('pagination-next').click()
        except:
            driver.close()
            driver.quit()

Вышеуказанный код получает все ссылки на продукты на странице ответа и ищет кнопку "ДАЛЕЕ->", и если она существует, переходит на следующую страницу и повторяет процедуру, в противном случае прекращает соединение с драйвером.

Шаг V: Получение данных

Product Page
driver = webdriver.Chrome('chromedriver')
driver.get(link)
metadata['title'] = driver.find_element_by_class_name('pdp-title').get_attribute("innerHTML")
metadata['name'] = driver.find_element_by_class_name('pdp-name').get_attribute("innerHTML")
metadata['price'] = driver.find_element_by_class_name('pdp-price').find_element_by_xpath('./strong').get_attribute("innerHTML")

Здесь мы получаем название, заголовок и цену продукта, используя ссылку на покупку, полученную на шаге IV.

try:
    driver.find_element_by_class_name('index-showMoreText').click()
    for index_row in driver.find_element_by_class_name('index-tableContainer').find_elements_by_class_name('index-row'):
        metadata['specifications'][index_row.find_element_by_class_name('index-rowKey').get_attribute("innerHTML")] =  index_row.find_element_by_class_name('index-rowValue').get_attribute("innerHTML") 
    metadata['productId'] = driver.find_element_by_class_name('supplier-styleId').get_attribute("innerHTML")

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

itr = 1
for image_tags in driver.find_elements_by_class_name('image-grid-image'):
    image_path = os.path.join("data",base,metadata['productId'],'images',str(itr)+".jpg")
    urllib.request.urlretrieve( image_tags.get_attribute('style').split("url(\"")[1].split("\")")[0],image_path)
    itr +=1

Для компьютерного зрения и глубокого обучения нам требуется изображение продукта, которое получается в этом фрагменте кода.

with open( os.path.join("data",base,metadata['productId'],'metadata.json'), 'w') as fp:
    json.dump(metadata, fp)

И, наконец, метаданные сохраняются в виде JSON-файла.

Заключительные заметки

Парсинг веб-сайтов - отличный инструмент для исследования веб-сайтов и извлечения полезных наборов данных. В этой статье мы успешно спарсили веб-сайт Myntra для извлечения данных. Эти данные могут быть использованы для создания новых моделей одежды с использованием моделей GAN, они могут быть полезным набором данных для машинного обучения и классификации изображений.

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