Как собирать данные о продуктах Amazon с помощью массивных прокси

Как собирать данные о продуктах Amazon с помощью массивных прокси

Jason Grad
Соучредитель
February 26, 2025
Оглавление

Готовы протестировать производительность премиум-прокси?

Как собирать данные о продуктах Amazon с помощью массивных прокси

Как собирать данные о продуктах Amazon с помощью массивных прокси

Jason Grad
Соучредитель
February 26, 2025

Amazon предоставляет обширную коллекцию данных о продуктах (данные Amazon), которая является ценным ресурсом для компаний, исследователей и маркетологов. Обработка веб-страниц Amazon требует тщательного рассмотрения мер по борьбе со скрейнингом. В этом руководстве объясняется, как использовать прокси-серверы Massive для эффективных HTTP-запросов и сбора данных со страниц продуктов Amazon, избегая блокировок IP-адресов.

Давайте погрузимся в мир!

Типичные примеры использования данных о продуктах Amazon

Когда дело доходит до очистки веб-страниц Amazon, существует множество ценных приложений:

  • Мониторинг и оптимизация цен: Отслеживайте цены в реальном времени с помощью автоматических HTTP-запросов для корректировки стратегий.
  • Исследование продуктов и рынка: Проанализируйте сведения о продуктах и обзоры, чтобы получить представление о предпочтениях потребителей и аналитике рынка.
  • Анализ конкурентов: Систематический сбор данных о ценах конкурентов и товарных стратегиях.
  • Управление запасами: Контролируйте уровень запасов для оптимизации цепочек поставок.

Зачем использовать прокси при очистке веб-страниц

Прокси крайне важны для очистки веб-страниц Amazon, потому что они:

  • Избегайте запретов на использование IP-адресов: Меняйте IP-адреса и комбинируйте их с ротационными пользовательскими агентами, чтобы избежать обнаружения.
  • Доступ к контенту, заблокированному по регионам: Используйте прокси для имитации местоположения и обхода географических ограничений.
  • Ограничения скорости обхода: Распределяйте HTTP-запросы по нескольким IP-адресам, чтобы избежать регулирования.

Понимание мер Amazon по борьбе со скрейпингом

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

  • Капчи: Amazon часто использует капчи, чтобы отличить пользователей-людей от ботов. Эти капчи просты для людей, но автоматическим скриптам сложно разгадать. Если эти проблемы не будут эффективно решены, они могут заблокировать ваши попытки очистки.
  • Ограничение скорости: Чтобы предотвратить перегрузку сервера, Amazon ограничивает количество запросов, которые вы можете сделать в течение определенного периода времени. Важно соблюдать эти ограничения, чтобы избежать блокировки.
  • Блокировка IP-адресов: Если Amazon обнаружит чрезмерную активность по очистке данных с определенного IP-адреса, она может полностью заблокировать ее.
  • Динамическая структура страницы: Amazon часто обновляет макет и элементы своего веб-сайта, что может нарушить работу существующих скриптов очистки, основанных на статических целевых элементах. Это означает, что вам, возможно, придется постоянно корректировать код, чтобы соответствовать этим изменениям.

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

Я больше не мог собирать данные, что было очень утомительно и отнимало много времени. Но не волнуйтесь — мы рассмотрим решение: использование прокси-серверов Massive Residential Proxy для скрытой обработки данных.

Прокси-серверы для частных и центров обработки данных: какие прокси лучше всего подходят для очистки Amazon?

При выборе прокси для очистки Amazon важно определить, какой тип прокси лучше: для жилых или для центров обработки данных.

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

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

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

Преимущества использования массивных прокси для очистки Amazon

Массивные резидентные прокси предлагают несколько ключевых преимуществ:

  1. 🌐 Глобальный охват: Посещайте более 195 стран — целевые города, почтовые индексы или ASN
  2. 🔒 Анонимность: Миллионы вращающихся IP-адресов + настраиваемая ротация (за запрос или 1-60 минут)
  3. ⚡ Скорость и надежность: Коэффициент успеха 99,8%, время отклика <0,7 с и время безотказной работы 99,9%
  4. 💰 Бюджетно: Начните с 4,49 долларов США/ГБ с масштабируемыми планами
  5. ✅ Соответствует этическим нормам: Прокси, полностью соответствующие требованиям GDPR/CCPA, на 100% из этичных источников
  6. 🛠️ Поддержка: Через Slack, Skype, электронную почту или билеты

Начало работы с Massive

Если вы новичок в Massive, зарегистрируйте аккаунт. Выберите план, соответствующий вашим потребностям.

Примечание: Мы предлагаем Бесплатная пробная версия 2 ГБ для компаний. Для начала заполните эту форму. Если вам нужна большая пропускная способность, свяжитесь с нашим отделом продаж, и мы вам поможем.

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

Этапы настройки:

Посетите Быстрый старт раздел для настройки параметров прокси-сервера:

  • Выберите предпочтительный протокол (HTTP, HTTPS или SOCKS5)
  • Выберите между вращающиеся или липкие прокси
  • Задайте настройки геотаргетинга (страна, штат, город или почтовый индекс)

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

Дополнительные функции, такие как таргетинг на основе местоположения и фиксированные сеансы, см. в Обширная документация. В документации представлены пошаговые инструкции по максимально эффективному использованию прокси-серверов Massive Residential.

Благодаря этой настройке вы можете использовать Massive Proxies для сбора данных о продуктах Amazon из определенного региона.

Создание скрапера Amazon с помощью Python и Massive

Давайте рассмотрим процесс создания парсера Python для очистки всех данных из Amazon с помощью прокси-серверов Massive и Playwright. Библиотека Playwright очень полезна для автоматизации взаимодействия с браузерами, особенно для динамически загружаемого контента.

Мы соберем следующие данные по каждому продукту Amazon: название продукта, рейтинг, количество отзывов, цена, купон (при наличии) и ссылка на продукт.

1. Настройте свою среду Python

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

pip install playwright
playwright install


2. Импортируйте необходимые библиотеки

Импортируйте в файл Python необходимые библиотеки для асинхронного программирования и автоматизации браузера:

import asyncio
from playwright.async_api import async_playwright


3. Создайте функцию очистки

Определите асинхронную функцию с именем amazon_shopping_search. Эта функция примет поисковый запрос и дополнительный домен (по умолчанию «com»):


async def amazon_shopping_search(search_query, domain='com'):


4. Подготовьте URL-адрес для поиска

Отформатируйте поисковый запрос, заменив пробелы на + чтобы создать действительный URL-адрес для поиска, выполните следующие действия:

q = search_query.replace(" ", "+")
base_url = f"<https://www.amazon>.{domain}/s?k={q}"


5. Запустите браузер с настройками прокси-сервера

Запустите браузер с настройками прокси-сервера и добавьте учетные данные своей учетной записи Massive.

async with async_playwright() as p:
    browser = await p.chromium.launch(
        headless=True,
        proxy={
            "server": "https://network.joinmassive.com:65535",
            "username": "MASSIVE_USERNAME",
            "password": "MASSIVE_PASSWORD",
        },
    )

При запуске все запросы, сделанные браузером, будут проходить через указанный прокси-сервер, что поможет сохранить анонимность.

6. Создайте новую страницу

Создайте новую страницу в браузере и инициализируйте переменную для отслеживания текущего номера страницы:

page = await browser.new_page()
page_number = 1


7. Петля для соскабливания

Внедрите цикл, который продолжается до тех пор, пока не останется страниц для очистки. Для каждой итерации создайте URL-адрес текущей страницы и перейдите к ней:

while True:
    url = f"{base_url}&page={page_number}"
    print(f"Scraping page {page_number}...")
    await page.goto(url, wait_until="domcontentloaded")

8. Извлеките информацию о продукте

Для каждого продукта на странице извлеките различные сведения, такие как название, цена, рейтинг, отзывы, купон и ссылка, используя селекторы CSS. Если информация недоступна, присвойте значение «N/A».

Вот как можно извлечь каждую часть информации:

A. Название продукта:

Фрагмент кода:

name = await product.query_selector("[data-cy=title-recipe]")
name = await name.inner_text() if name else "N/A"


B. Цена продукта:

Фрагмент кода:

current_price = await product.query_selector(".a-price > .a-offscreen")
current_price = await current_price.inner_text() if current_price else "N/A"


C. Рейтинг продукта:

Фрагмент кода:

rating = await product.query_selector("[data-cy=reviews-ratings-slot]")
rating = await rating.inner_text() if rating else "N/A"


D. Обзоры продуктов:

Фрагмент кода:

reviews = await product.query_selector(
    ".rush-component > div > span > a > span, a.a-link-normal > span.a-size-base"
)
reviews = await reviews.inner_text() if reviews else "N/A"


E. Купон на продукт
:

Фрагмент кода:

coupon = await product.query_selector(".s-coupon-unclipped")
coupon = await coupon.inner_text() if coupon else "N/A"


F. Ссылка на продукт:

Фрагмент кода:

link = await product.query_selector("a.a-link-normal")
if link:
    full_link = await link.get_attribute("href")
    link = (
        f'<https://www.amazon>.{domain}{full_link.split("/ref=")[0]}'
        if full_link
        else "N/A"
    )
else:
    link = "N/A"


9. Проверьте следующую страницу

Проверьте ссылку на следующую страницу. Если её нет, вырвитесь из этой ситуации:

next_page = await page.query_selector(".s-pagination-next")
if not next_page:
    print("No more pages to scrape.")
    break


10. Закройте браузер

После очистки всех страниц закройте браузер!

await browser.close()


11. Основная функция

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

async def main():
    await amazon_shopping_search(search_query="office chair", domain="com")

# Run the main function
asyncio.run(main())


Сохранить данные в CSV

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

import csv

# Open the CSV file once before the loop
with open("product_data.csv", mode="w", newline="", encoding="utf-8") as file:
    writer = csv.writer(file)
    # Write the header
    writer.writerow(["Name", "Current Price", "Rating", "Reviews", "Coupon", "Link"])

    # existing code...

    for product in products:
        # existing code...

        # Write the data if the product is valid and not sponsored
        if name != "N/A" and "Sponsored" not in name:
            writer.writerow([name, current_price, rating, reviews, coupon, link])

    # existing code...


Полный код

Взгляните на полный код для очистки данных о продуктах Amazon:

import asyncio
from playwright.async_api import async_playwright
import csv


async def amazon_shopping_search(search_query, domain="com"):
    q = search_query.replace(" ", "+")
    base_url = f"https://www.amazon.{domain}/s?k={q}"

    async with async_playwright() as p:
        # Launch browser with massive proxy to avoid IP blocking
        browser = await p.chromium.launch(
            headless=True,
            proxy={
                "server": "https://network.joinmassive.com:65535",
                "username": "PROXY_USERNAME",
                "password": "PROXY_PASSWORD",
            },
        )

        page = await browser.new_page()
        page_number = 1

        with open("product_data.csv", mode="w", newline="", encoding="utf-8") as file:
            writer = csv.writer(file)
            writer.writerow(["Name", "Price", "Rating", "Reviews", "Coupon", "Link"])

            while True:
                url = f"{base_url}&page={page_number}"
                print(f"Scraping page {page_number}...")

                try:
                    await page.goto(url, wait_until="networkidle", timeout=60000)
                    await page.wait_for_selector(".s-result-item")
                except Exception as e:
                    print(f"Navigation failed: {str(e)}")
                    break

                # Get all product elements
                products = await page.query_selector_all(".s-result-item")

                for product in products:
                    # Skip sponsored items
                    is_sponsored = await product.query_selector(
                        ".s-sponsored-label-text"
                    )
                    if is_sponsored:
                        continue

                    # Extract data with error handling
                    try:
                        name_elem = await product.query_selector("h2 a")
                        name = await name_elem.inner_text() if name_elem else "N/A"

                        price_elem = await product.query_selector(
                            ".a-price .a-offscreen"
                        )
                        price = await price_elem.inner_text() if price_elem else "N/A"

                        rating_elem = await product.query_selector(
                            ".a-icon-star-small .a-icon-alt"
                        )
                        rating = (
                            await rating_elem.inner_text() if rating_elem else "N/A"
                        )

                        reviews_elem = await product.query_selector(
                            ".a-size-small .a-size-base"
                        )
                        reviews = (
                            await reviews_elem.inner_text() if reviews_elem else "N/A"
                        )

                        coupon_elem = await product.query_selector(
                            ".s-coupon-unclipped"
                        )
                        coupon = (
                            await coupon_elem.inner_text() if coupon_elem else "N/A"
                        )

                        link = await name_elem.get_attribute("href")
                        link = (
                            f"https://www.amazon.{domain}{link.split('?')[0]}"
                            if link
                            else "N/A"
                        )

                        writer.writerow([name, price, rating, reviews, coupon, link])
                    except Exception as e:
                        print(f"Error processing product: {str(e)}")
                        continue

                # Pagination handling
                next_disabled = await page.query_selector(
                    ".s-pagination-next.s-pagination-disabled"
                )
                if next_disabled:
                    print("Reached last page")
                    break

                page_number += 1
                if page_number > 5:  # Safety limit
                    print("Reached page limit")
                    break

        await browser.close()


async def main():
    await amazon_shopping_search(search_query="office chair", domain="com")


if __name__ == "__main__":
    asyncio.run(main())

Как только код будет успешно запущен, он сохранит все очищенные данные о продукте в CSV-файл:

Приятно! Данные легко анализировать и читать.

Подведение итогов

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

Готовы начать? Подпишитесь на Massive Proxies сегодня 🚀

Об авторе
Jason Grad
Соучредитель

Я являюсь соучредителем и генеральным директором Massive. Помимо работы над стартапами, я музыкант, спортсмен, ментор, ведущий мероприятий и волонтер.

Отзывы клиентов

Часто задаваемый вопрос

+

+

+

+

+

+

+

+

+

+

Ready to test premium proxy performance?

Прочитайте больше