Myntra: Парсинг веб-сайта с использованием Selenium
С увеличением спроса на модели машинного обучения и искусственного интеллекта на рынке возникла потребность в новых и широком спектре наборах данных. Существует множество готовых к использованию наборов данных, но если вы хотите создать свой собственный набор данных, то один из вариантов, который приходит на ум, - это парсинг веб-сайтов.
В Интернете доступно большое количество данных различных областей, и нам просто нужно их спарсить и использовать для обучения наших передовых моделей машинного обучения.
Здесь, в этой статье, мы научимся парсить 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: Получение данных
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, они могут быть полезным набором данных для машинного обучения и классификации изображений.
Работу, которую мы выполнили, следует использовать только в научных целях. Никогда не используйте парсинг веб-сайтов для недобросовестных практик.