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

В этой статье я пошагово покажу, как выполнять скрейпинг Amazon С помощью Python. Мы рассмотрим два метода: традиционный способ с CSS-селекторами и XPath и более продвинутый подход с использованием Bright Data для управления прокси. В итоге вы будете знать, как успешно собирать данные с Amazon, даже несмотря на его защитные механизмы.

Зачем собирать данные с Amazon?

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

  1. Price Tracking: Компании могут отслеживать цены на товары конкурентов и соответственно корректировать свои цены.
  2. Product Research: Продавцы могут отслеживать товарные тренды и корректировать ассортимент в зависимости от того, что хорошо продается.
  3. Исследование рынка: Аналитики могут извлекать отзывы покупателей, сведения о товарах и оценки, чтобы понять, что покупатели думают о конкретных продуктах.
  4. Data Aggregation: Исследователи и разработчики могут собирать данные по различным категориям товаров для анализа или сравнения.

Что понадобится для веб-скрейпинга

Перед началом убедитесь, что выполнены следующие требования:

Python: Мы будем использовать Python для написания Веб-скрейпинг и автоматизация: скрипты. Python чаще выбирают благодаря своей простоте и мощным библиотекам. Установите Python 3.9 или новее from the official Python website.

Libraries: Мы будем использовать такие библиотеки, как requestsBeautifulSoup, а также pandas для скрейпинга и работы с данными. Их можно установить через pip:

pip install requests beautifulsoup4 pandas

Яркие данныеЯркие данные представляет собой прокси-сеть, которая поможет нам обходить ограничения вроде IP-блокировок. С Bright Data вы можете направлять запросы через разные IP-адреса, чтобы Amazon не обнаруживал множество запросов из одного источника.

Пошаговое руководство по веб-скрейпингу Amazon

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

Шаг 1: Настройка окружения

Для начала импортируйте необходимые библиотеки:

импорт requests
с сайта bs4 импорт BeautifulSoup
импорт панды в роли pd

Вам также нужно установить requests и beautifulsoup4 с помощью pip, если вы еще этого не сделали.

pip install requests beautifulsoup4

Шаг 2: Отправка запроса на Amazon

Чтобы извлечь данные с Amazon, сначала нужно отправить HTTP-запрос к странице поиска Amazon. Например, извлечём данные по поисковому запросу вроде «laptop».

url = "https://www.amazon.com/s?k=laptop"
заголовки = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
}
response = requests.get(url, headers=headers)

User-Agent в заголовках делает запрос похожим на запрос из обычного веб-браузера, что помогает обходить базовую защиту от ботов.

Шаг 3: Парсинг HTML с помощью BeautifulSoup

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

soup = BeautifulSoup(response.content, 'html.parser')

Шаг 4: Извлечение информации о товаре

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

Вот как извлечь названия товаров и цены:

products = soup.find_all('div', {'class': 's-main-slot s-result-list s-search-results sg-row'})
product_names = []
prices = []
для продукт в products:
name = product.find('span', {'class': 'a-text-normal'})
price = product.find('span', {'class': 'a-price-whole'})
если name and price:
product_names.append(name.text)
prices.append(price.text)
# Save to CSV
data = {'Название товара': product_names, 'Цена': prices}
df = pd.DataFrame(data)
df.to_csv('amazon_products.csv', index=False)

В этом фрагменте:

  • soup.find_all() is used to locate all product elements in the search results.
  • Метод find() используется для извлечения названий товаров и цен.
  • Наконец, мы сохраняем результаты в pandas DataFrame и экспортируем их в CSV-файл.

Шаг 5: Работа с пагинацией

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

Получайте истории Data Journal на свою почту

Чтобы это обработать, можно изменить URL, добавив номер страницы:

page_num = 1
url = f"https://www.amazon.com/s?k=laptop&page={page_num}"

Then, repeat the scraping process for each page by updating the page_num variable.

Шаг 6: Обработка динамического контента

Некоторый контент на Amazon загружается динамически с помощью JavaScript. Если вы столкнулись со страницей, где данные о товаре не видны напрямую в HTML, вам потребуется использовать инструмент вроде Selenium, чтобы взаимодействовать со страницей и дождаться загрузки JavaScript.

Вот пример использования Selenium для парсинга Amazon:

с сайта селен импорт webdriver
с сайта selenium.webdriver.common.by импорт По ссылке
с сайта selenium.webdriver.chrome.service импорт Service
с сайта webdriver_manager.chrome импорт ChromeDriverManager
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
driver.get("https://www.amazon.com/s?k=laptop")
# Wait for the page to load and fetch the product names
products = driver.find_elements(By.CLASS_NAME, 's-main-slot')
# Extract and print product names
для продукт в products:
name = product.find_element(By.CLASS_NAME, 'a-text-normal')
печать(name.text)
driver.quit()

Этот подход более ресурсоёмкий, но это надёжный способ работать с динамическими страницами.

Шаг 7: Использование Bright Data для управления прокси

Amazon может заблокировать ваш IP, если вы отправите слишком много запросов за короткий промежуток времени. Чтобы этого избежать, можно использовать Bright Data (ранее Luminati) для ротации IP-адресов и избежания обнаружения. Bright Data — это прокси-сервис, который позволяет направлять запросы через разные IP-адреса, имитируя поведение человека.

Настроить прокси Bright Data можно так:

proxy = {
"http": "http://your_bright_data_proxy:port",
"https": "https://your_bright_data_proxy:port"
}
response = requests.get(url, headers=headers, proxies=proxy)

Это направит запросы через прокси-сеть Bright Data, что поможет предотвратить блокировку вашего IP со стороны Amazon.

Шаг 8: Работа с CAPTCHA

Amazon часто показывает CAPTCHA, когда обнаруживает автоматизированный скрапинг. Bright Data помогает снизить эту проблему, обрабатывая CAPTCHA за вас. Однако, если CAPTCHA всё же продолжают появляться, можно использовать API вроде 2Captcha или Anti-Captcha, чтобы решать их программно.

Заключение

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

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

Похожие записи