Полное руководство по сбору данных с Amazon: советы, хитрости и 9 лучших практик на 2023 год

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

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

Содержание

Итак, наберитесь смелости, наденьте виртуальные ботинки — и давайте вместе отправимся в наше приключение в мире данных!

Какие данные собирать с Amazon

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

  1. Название товара
  2. Цена
  3. Экономия (если применимо)
  4. Краткое описание товара
  5. Список характеристик (если доступен)
  6. Оценка отзывов
  7. Изображения товара

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

Основные требования

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

  • Python — благодаря простоте использования и обширной коллекции библиотек Python является лучшим выбором для веб-скрейпинга. Если он ещё не установлен, обратитесь к этому руководству.
  • BeautifulSoup — одна из множества библиотек Python для веб-скрейпинга. Простота и удобство использования сделали её популярным выбором для веб-скрейпинга. После успешной установки Python установите Beautiful Soup, выполнив команду: pip install bs4
  • Базовое понимание HTML-тегов — ознакомьтесь с этим руководством, чтобы получить необходимые знания об HTML-тегах.
  • Веб-браузер — поскольку нам нужно отфильтровать с сайта много нерелевантной информации, для этого потребуются определённые идентификаторы и теги. Веб-браузер, например Google Chrome или Mozilla Firefox, пригодится для поиска этих тегов.

Подготовка к парсингу

Для начала убедитесь, что у вас установлен Python. Если у вас нет Python 3.8 или более поздней версии, зайдите на сайт python.org, чтобы скачать и установить последнюю версию.

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

Используйте следующие команды, чтобы создать и активировать виртуальное окружение в macOS и Linux:

$ python3 -m venv .env $ source .env/bin/activate

Для пользователей Windows команды будут немного отличаться:

d:amazon>python -m venv .env d:amazon>.envscriptsactivate

Теперь нужно установить необходимые пакеты Python.

Вам понадобятся пакеты для решения двух основных задач: получения HTML-кода и его разбора для извлечения нужных данных.

Библиотека Requests — широко используемая сторонняя библиотека Python для отправки HTTP-запросов. Она предлагает простой и удобный интерфейс для отправки HTTP-запросов веб-серверам и получения ответов. Это, пожалуй, самая известная библиотека для парсинга веб-страниц.

Однако у библиотеки Requests есть ограничение: она возвращает HTML-ответ в виде строки, в которой может быть сложно найти отдельные элементы, например цены товаров, при написании кода для парсинга веб-страниц.

Здесь на помощь приходит Beautiful Soup. Beautiful Soup — это библиотека Python, предназначенная для парсинга веб-страниц и извлечения данных из файлов HTML и XML. Она позволяет получать информацию с веб-страницы, выполняя поиск по тегам, атрибутам или конкретному тексту.

Чтобы установить обе библиотеки, используйте следующую команду:

$ python3 -m pip install requests beautifulsoup4

Пользователям Windows нужно заменить «python3» на «python», оставив остальную часть команды без изменений:

d:amazon>python -m pip install requests beautifulsoup4

Обратите внимание, что мы устанавливаем библиотеку Beautiful Soup версии 4.

Теперь проверим библиотеку Requests для парсинга. Создайте файл с именем amazon.py и введите следующий код:

import requests url = ' https://www.amazon.com/Bose-QuietComfort-45-Bluetooth-Canceling-Headphones/dp/B098FKXT8L' response = requests.get(url) print(response.text)

Сохраните файл и запустите его из терминала.

$ python3 amazon.py

В большинстве случаев вы не сможете увидеть нужный HTML-код. Amazon заблокирует запрос, и вы получите следующий ответ:

To discuss automated access to Amazon data please contact [email protected].

Если вывести response.status_code, вы увидите, что вместо кода успешного ответа 200 получаете ошибку 503.

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

Простое решение — отправлять вместе с запросом заголовки, имитирующие те, которые отправляет браузер.

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

Чтобы узнать user-agent, отправляемый вашим браузером, нажмите F12, откройте вкладку Network и перезагрузите страницу. Выберите первый запрос и изучите Request Headers.

Скопируйте этот user-agent и создайте словарь заголовков, как в примере ниже с заголовками user-agent и accept-language:

custom_headers = { ' user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36', 'accept-language': 'en-GB,en;q=0.9', }

Затем можно передать этот словарь в качестве необязательного параметра методу get:

response = requests.get(url, headers=custom_headers

Сбор информации о товарах Amazon

При сборе данных о товарах Amazon обычно приходится работать с двумя типами страниц: страницей категории и страницей с подробной информацией о товаре.

Например, посетите страницу https://www.amazon.com/b?node=12097479011 или выполните поиск на Amazon по запросу «Полноразмерные наушники». Страница с результатами поиска называется страницей категории.

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

Рассмотрим структуру страницы с подробной информацией о товаре.

Откройте URL-адрес товара, например https://www.amazon.com/Bose-QuietComfort-45-Bluetooth-Canceling-Headphones/dp/B098FKXT8L, в Chrome или другом современном браузере. Щёлкните правой кнопкой мыши название товара и выберите «Просмотреть код». Будет выделена HTML-разметка названия товара.

Вы увидите, что это тег span с атрибутом id, значение которого — «productTitle».

Аналогично щёлкните правой кнопкой мыши цену и выберите «Просмотреть код», чтобы увидеть HTML-разметку цены.

Целая часть цены в долларах находится в теге span с классом «a-price-whole», а часть с центами — в другом теге span с классом «a-price-fraction».

Таким же способом можно найти рейтинг, изображение и описание.

Собрав эту информацию, добавьте следующие строки в существующий код:

response = requests.get(url, headers=custom_headers) soup = BeautifulSoup(response.text, 'lxml')

Beautiful Soup предлагает отдельный способ выбора тегов с помощью методов find. Кроме того, в качестве альтернативы поддерживаются CSS-селекторы. Для получения одинакового результата можно использовать любой из этих подходов. В этом руководстве мы воспользуемся CSS-селекторами — универсальным способом выбора элементов. CSS-селекторы совместимы практически со всеми инструментами веб-скрейпинга для извлечения информации о товарах Amazon.

Теперь можно использовать объект Soup для получения нужной информации.

Извлечение названия товара

Название товара находится в элементе span с идентификатором ‘productTitle’. Выбирать элементы по уникальным идентификаторам просто.

Рассмотрим следующий пример кода:

title_element = soup.select_one('#productTitle')

Мы передаём CSS-селектор методу select_one, который возвращает экземпляр элемента.

Чтобы извлечь текстовую информацию, используйте атрибут text.

title = title_element.text

При выводе вы можете заметить несколько пробелов. Чтобы устранить их, добавьте вызов функции .strip(), как показано ниже:

title = title_element.text.strip()

Извлечение рейтинга товара

Получение рейтинга товаров Amazon требует немного дополнительных усилий.

Сначала задайте селектор для рейтинга:

#acrPopover

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

rating_element = soup.select_one('#acrPopover')

Обратите внимание, что фактическое значение рейтинга находится в атрибуте title:

rating_text = rating_element.attrs.get('title') print(rating_text) # prints '4.6 out of 5 stars'

Наконец, используйте метод replace, чтобы получить числовое значение рейтинга:

rating = rating_text.replace('out of 5 stars', '')

Извлечение цены товара

Цену товара можно найти в двух местах — под названием товара и в блоке «Купить сейчас».

Для сбора цен товаров Amazon можно использовать любой из этих тегов.

Создайте CSS-селектор для цены:

#price_inside_buybox

Передайте этот CSS-селектор методу select_one библиотеки BeautifulSoup следующим образом:

price_element = soup.select_one('#price_inside_buybox')

Теперь можно вывести цену:

print(price_element.text)

Извлечение изображения

Чтобы собрать данные об изображении по умолчанию, используйте CSS-селектор #landingImage. С помощью этой информации можно написать следующие строки кода, чтобы получить URL-адрес изображения из атрибута src:

image_element = soup.select_one('#landingImage') image = image_element.attrs.get('src')

Извлечение описания товара

Следующий шаг при извлечении данных о товарах Amazon — получение описания товара.

Процесс остаётся прежним: создайте CSS-селектор и используйте метод select_one.

CSS-селектор для описания:

#productDescription

Это позволяет извлечь элемент следующим образом:

description_element = soup.select_one('#productDescription') print(description_element.text)

Обработка списка товаров

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

Например, https://www.amazon.com/b?node=12097479011 — это страница категории полноразмерных наушников.

Если изучить эту страницу, можно увидеть, что все товары находятся внутри элемента div с уникальным атрибутом [data-asin]. Внутри этого элемента div все ссылки на товары расположены в теге h2.

На основании этой информации CSS-селектор будет таким:

[data-asin] h2 a

Можно считывать атрибут href этого селектора и запускать цикл. Однако помните, что ссылки будут относительными. Для их обработки понадобится метод urljoin.

from urllib.parse import urljoin ... def parse_listing(listing_url): … link_elements = soup_search.select("[data-asin] h2 a") page_data = [] for link in link_elements: full_url = urljoin(search_url, link.attrs.get("href")) product_info = get_product_info(full_url) page_data.append(product_info)

Обработка пагинации

Ссылка на следующую страницу находится в элементе link с текстом “Next”. Найти эту ссылку можно с помощью оператора contains в CSS:

next_page_el = soup.select_one('a:contains("Next")') if next_page_el: next_page_url = next_page_el.attrs.get('href') next_page_url = urljoin(listing_url, next_page_url)

Экспорт данных Amazon

Собранные данные намеренно возвращаются в виде словаря. Можно создать список, содержащий все собранные товары.

def parse_listing(listing_url): ... page_data = [] for link in link_elements: ... product_info = get_product_info(full_url) page_data.append(product_info)

Затем можно использовать page_data для создания объекта DataFrame библиотеки Pandas:

df = pd.DataFrame(page_data) df.to_csv('headphones.csv', index = False)

Как парсить несколько страниц на Amazon

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

Вот 6 ключевых моментов, которые следует учитывать при парсинге нескольких страниц на Amazon:

  1. Определите схему пагинации: Сначала проанализируйте структуру URL страниц категорий или результатов поиска, чтобы понять, как Amazon разбивает контент на страницы. Это может быть параметр запроса (например, «?page=2») или уникальный идентификатор, встроенный в URL.
  2. Извлеките ссылку на следующую страницу: Найдите элемент (обычно тег привязки), содержащий ссылку на следующую страницу. Используйте соответствующий CSS-селектор или метод Beautiful Soup, чтобы извлечь атрибут href этого элемента — URL следующей страницы.
  3. Преобразуйте относительные URL в абсолютные: Поскольку извлечённые URL могут быть относительными, используйте функцию urljoin из библиотеки urllib.parse, чтобы преобразовать их в абсолютные URL.
  4. Создайте цикл: Реализуйте цикл, который будет проходить по страницам и собирать нужные данные с каждой из них. Цикл должен продолжаться, пока не останется страниц. Это можно определить, проверяя, есть ли на текущей странице ссылка на следующую.
  5. Добавляйте паузы между запросами: Чтобы не перегружать сервер Amazon и не запускать механизмы защиты от ботов, добавляйте паузы между запросами с помощью функции time.sleep() из библиотеки time. Настройте длительность паузы так, чтобы имитировать поведение человека при просмотре страниц.
  6. Обработка CAPTCHA и блокировок: Если при парсинге нескольких страниц вы столкнётесь с CAPTCHA или блокировкой IP-адреса, рассмотрите возможность использования прокси для смены IP-адресов либо специальных инструментов и сервисов для парсинга, способных автоматически справляться с такими проблемами.

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

В ходе урока ведущий демонстрирует использование необходимых инструментов и библиотек, таких как Python, BeautifulSoup и requests, а также рассказывает о лучших практиках, помогающих избежать блокировки или обнаружения механизмами защиты Amazon от ботов. В видео рассматриваются такие важные темы, как обработка пагинации, управление частотой запросов и имитация поведения человека при просмотре страниц.

Помимо пошаговых инструкций, представленных в видео, в уроке также приводятся полезные советы и рекомендации, которые помогут оптимизировать процесс парсинга. Например, можно использовать прокси для обхода ограничений по IP-адресам, менять User-Agent и заголовки запросов, а также правильно обрабатывать ошибки, чтобы процесс парсинга проходил плавно и без перебоев.

Парсинг Amazon: часто задаваемые вопросы

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

1. Законно ли парсить Amazon?

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

2. Разрешает ли Amazon парсинг?

Хотя сбор общедоступных данных законен, Amazon иногда принимает меры для предотвращения парсинга. К ним относятся ограничение частоты запросов, блокировка IP-адресов и использование отпечатков браузера для обнаружения ботов-парсеров. Обычно Amazon блокирует веб-парсинг, возвращая код успешного ответа 200 OK, и требует пройти CAPTCHA либо показывает сообщение HTTP Error 503 Service Unavailable с предложением связаться с отделом продаж и приобрести платный API.

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

3. Этично ли собирать данные с Amazon?

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

4. Как избежать блокировки при парсинге Amazon?

Чтобы избежать блокировки при парсинге Amazon, ограничивайте частоту запросов, не собирайте данные в часы пик, используйте интеллектуальную ротацию прокси, а также подходящие user agent и заголовки, чтобы не привлекать внимания. Кроме того, извлекайте только необходимые данные и используйте сторонние инструменты или библиотеки для парсинга.

5. Чем грозит парсинг Amazon?

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

Заключение

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

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