Как парсить Amazon: Руководство на 2024 год

Узнайте, как парсить Amazon с помощью python, а также как использовать браузер для веб-скрапинга Bright Data.
5 min read
How To Scrape Amazon

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

В этом руководстве вы узнаете, как парсить Amazon с помощью таких инструментов, как Beautiful Soup и Playwright. По мере прохождения процесса шаг за шагом вы также узнаете о решении Bright Data, которое может значительно ускорить этот процесс.

Спарсите Amazon вручную с помощью Python

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

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

Пререквизиты

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

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

mkdir scraping-amazon-python && cd scraping-amazon-python

После того как вы создали директорию проекта, на следующем этапе необходимо установить набор дополнительных библиотек, которые необходимы для эффективного веб-скрапинга. В частности, вы будете использовать Requests – библиотеку для обработки HTTP-запросов в Python; pandas – надежную библиотеку, предназначенную для манипулирования данными и их анализа; Beautiful Soup (BS4) для разбора HTML-контента; Playwright для автоматизации задач, связанных с просмотром веб-страниц.

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

pip3 install beautifulsoup4
pip3 install requests
pip3 install pandas
pip3 install playwright
playwright install

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

Обратите внимание: последняя команда (ie playwright install) имеет решающее значение, поскольку она обеспечивает правильную установку необходимых двоичных файлов браузера.

Навигация по компонентам макета и данных Amazon

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

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

Amazon

Если вы хотите получить более обширный список результатов, вы можете воспользоваться кнопками пагинации, расположенными в нижней части страницы. На каждой странице обычно размещается множество объявлений, что дает вам возможность просмотреть дополнительные товары. Фильтры, расположенные в верхней части страницы, позволяют уточнить поиск в соответствии с вашими требованиями.

Чтобы получить представление о HTML-структуре Amazon, выполните следующие действия:

  1. Зайдите на сайт Amazon.
  2. Введите нужный товар в строку поиска или выберите категорию из списка товаров.
  3. Откройте инструменты разработчика браузера, щелкнув правой кнопкой мыши на товаре и выбрав пункт Inspect Element.
  4. Изучите HTML-макет, чтобы определить теги и атрибуты данных, которые вы собираетесь извлечь.

Спарсите товары Amazon

Теперь, когда вы знакомы со структурой товаров Amazon, в этом разделе вы соберете такие данные, как название товара, рейтинг, количество оценок и цена.

В каталоге проекта создайте новый Python-скрипт с именем amazon_scraper.py и добавьте в него следующий код:

import asyncio
from playwright.async_api import async_playwright
import pandas as pd
async def scrape_amazon():
    async with async_playwright() as pw:
        # Launch new browser
        browser = await pw.chromium.launch(headless=False)
        page = await browser.new_page()
        # Go to Amazon URL
        await page.goto('https://www.amazon.com/s?i=fashion&bbn=115958409011')
        # Extract information
        results = []
        listings = await page.query_selector_all('div.a-section.a-spacing-small')
        for listing in listings:
            result = {}
            # Product name
            name_element = await listing.query_selector('h2.a-size-mini > a > span')
            result['product_name'] = await name_element.inner_text() if name_element else 'N/A'
            
            # Rating
            rating_element = await listing.query_selector('span[aria-label*="out of 5 stars"] > span.a-size-base')
            result['rating'] = (await rating_element.inner_text())[0:3]await rating_element.inner_text() if rating_element else 'N/A'
            
            # Number of reviews
            reviews_element = await listing.query_selector('span[aria-label*="stars"] + span > a > span')
            result['number_of_reviews'] = await reviews_element.inner_text() if reviews_element else 'N/A'
            
            # Price
            price_element = await listing.query_selector('span.a-price > span.a-offscreen')
            result['price'] = await price_element.inner_text() if price_element else 'N/A'
            if(result['product_name']=='N/A' and result['rating']=='N/A' and result['number_of_reviews']=='N/A' and result['price']=='N/A'):
                pass
            else:
                results.append(result)
        # Close browser
        await browser.close()
        
        return results
# Run the scraper and save results to a CSV file
results = asyncio.run(scrape_amazon())
df = pd.DataFrame(results)
df.to_csv('amazon_products_listings.csv', index=False)

В этом коде вы используете асинхронные возможности Python с библиотекой Playwright, чтобы извлечь списки товаров с определенной страницы моды Amazon. Запустив новый экземпляр браузера и перейдя на целевой URL-адрес Amazon, вы извлечете информацию о товаре: его название, рейтинг, количество отзывов и цену. После итераций по каждому объявлению на странице вы можете отфильтровать объявления, в которых нет данных (т. е. пометить их как “N/A”). Результаты поиска сохраняются в Pandas DataFrame, а затем экспортируются в CSV-файл amazon_products_listings.csv.

Чтобы запустить скрипт, выполните python3 amazon_scraper.py в терминале или оболочке. Ваш выходной файл должен выглядеть следующим образом:

product_name,rating,number_of_reviews,price
Crocs Women's Kadee Ii Sandals,4.2,17.5K+,$29.99
Teva Women's W Flatform Universal Sandal,4.7,7K+,$58.80
"OOFOS OOriginal Sport Sandal - Lightweight Recovery Footwear - Reduces Stress on Feet, Joints & Back - Machine Washable - Hand-Painted Graphics",4.5,9.4K+,N/A
"Crocs Women's Brooklyn Low Wedges, Platform Sandals",4.6,11.7K+,N/A
Teva Women's Original Universal Sandal,4.7,18.7K+,$35.37
Reef Women's Water Vista Sandal,4.5,1.9K+,$59.95
Crocs Women's Brooklyn Platform Slides Sandal,4.2,376,N/A
…output omitted…

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

Продвинутые техники скрапинга для Amazon

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

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

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

Обход рекламы

В списках товаров Amazon часто появляются объявления. Эти объявления могут иметь несколько иную структуру по сравнению с обычными товарами, что может привести к заминкам в процессе соскабливания. Чтобы решить эту проблему, необходимо обнаружить элементы или теги, которые указывают на наличие рекламы. Например, ищите теги с такими метками, как Sponsored или Ad. Обнаружив их, вы можете указать скрипту пропускать эти записи, обеспечивая сбор только настоящих данных о продукте.

Смягчение блокировки

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

Чтобы избежать блокировки, нужно вводить задержки или случайные интервалы между запросами с помощью функций вроде asyncio.sleep(random.uniform(1, 5)). Так ваш шаблон скрапинга будет выглядеть менее роботизированным. Кроме того, для снижения риска обнаружения следует чередовать пользовательские агенты и IP-адреса. Использование сервисов для решения CAPTCHA также может быть полезным, если вы столкнулись с проблемами CAPTCHA.

Обрабатывайте содержимое динамически

Некоторые материалы Amazon, например отзывы или разделы вопросов и ответов, загружаются динамически, и обычный парсер может пропустить эти данные. Вам необходимо убедиться, что ваш парсер может выполнять JavaScript и ждать загрузки динамического контента. С помощью таких инструментов, как Playwright или Selenium, вы можете использовать явные ожидания, гарантируя, что определенные элементы будут загружены до начала работы парсера.

Установите лимит на скрапинг  

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

Разработайте свой скрипт так, чтобы он не перегружал серверы Amazon. Как уже говорилось, важно установить разумную задержку между запросами.

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

Рассмотрим возможность использования Bright Data для парсинга с Amazon

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

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

Создайте учетную запись Bright Data

Чтобы начать работу с Bright Data, вам необходимо создать и настроить свою учетную запись. Для этого выполните следующие шаги:

Откройте браузер и перейдите на сайт Bright Data. Нажмите кнопку Начать бесплатную пробную версию и выполните указанные действия.

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

Страница Выставления счетов

Далее перейдите в раздел Прокси и инфраструктура для скрапинга, выбрав соответствующий значок. Выберите Браузер для веб-скрапинга > Начать работу:

Браузер для веб-скрапинга

Назовите решение соответствующим образом и подтвердите его нажатием кнопки Добавить:

В разделе Параметры доступа уделите минуту времени, чтобы записать имя пользователя, хост (по умолчанию) и пароль. Они понадобятся вам в дальнейшем:

Выполнив эти шаги, вы будете готовы к извлечению данных.

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

Чтобы начать собирать данные о товарах с Amazon с помощью Bright Data, создайте новый файл amazon_scraper_bdata.py и добавьте в него следующий код:

import asyncio
from playwright.async_api import async_playwright
import pandas as pd
username='YOUR_BRIGHTDATA_USERNAME'
password='YOUR_BRIGHTDATA_PASSWORD'
auth=f'{username}:{password}'
host = 'YOUR_BRIGHTDATA_DEFAULT_HOST'
browser_url = f'wss://{auth}@{host}'
async def scrape_amazon_bdata():
    async with async_playwright() as pw:
        print('connecting')
        # Launch new browser
        browser = await pw.chromium.connect_over_cdp(browser_url)
        print('connected')
        page = await browser.new_page()
        print('navigating')
        # Go to Amazon URL
        await page.goto('https://www.amazon.com/s?i=fashion&bbn=115958409011', timeout=600000)
        print('data extraction in progress')
        # Extract information
        results = []
        listings = await page.query_selector_all('div.a-section.a-spacing-small')
        for listing in listings:
            result = {}
            # Product name
            name_element = await listing.query_selector('h2.a-size-mini > a > span')
            result['product_name'] = await name_element.inner_text() if name_element else 'N/A'
            
            # Rating
            rating_element = await listing.query_selector('span[aria-label*="out of 5 stars"] > span.a-size-base')
            result['rating'] = (await rating_element.inner_text())[0:3]await rating_element.inner_text() if rating_element else 'N/A'
            
            # Number of reviews
            reviews_element = await listing.query_selector('span[aria-label*="stars"] + span > a > span')
            result['number_of_reviews'] = await reviews_element.inner_text() if reviews_element else 'N/A'
            
            # Price
            price_element = await listing.query_selector('span.a-price > span.a-offscreen')
            result['price'] = await price_element.inner_text() if price_element else 'N/A'
            if(result['product_name']=='N/A' and result['rating']=='N/A' and result['number_of_reviews']=='N/A' and result['price']=='N/A'):
                pass
            else:
                results.append(result)
        # Close browser
        await browser.close()
        
        return results
# Run the scraper and save results to a CSV file
results = asyncio.run(scrape_amazon_bdata())
df = pd.DataFrame(results)
df.to_csv('amazon_products_bdata_listings.csv', index=False)

В этом коде вы используете библиотеку Playwright в сочетании с asyncio для асинхронного соскабливания информации о товарах с веб-страницы Amazon. Вы настроили аутентификацию для Bright Data, прокси, а затем подключились к браузеру с помощью этого сервиса.

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

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

Важно: Не забудьте заменить YOUR_BRIGHTDATA_USERNAME, YOUR_BRIGHTDATA_PASSWORD и YOUR_BRIGHTDATA_HOST на ваши уникальные данные учетной записи зоны Bright Data (находятся на вкладке Параметры доступа).

Запустите код из терминала или оболочки, используя следующую команду:

python3 amazon_scraper_bdata.py

Ваш результат должен выглядеть следующим образом:

product_name,rating,number_of_reviews,price
Women's Square Neck Bodice Dress Sleeveless Tank Top Stretch Flare Mini Dresses,N/A,131,$32.99
"Women's Swiftwater Sandal, Lightweight and Sporty Sandals for Women",N/A,"35,941",$19.95
Women's Elegant Sleeveless Off Shoulder Bodycon Long Formal Party Evening Dress,N/A,"3,122",$49.99
Women 2023 Summer Sleeveless Tank Dresses Crew Neck Slim Fit Short Casual Ruched Bodycon Party Club Mini Dress,N/A,"40,245",$33.99
"Infinity Dress with Bandeau, Convertible Bridesmaid Dress, Long, Plus Size, Multi-Way Dress, Twist Wrap Dress",N/A,"11,412",$49.99
…output omitted…

Несмотря на то, что при ручном скрапинге Amazon могут возникнуть проблемы, такие как CAPTCHA и ограничения доступа, браузер для веб-скрапинг Bright Data обеспечивает устойчивость и гибкость для решения этих проблем, гарантируя бесперебойное извлечение данных.

Наборы данных Bright Data Amazon

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

Чтобы найти эти наборы данных, перейдите на панель и нажмите Сбор данных на Датасеты и веб-парсер IDE слева. Затем нажмите Запросить наборы данных в Dataset Marketplace:

Далее в строке поиска найдите “amazon”. Затем нажмите на кнопку Просмотр набора данных:

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

Код, который используется в этом руководстве, можно найти на следующем репозитории GitHub.

Заключение

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

Bright Data предоставляет инструменты, упрощающие сбор данных с веб-сайтов, включая Amazon. Эти инструменты превращают сложные задачи по сбору данных с веб-сайтов в простые, экономя ваше время и силы.

Кроме того, Bright Data предлагает готовые наборы данных, специально для Amazon. Это означает, что вам не придется начинать с нуля; вы сможете напрямую получить доступ к огромному количеству данных Amazon.

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