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

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

Оглавление

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

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

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

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

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

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

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

  • Питон — Его удобство и обширная коллекция библиотек делают 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

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

Теперь давайте протестируем библиотеку скрапинга 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.

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

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

Чтобы найти пользовательский агент, отправленный вашим браузером, нажмите F12, откройте вкладку «Сеть» и перезагрузите страницу. Выберите первый запрос и просмотрите заголовки запроса.

Изучение заголовков запроса

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

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».

Тег Span с атрибутом ID, установленным в «productTitle».

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

Долларовый компонент цены находится в теге диапазона с классом «a-price-whole», а компонент в центах находится в другом теге диапазона с классом «a-price-fraction».

Тег Span с классом «a-price-fraction».

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

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

response = requests.get(url, headers=custom_headers) 

soup = BeautifulSoup(response.text, 'lxml')

Beautiful Soup предлагает особый метод выбора тегов с использованием методов поиска. Он также поддерживает селекторы 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)

Обработка нумерации страниц

Ссылка на следующую страницу находится в ссылке, содержащей текст «Далее». Вы можете найти эту ссылку, используя оператор CSS contains следующим образом:

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 для создания объекта Pandas DataFrame:

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-адреса: Поскольку извлеченные URL-адреса могут быть относительными, используйте urljoin функция от urllib.parse библиотека для преобразования их в абсолютные URL-адреса.
  4. Создайте цикл: Реализуйте цикл, который перебирает страницы, извлекая нужные данные из каждой. Цикл должен продолжаться до тех пор, пока не останется больше страниц, что можно определить, проверив, существует ли ссылка «Следующая» страница на текущей странице.
  5. Добавьте задержки между запросами: Чтобы избежать перегрузки сервера Amazon или срабатывания антибот-мер, введите задержки между запросами с помощью time.sleep() функция от time библиотека. Отрегулируйте продолжительность задержки, чтобы имитировать поведение человека в Интернете.
  6. Обработка CAPTCHA и блоков: Если вы столкнулись с CAPTCHA или блокировкой IP-адресов при парсинге нескольких страниц, рассмотрите возможность использования прокси-серверов для ротации IP-адресов или специальных инструментов и сервисов парсинга, которые могут решать эти проблемы автоматически.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

5. Каковы риски парсинга Amazon?

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

Заключение

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

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

Александр Шмидт

Александр Шмидт — инженер-программист, который верит в то, что нужно работать умнее, а не усерднее. Обладая 12-летним опытом работы в области автоматизации и извлечения веб-данных для анализа и исследований, он дает предприятиям практические советы и ценную информацию, представленную в увлекательной и простой для чтения форме, чтобы помочь другим максимизировать ценность и производительность своих прокси-решений. Когда он не настраивает свои настройки и не консультирует малый и средний бизнес, вы можете обнаружить, что Александр интересуется последними техническими новостями и достижениями в области искусственного интеллекта.

Выбрать и купить прокси

Выберите тип, местоположение и количество, чтобы мгновенно просмотреть цены.

Выбрать и купить прокси