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

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