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

В этом блоге вы узнаете, как извлекать данные из Zoro с помощью Python и Crawlbase Crawling API. Ты выучишь:

  • Как извлечь результаты поиска Zoro.
  • Получите подробную информацию о продукте, такую ​​как цены, наличие на складе и технические характеристики.
  • Обработка контента, отображаемого с помощью JavaScript, и разбиение на страницы.

Давайте начнем!

Содержание

  1. Зачем извлекать данные из Zoro?
  2. Ключевые данные для извлечения из Zoro
  3. Crawlbase Crawling API для Зоро Скрапинг
  4. Подготовка к сбору данных Zoro
  • Необходимые инструменты и библиотеки
  • Установка и настройка Crawlbase
  1. Скрапинг списков поиска Zoro
  • Проверка HTML для определения селекторов
  • Написание скребка списков поиска
  • Обработка пагинации с параметром «page»
  • Хранение извлеченных данных в файле JSON
  • Полный пример кода
  1. Скрапинг страниц продуктов Zoro
  • Понимание структуры страницы продукта
  • Извлечение ключевых данных из продуктов
  • Хранение данных о продукте в файле JSON
  • Полный пример кода
  1. Заключение
  2. Часто задаваемые вопросы (FAQ):

Зачем извлекать данные из Zoro?

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

1. Исследования рынка

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

2. Сравнение цен

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

3. Управление запасами

Отслеживайте наличие товара и его состояние на складе, чтобы оптимизировать ваши запасы и избежать дефицита или затоваривания.

4. Данные для проектов электронной коммерции

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

5. Бизнес-аналитика

Отслеживайте потребительский спрос и популярность продукции, анализируя списки товаров и обзоры Zoro.

Ключевые данные для извлечения из Zoro

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

Изображение ключевых точек данных для извлечения из Zoro

Crawlbase Crawling API для Зоро Скрапинг

The Crawlbase Crawling API идеально подходит для парсинга веб-сайтов, созданных с помощью JavaScript, таких как Zoro. Он обрабатывает динамический контент, обходит меры по борьбе с парсингом и упрощает управление пагинацией.

Использовать Crawlbase, установите его библиотеку Python с помощью:

1
pip установить crawlbase

После регистрацией для Crawlbase, получите свой API-токен из панели управления. Этот токен требуется для всех запросов. Crawlbase предоставляет два типа токенов. Обычный токен для статических сайтов и токен JS для сайтов с JS-рендерингом. Для Zoro вам нужен токен JS. Crawlbase предлагает 1,000 бесплатных запросов для своего Crawling API для легкого старта.

Crawlbase Crawling API позволяет вам визуализировать JavaScript с помощью ajax_wait вариант и обрабатывать более медленную загрузку страниц с помощью page_wait. Есть много других вариантов, которые вы можете использовать с Crawlbase Crawling API; вы можете прочитать о них здесь.

Вот как получить страницу поиска Zoro:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
от база сканирования Импортировать CrawlingAPI

# Инициализация Crawlbase API
crawling_api = CrawlingAPI({токен: 'ВАШ_ТОКЕН_API_CRAWLBASE'})

# Определить параметры
варианты = {
'ajax_wait': 'правда', # Убедитесь, что содержимое JavaScript загружается
'page_wait': '2000', # Подождите 2 секунды для медленных страниц
}

# URL страницы поиска Zoro
URL = "https://www.zoro.com/search?q=tools&page=1"

# Извлечь страницу с помощью Crawlbase
ответ = crawling_api.get(url, параметры)

if ответ["заголовки"]['статус_ПК'] == '200':
html_content = ответ['тело'].decode('utf-8')
Распечатать(«Данные успешно получены!»)
еще:
Распечатать(«Не удалось получить данные».)

Эта конфигурация закладывает основу для создания скраперов для списков и страниц продуктов Zoro.

Подготовка к сбору данных Zoro

Прежде чем начать скрейпинг Zoro, вам нужно настроить свою среду с правильными инструментами и библиотеками. Это поможет вам шаг за шагом начать работу.

Необходимые инструменты и библиотеки

Для скрапинга Zoro вам понадобится:

  1. Питон: Благодаря простоте использования и надежным библиотекам Python является одним из лучших языков для веб-скрапинга.
  2. Crawlbase Библиотека Python: Это поможет вам сделать Crawlbase Crawling API звонки.
  3. КрасивыйСуп: Библиотека Python для анализа HTML и извлечения из него данных.

Установка Python и необходимых библиотек

Если у вас не установлен Python, загрузите его здесь: python.org. После установки вы можете использовать pip для установки библиотек. Выполните следующие команды в терминале:

1
2
pip установить crawlbase
Пип установить BeautifulSoup4

Эти библиотеки позволят вам взаимодействовать с Crawlbase Crawling API, анализировать HTML-контент из Zoro и эффективно обрабатывать запросы.

Как выбрать правильную IDE для веб-скрапинга

Для написания скрипта скрапинга вы можете использовать любую интегрированную среду разработки (IDE) или текстовый редактор. Вы можете выбрать между некоторыми популярными, такими как Код VS, PyCharm и Ноутбуки Jupyter.

Скрапинг списков поиска Zoro

Скрапинг списков поиска Zoro включает в себя определение ключевых точек данных, написание скрапера Python, обработку пагинации и сохранение данных в структурированном формате. Давайте разберем это шаг за шагом.

Проверка HTML для определения селекторов

Чтобы извлечь необходимые данные, проверьте HTML-структуру страницы результатов поиска Zoro:

  1. Открыть страницу: Посетите страницу результатов поиска Zoro (например, по запросу «ящик для инструментов»).
  2. Осмотрите элементы: Щелкните правой кнопкой мыши на странице и выберите «Проверить», чтобы открыть инструменты разработчика.
Скриншот Zoro Search Listings — структура проверки HTML
  1. Найдите элементы: Используйте проводник DOM, чтобы найти селекторы CSS для:
  • Бренд:: Найдено внутри <span> тег с классом brand-name.
  • Название продукта: Найдено внутри <div> тег с классом product-title.
  • Цена: Найдено внутри <div> тег с классом price.
  • URL-адрес продукта: Найдено в href атрибут <a> тег, вложенный в
    тег с классом product-title.
  • Изображение продукта: Найдено в src атрибут <img> тег с атрибутом данных data-za="product-image".

Написание скребка списков поиска

Использовать Crawlbase Crawling API для обработки рендеринга JavaScript. Вот скрапер Python:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
от база сканирования Импортировать CrawlingAPI
от bs4 Импортировать КрасивыйСуп
Импортировать JSON

# Инициализация Crawlbase API
crawling_api = CrawlingAPI({токен: 'ВАШ_ТОКЕН_БАЗЫ_КРАНА'})

# Функция для извлечения результатов поиска
защиту scrape_zoro_listings(базовый_url, номер_страницы):
базовый_url = f"{базовый_url}& page ={номер_страницы}"
варианты = {
'ajax_wait': 'правда', # Убедитесь, что содержимое JavaScript загружается
'page_wait': '5000', # Подождите 5 секунды для медленных страниц
}
ответ = crawling_api.get(базовый_url, параметры)

if ответ["заголовки"]['статус_ПК'] == '200':
суп = КрасивыйСуп(ответ['тело'], 'html.парсер')
данные = []

продукты = суп.выбрать('section[data-za="product-cards-list"] > div.search-product-card')
для ПРОДУКТЫ in продукты:
бренд = продукт.выберите_один('span.brand-name').текст.полоска() if продукт.выберите_один('span.brand-name') еще ''
название = продукт.выберите_один('div.product-title').текст.полоска() if продукт.выберите_один('div.product-title') еще ''
цена = продукт.выберите_один('div.цена').текст.полоска() if продукт.выберите_один('div.цена') еще ''
url = продукт.выберите_один('div.product-title a')['href'] if продукт.выберите_один('div.product-title a') еще ''
image_url = product.select_one('img[data-za="изображение-продукта"]')['источник'] if продукт.выберите_один('img[data-za="изображение-продукта"]') еще ''

данные.добавить({
«бренд»: бренд,
'заглавие': заголовок,
'цена': цена,
'URL-адрес': ф"https://www.zoro.com{URL}",
'url_изображения': URL-адрес_изображения
})

возвращают данным
еще:
Распечатать(f"Не удалось загрузить страницу {номер_страницы}. Статус: {ответ["заголовки"]['статус_ПК']}")
возвращают []

Обработка нумерации страниц

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
защиту очистить_все_страницы(макс_страниц=Ничто):
все_данные = []
страница = 1

в то время как Правда:
Распечатать(f"Очистка страницы {страница}... ")
page_data = scrape_zoro_listings(страница)

# Разорвать цикл, если текущая страница не возвращает никаких данных
if данные_страницы:
Распечатать(«Больше данных не найдено. Останавливаю пагинацию».)
перерыв

все_данные.расширить(страница_данных)
страница += 1

# Остановиться, если достигнут максимальный лимит страниц
if макс_страницы и страница > макс_страницы:
Распечатать(f"Достигнут максимальный предел {макс_страниц} страниц.")
перерыв

возвращают все_данные

Хранение извлеченных данных в файле JSON

Сохраните собранные данные в файле JSON для удобства доступа:

1
2
3
4
защиту сохранить_в_json(данные, имя файла='zoro_listings.json'):
открытый(имя файла, 'w') as f:
json.dump(данные, f, отступ=4)
Распечатать(f"Данные сохранены в {имя файла}")

Полный пример кода

Вот полный сценарий, объединяющий все шаги:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
от база сканирования Импортировать CrawlingAPI
от bs4 Импортировать КрасивыйСуп
Импортировать JSON

crawling_api = CrawlingAPI({токен: 'CRAWLBASE_JS_TOKEN'})

защиту scrape_zoro_listings(базовый_url, номер_страницы):
базовый_url = f"{базовый_url}& page ={номер_страницы}"
варианты = {
'ajax_wait': 'правда', # Убедитесь, что содержимое JavaScript загружается
'page_wait': '5000', # Подождите 5 секунды для медленных страниц
}
ответ = crawling_api.get(базовый_url, параметры)

if ответ["заголовки"]['статус_ПК'] == '200':
суп = КрасивыйСуп(ответ['тело'], 'html.парсер')
данные = []

продукты = суп.выбрать('section[data-za="product-cards-list"] > div.search-product-card')
для ПРОДУКТЫ in продукты:
бренд = продукт.выберите_один('span.brand-name').текст.полоска() if продукт.выберите_один('span.brand-name') еще ''
название = продукт.выберите_один('div.product-title').текст.полоска() if продукт.выберите_один('div.product-title') еще ''
цена = продукт.выберите_один('div.цена').текст.полоска() if продукт.выберите_один('div.цена') еще ''
url = продукт.выберите_один('div.product-title a')['href'] if продукт.выберите_один('div.product-title a') еще ''
image_url = product.select_one('img[data-za="изображение-продукта"]')['источник'] if продукт.выберите_один('img[data-za="изображение-продукта"]') еще ''

данные.добавить({
«бренд»: бренд,
'заглавие': заголовок,
'цена': цена,
'URL-адрес': ф"https://www.zoro.com{URL}",
'url_изображения': URL-адрес_изображения
})

возвращают данным
еще:
Распечатать(f"Не удалось загрузить страницу {номер_страницы}. Статус: {ответ["заголовки"]['статус_ПК']}")
возвращают []

защиту очистить_все_страницы(base_url, max_pages=Ничто):
все_данные = []
страница = 1

в то время как Правда:
Распечатать(f"Очистка страницы {страница}... ")
page_data = scrape_zoro_listings(базовый_url, страница)

# Разорвать цикл, если текущая страница не возвращает никаких данных
if данные_страницы:
Распечатать(«Больше данных не найдено. Останавливаю пагинацию».)
перерыв

все_данные.расширить(страница_данных)
страница += 1

# Остановиться, если достигнут максимальный лимит страниц
if макс_страницы и страница > макс_страницы:
Распечатать(f"Достигнут максимальный предел {макс_страниц} страниц.")
перерыв

возвращают все_данные

защиту сохранить_в_json(данные, имя файла='zoro_listings.json'):
открытый(имя файла, 'w') as f:
json.dump(данные, f, отступ=4)
Распечатать(f"Данные сохранены в {имя файла}")

if __имя__ == "__основной__":
базовый_url = 'https://www.zoro.com/search?q=tool+box'
scraped_data = scrape_all_pages(base_url, 1)
сохранить_в_json(извлеченные_данные)

Этот скрапер эффективно извлекает данные из списков поиска Zoro, обрабатывает пагинацию и сохраняет результаты в структурированном файле JSON для дальнейшего анализа.

Пример вывода:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
[
{
"бренд": «Apex Tool Group»,
"заглавие": "Ящик для инструментов с 3 ящиками",
"цена": "цена продукта: $149.99/шт.",
"URL": "https://www.zoro.com/apex-tool-group-3-drawer-tool-box-83151/i/G6893443/",
"url_изображения": "https://www.zoro.com/static/cms/product/prev/Комплексная сеть поставок LLC_KDT83151xx1200Wx1200Hxx305c78.jpg"
},
{
"бренд": «K-Tool International»,
"заглавие": "Ящик для инструментов, 10 ящиков, черный, 41 дюйм W",
"цена": "цена продукта: $1,400.99/шт.",
"URL": "https://www.zoro.com/k-tool-international-tool-box-10-drawer-black-41-in-w-kti75132/i/G406006122/",
"url_изображения": "https://www.zoro.com/static/cms/product/prev/Комплексная сеть поставок LLC_KTI75132xxmediaxx01xx4b250d.jpeg"
},
{
"бренд": "Прото",
"заглавие": "Универсальный ящик для инструментов с двойной защелкой и лотком, стальной, красный, 20" Ш x 8.5" Г x 9.5" В",
"цена": "цена продукта: $51.99/шт.",
"URL": "https://www.zoro.com/proto-general-purpose-double-latch-tool-box-with-tray-steel-red-20-w-x-85-d-x-95-h-j9975r/i/G0067825/",
"url_изображения": "https://www.zoro.com/static/cms/product/prev/Z1o8_0mcpEx-.JPG"
},
{
"бренд": "Деволт",
"заглавие": «Ящик для инструментов на колесиках, пластиковый, черный, 28 дюймов Ш x 12-1/2 дюймов Г x 12 дюймов В»,
"цена": "цена продукта: $43.19/шт.",
"URL": "https://www.zoro.com/dewalt-rolling-tool-box-plastic-black-28-in-w-x-12-12-in-d-x-12-in-h-dwst28100/i/G3778857/",
"url_изображения": "https://www.zoro.com/static/cms/product/prev/Z1wK0zqcpEx-.JPG"
},
{
"бренд": «Милуоки Тул»,
"заглавие": «Ящик для инструментов PACKOUT XL, ударопрочный, полимерный, черный/красный, 22 дюйма (Ш) x 16 дюймов (Г) x 19 дюймов (В)»,
"цена": "цена продукта: $119.00/шт.",
"URL": "https://www.zoro.com/milwaukee-tool-packout-xl-tool-box-impact-resistant-polymer-blackred-22-in-w-x-16-in-d-x-19-in-h-48-22-8429/i/G001272021/",
"url_изображения": "https://www.zoro.com/static/cms/product/prev/Z3pAyumcpEx_.JPG"
},
.... более
]

Скрапинг страниц продуктов Zoro

Скрапинг страниц продуктов на Zoro позволяет извлекать подробную информацию об отдельных продуктах, такую ​​как описания, характеристики и обзоры. Давайте разобьем этот раздел на практические шаги.

Понимание структуры страницы продукта

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

Скриншот страницы продукта Zoro — структура проверки HTML

Ключевые элементы, на которые следует обратить внимание:

  • Название продукта: <h1> пометить с data-za="product-name".
  • Цена: <div> пометить с data-za="product-price".
  • Описание товара:: <div> с классом product-description, вложенный <div> с классом description-text.
  • Характеристики: Ряды в <table> одной <div class="product-details-info">с двумя <td> элементов в строке.
  • изображения продуктов: <img> теги в <div class="product-images">, с классом product-image.

Извлечение ключевых данных из продуктов

Ниже представлена ​​функция Python для извлечения данных со страницы продукта:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
от база сканирования Импортировать CrawlingAPI
от bs4 Импортировать КрасивыйСуп
Импортировать re

# Инициализация Crawlbase API
crawling_api = CrawlingAPI({токен: 'CRAWLBASE_JS_TOKEN'})

# Функция для извлечения данных со страницы продукта
защиту очистить_страницу_продукта(URL-адрес_продукта):
варианты = {
'ajax_wait': 'правда',
'page_wait': '5000',
}
ответ = crawling_api.get(product_url, параметры)

if ответ["заголовки"]['статус_ПК'] == '200':
суп = КрасивыйСуп(ответ['тело'], 'html.парсер')

заголовок = {re.sub(г'\с+', '', суп.выберите_один('h1[data-za="название-продукта"]').текст.полоска())} if суп.выберите_один('h1[data-za="название-продукта"]') еще ''
цена = суп.выберите_один('div[data-za="product-price"] span.currency').текст.полоска() if суп.выберите_один('div[data-za="product-price"] span.currency') еще ''
описание = re.sub(г'\с+', '', суп.выберите_один('div.product-description div.description-text').текст.полоска()) if суп.выберите_один('div.product-description div.description-text') еще ''
спецификации = {re.sub(г'\с+', '', строка.найти_все('тд')[0].text.strip()): re.sub(г'\с+', '',строка.найти_все('тд')[1].текст.полоска()) для строка in суп.выбрать('div.product-details-info table tr') if только(строка.найти_все('тд')) == 2}
image_urls = [img['источник'] для IMG in суп.выбрать('div.product-images img.product-image') if 'источник' in img.attrs]

возвращают {
'заглавие': заголовок,
'цена': цена,
'описание': описание,
«спецификации»: характеристики,
'image_urls': URL-адреса_изображений,
'URL-адрес': URL-адрес_продукта
}
еще:
Распечатать(f"Не удалось загрузить страницу продукта: {url_продукта}. Статус: {ответ["заголовки"]['статус_ПК']}")
возвращают {}

Хранение данных о продукте в файле JSON

Сохраните извлеченные данные о продукте в файле JSON для дальнейшего использования:

1
2
3
4
5
6
Импортировать JSON

защиту сохранить_данные_о_продукте(данные, имя файла='zoro_products.json'):
открытый(имя файла, 'w') as f:
json.dump(данные, f, отступ=4)
Распечатать(f"Данные о продукте сохранены в {имя файла}")

Полный пример кода

Вот полный код для сбора данных с нескольких страниц товаров и сохранения данных в файле JSON:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
от база сканирования Импортировать CrawlingAPI
от bs4 Импортировать КрасивыйСуп
Импортировать JSON
Импортировать re

crawling_api = CrawlingAPI({токен: 'CRAWLBASE_JS_TOKEN'})

защиту очистить_страницу_продукта(URL-адрес_продукта):
варианты = {
'ajax_wait': 'правда',
'page_wait': '5000',
}
ответ = crawling_api.get(product_url, параметры)

if ответ["заголовки"]['статус_ПК'] == '200':
суп = КрасивыйСуп(ответ['тело'], 'html.парсер')

заголовок = {re.sub(г'\с+', '', суп.выберите_один('h1[data-za="название-продукта"]').текст.полоска())} if суп.выберите_один('h1[data-za="название-продукта"]') еще ''
цена = суп.выберите_один('div[data-za="product-price"] span.currency').текст.полоска() if суп.выберите_один('div[data-za="product-price"] span.currency') еще ''
описание = re.sub(г'\с+', '', суп.выберите_один('div.product-description div.description-text').текст.полоска()) if суп.выберите_один('div.product-description div.description-text') еще ''
спецификации = {re.sub(г'\с+', '', строка.найти_все('тд')[0].text.strip()): re.sub(г'\с+', '',строка.найти_все('тд')[1].текст.полоска()) для строка in суп.выбрать('div.product-details-info table tr') if только(строка.найти_все('тд')) == 2}
image_urls = [img['источник'] для IMG in суп.выбрать('div.product-images img.product-image') if 'источник' in img.attrs]

возвращают {
'заглавие': заголовок,
'цена': цена,
'описание': описание,
«спецификации»: характеристики,
'image_urls': URL-адреса_изображений,
'URL-адрес': URL-адрес_продукта
}
еще:
Распечатать(f"Не удалось загрузить страницу продукта: {url_продукта}. Статус: {ответ["заголовки"]['статус_ПК']}")
возвращают {}

защиту сохранить_данные_о_продукте(данные, имя файла='zoro_products.json'):
открытый(имя файла, 'w') as f:
json.dump(данные, f, отступ=4)
Распечатать(f"Данные о продукте сохранены в {имя файла}")

if __имя__ == "__основной__":
product_urls = [
"https://www.zoro.com/apex-tool-group-3-drawer-tool-box-83151/i/G6893443/",
"https://www.zoro.com/k-tool-international-tool-box-10-drawer-black-41-in-w-kti75132/i/G406006122/",
"https://www.zoro.com/proto-general-purpose-double-latch-tool-box-with-tray-steel-red-20-w-x-85-d-x-95-h-j9975r/i/G0067825/"
]

все_данные_о_продукте = []
для URL in URL-адреса_продуктов:
Распечатать(f"Продукт очистки: {URL}")
данные_продукта = очистить_страницу_продукта(url)
if данные_о_продукте:
все_данные_о_продукте.append(данные_о_продукте)

сохранить_данные_о_продукте(все_данные_о_продукте)

Этот скрипт извлечет данные о продуктах из нескольких страниц продуктов Zoro, извлечет соответствующую информацию и сохранит ее в структурированном файле JSON.

Пример вывода:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
[
{
"заглавие": "Ящик для инструментов с 3 ящиками",
"цена": "$",
"описание": "Ящик для инструментов с 3 ящиками",
"спецификации": {
"Элемент": «Ящик для инструментов»,
"Цвет": «Черный»,
"Особенности": "3-ящика",
"Включает": «Три ящика»
},
"image_urls": [
"https://www.zoro.com/static/cms/product/large/Integrated%20Supply%20Network%20LLC_KDT83151xx1200Wx1200Hxx305c78.jpg"
],
"URL": "https://www.zoro.com/apex-tool-group-3-drawer-tool-box-83151/i/G6893443/"
},
{
"заглавие": "Ящик для инструментов, 10 ящиков, черный, 41 дюйм W",
"цена": "$",
"описание": «Общая грузоподъемность 1000 фунтов; 10 ящиков с направляющими на роликовых подшипниках, двухсекционный ящик для инструментов; Анодированные алюминиевые ручки ящиков; Толкатель; Встроенный удлинитель UL; Комплект из 10 вкладышей EVA; 5 поворотных колес «x 2», 2 шт. с тормозом, черные кронштейны, черные колеса; Прочное порошковое покрытие; Полностью собран»,
"спецификации": {
"Ширина": "41 в",
"Элемент": «Ящик для инструментов»,
«Количество ящиков»: "10",
"Цвет": «Черный»,
"Включает": "41\" Премиум 10 ящиков, двойной отсек, ящик для инструментов, 1,000 фунтов (матовый черный)",
"Особенности": "Двойной залив"
},
"image_urls": [
"https://www.zoro.com/static/cms/product/large/Integrated%20Supply%20Network%20LLC_KTI75132xxmediaxx01xx4b250d.jpeg"
],
"URL": "https://www.zoro.com/k-tool-international-tool-box-10-drawer-black-41-in-w-kti75132/i/G406006122/"
},
{
"заглавие": "Универсальный ящик для инструментов с двойной защелкой и лотком, стальной, красный, 20" Ш x 8.5" Г x 9.5" В",
"цена": "$",
"описание": "PROTO - J9975R - это прочный ящик для инструментов, изготовленный из стали, предназначенный для обеспечения безопасного и организованного хранения ваших инструментов. Этот отдельный ящик для инструментов предлагает большую емкость для хранения 2,133 кубических дюйма, что позволяет вам разместить различные инструменты и строительные материалы. Ящик для инструментов оснащен запирающейся системой с навесным замком для дополнительной защиты от несанкционированного доступа. Он оснащен складной верхней ручкой, которая облегчает переноску и доступ. Основные характеристики:\u2022 Изготовлен из прочного стального материала, что увеличивает его долговечность.\u2022 Предлагает достаточно места для хранения с впечатляющей емкостью 2,133 кубических дюйма.\u2022 Оснащен двумя отделениями для лучшей организации ваших инструментов.\u2022 Имеет съемный стальной лоток для хранения, что повышает его удобство и простоту использования.\u2022 Разработан со складной верхней ручкой для удобства переноски и доступа к ящику для инструментов.\u2022 Включает один съемный лоток для хранения, обеспечивая гибкость в размещении хранения.",
"спецификации": {
"Ширина": "20 в",
"Глубина": "8-1/2 дюйма",
"Высота": "9-1/2 дюйма",
"Общая ширина": "20 в",
«Общая глубина»: "8 1/2 дюйма",
"Внутренняя ширина": "19 3/4 дюйма",
«Номинальная наружная ширина»: "20 в",
«Внутренняя высота»: "9 1/4 дюйма",
«Номинальная наружная высота»: "9 в",
"Общая высота": "9 1/2 дюйма",
«Номинальная наружная глубина»: "8 в",
«Внутренняя глубина»: "8 1/4 дюйма",
"Внутренние размеры": "19 3/4 дюйма Ш x 8 1/4 дюйма Г x 9 1/4 дюйма В",
«Внутренняя глубина»: "8 1/4 дюйма",
«Внутренняя высота»: "9 1/4 дюйма",
"Внутренняя ширина": "19 3/4 дюйма",
"Элемент": «Ящик для инструментов»,
«Материал»: "Сталь",
"Цвет": «Красный»,
"Особенности": «Съемный стальной поднос»,
"Включает": «Съемный лоток для покупок»,
"Тип ручки": «Складная верхняя ручка»,
«Дизайн ручки»: «Складной верх»,
«Емкость хранилища»: "2,133 куб. дюймов",
«Количество частей»: "1",
«Группировка продуктов портативных ящиков для инструментов»: «Переносные ящики для инструментов»,
"Направляющие для ящиков": "Никто",
«Количество ящиков»: "0",
«Система блокировки»: "Замок",
«Количество лотков»: "1",
"Весовая емкость": "40 фунтов",
«Количество ручек»: "1",
«Основной материал для ящика для инструментов»: "Сталь",
«Основной цвет ящика для инструментов»: «Красный»,
"Конец": "Порошковое покрытие",
«Количество отсеков»: "2",
«Внешний материал»: "Сталь",
«Тип закрытия»: "Защелка",
"Штабелируемый": «Не штабелируется»,
"Отделка кузова": "Порошковое покрытие",
«Измеритель тела»: "14 га",
«Количество ключей в комплекте»: "0",
«Конфигурация»: «Индивидуальный ящик для инструментов»,
"Стиль рукоятки": "Металл",
«Включает ключи»: «Ключи в комплект не входят»,
«Общая грузоподъемность»: "40 фунтов",
«Грузоподъемность на ящик»: "10 фунтов",
«Включает ящики»: «Ящики в комплект не входят»,
«Количество коробок»: "1",
"Включает ролики": «Ролики в комплект не входят»,
«Общая емкость хранилища»: "2,133 куб. дюймов",
«Количество делителей»: "1"
},
"image_urls": [
"https://www.zoro.com/static/cms/product/large/Z1o8_0mcpEx-.JPG",
"https://www.zoro.com/static/cms/product/full/Z1o8_0mcpEx_.JPG"
],
"URL": "https://www.zoro.com/proto-general-purpose-double-latch-tool-box-with-tray-steel-red-20-w-x-85-d-x-95-h-j9975r/i/G0067825/"
}
]

Заключение

Сбор данных с веб-сайта Zoro.com может полностью изменить ситуацию для компаний, исследователей и разработчиков, которые хотят анализировать тенденции в продуктах, сравнивать цены или создавать инструменты автоматизации инвентаризации. Использование современных инструментов, таких как Crawlbase Crawling API упрощает обработку контента, отрисованного с помощью JavaScript, и разбивку на страницы.

Следуйте инструкциям в этом посте, и вы сможете извлекать данные из списков поиска и страниц продуктов Zoro и сохранять результаты в структурированном формате, например JSON. Всегда используйте эти данные ответственно и соблюдайте условия обслуживания веб-сайта.

Если вы хотите извлекать данные с других платформ электронной коммерции, ознакомьтесь с этими руководствами.

📜 Как скрейпить Amazon
📜 Как взломать Walmart
📜 Как скрейпить AliExpress
📜 Как очистить Zalando
📜 Как извлечь данные о розничной торговле из Farfetch

Обратитесь к нашему поддержка если у вас есть вопросы. Счастливого скрапинга!

Часто задаваемые вопросы (FAQ):

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

В. Какие инструменты мне понадобятся для эффективного парсинга Zoro?

Для парсинга Zoro вам понадобится Python, BeautifulSoup для парсинга HTML и Crawlbase Crawling API для обработки контента, визуализируемого с помощью JavaScript, и пагинации.

В. Как я могу сохранить извлеченные данные для будущего использования?

Собранные данные можно сохранить в форматах JSON, CSV или в базе данных, в зависимости от вашего проекта. JSON лучше всего подходит для структурированных данных и легко интегрируется с другими приложениями.