перейти к содержанию

Полное руководство по очистке Amazon с помощью Python (2023 г.)

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

Этика парсинга веб-страниц

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

Библиотеки веб-скрейпинга Python

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

  1. Запросы: популярная библиотека Python для создания HTTP-запросов. Он абстрагирует сложности выполнения запросов за простым API, позволяя вам отправлять запросы HTTP/1.1 с помощью различных методов, таких как GET, POST и другие.
  2. КрасивыйСуп: используется для анализа документов HTML и XML и извлечения данных. Он создает дерево синтаксического анализа из исходного кода страницы, которое можно использовать для извлечения данных в иерархическом и более удобочитаемом виде.
  3. Scrapy: платформа Python с открытым исходным кодом, разработанная специально для парсинга веб-страниц. Это универсальная платформа, которая может выполнять широкий спектр задач по очистке данных и способна выполнять очистку больших наборов данных.
  4. Селен: Мощный инструмент для управления веб-браузером через программу. Это очень удобно для парсинга веб-страниц, потому что он может обрабатывать все типы контента веб-сайта, включая контент, сгенерированный JavaScript. Он также позволяет взаимодействовать с пользователем, например щелкать, прокручивать и т. д.
  5. посылка: Используется для извлечения данных из HTML и XML с помощью селекторов XPath и CSS. Он построен на основе библиотеки lxml, что делает его гибким и простым в использовании.

Извлечение данных о товарах со страниц поиска Amazon

Первым шагом в парсинге Amazon является извлечение данных со страниц поиска. Для этой задачи можно использовать библиотеки Python Requests и Parsel. Вот пример скрипта, который собирает данные о продуктах со всех доступных страниц поиска Amazon по заданному ключевому слову (например, «iPad»):

запросы на импорт из parsel import Selector из urllib.parse import urljoin keyword_list = ['ipad'] product_overview_data = [] для ключевого слова в keyword_list: url_list = [f'https://www.amazon.com/s?k={keyword} &page=1'] для URL-адреса в url_list: try: response = request.get(url) if response.status_code == 200: sel = Selector(text=response.text) # Извлечь страницу продукта search_products = sel.css("div .s-result-item[data-component-type=s-search-result]") для продукта в search_products: relative_url = product.css("h2>a::attr(href)").get() asin = relative_url.split('/')[3] if len(relative_url.split('/')) >= 4 else None product_url = urljoin('https://www.amazon.com/', relative_url).split( "?")[0] product_overview_data.append( { "keyword": ключевое слово, "asin": asin, "url": product_url, "ad": True, если "/slredirect/" в product_url, иначе False, "title": product.css("h2>a>span::text").get(), "price-data-a-size=xl .a-offscreen::text").get(), "real_price": продукт. css(".a-price[data-a-size=b].a-offscreen::text").get(), "rating": (product.css("span[aria-label~=stars]: :attr "rating_count": product.css("span[aria-label~=stars] + span::attr(aria-label)").get(), "thumbnail_url": product.xpath("//img[ has-class('s-image')]/@src").get(), } ) # Получить все страницы, если "&page=1" в URL: available_pages = sel.xpath( '//a[has-class ("s-pagination-item")][not(has-class("s-pagination-separator"))]/text()' ).getall() для страницы в available_pages: search_url_paginated = f'https:// www.amazon.com/s?k={keyword}&page={page}' url_list.append(search_url_paginated), кроме Exception as e: print("Ошибка", e)

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

  • keyword: Используемое ключевое слово для поиска (например, «iPad»).
  • asin: уникальный стандартный идентификационный номер Amazon продукта.
  • url: URL продукта
  • ad: логическое значение, указывающее, является ли продукт рекламой.
  • title: Название продукта
  • price: Цена продукта
  • real_price: Первоначальная цена товара без учета скидок.
  • rating: Рейтинг продукта
  • rating_count: количество оценок, которые получил продукт.
  • thumbnail_url: URL миниатюры продукта.

Сценарий также идентифицирует все доступные страницы по ключевому слову поиска и добавляет их в список. url_list для очистки【9†источник】.

Извлечение данных о продуктах со страниц продуктов Amazon

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

import re import request from parsel import Selector from urllib.parse import urljoin product_urls = [ 'https://www.amazon.com/2021-Apple-10-2-inch-iPad-Wi-Fi/dp/B09G9FPHY6/ref= sr_1_1', ] product_data_list = [] для product_url в product_urls: try: response = request.get(product_url) if response.status_code == 200: sel = Selector(text=response.text) image_data = json.loads(re.findall (r"colorImages':.*'initial':\s*(\[.+?\])},\n", response.text)[0]) variant_data = re.findall(r'dimensionValuesDisplayData"\s *:\s* ({.+?}),\n', response.text) feature_bullets = [bullet.strip() для маркера в sel.css("#feature-bullets li ::text").getall( )] price = sel.css('.a-price span[aria-hidden="true"] ::text').get("") если не цена: price = sel.css('.a-price . a-offscreen ::text').get("") product_data_list.append({ "name": sel.css("#productTitle::text").get("").strip(), "price": цена, "звезды": sel.css("i[data-hook=average-star-rating] ::text").get("").strip(), "rating_count": sel.css("div[ data-hook=total-review-count] ::text").get("").strip(), "feature_bullets": feature_bullets, "images": image_data, "variant_data": variant_data, }) кроме Exception as e : печать("Ошибка",е)

Этот скрипт собирает массив данных о товарах, где каждый товар представлен в виде словаря со следующими ключами:

  • name: Название продукта
  • price: Цена продукта
  • stars: звездный рейтинг продукта
  • rating_count: общее количество отзывов, полученных продуктом.
  • feature_bullets: список маркеров характеристик продукта.
  • images: Список изображений товара в высоком разрешении.
  • variant_data: данные о вариантах товара (например, доступны разные цвета или размеры)

Стоит отметить, что этот скрипт предназначен для извлечения данных со страниц товаров с определенным макетом. Если Amazon изменит макет страниц своих продуктов, возможно, потребуется обновить скрипт【11†источник】.

Дополнительные соображения

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

1. Работа с динамическим контентом

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

2. Соблюдение robots.txt

Амазонки robots.txt файл сообщает поисковым роботам, какие страницы им разрешено посещать. Хотя этот файл не имеет юридической силы, его игнорирование может привести к блокировке вашего IP-адреса. Лучше всего уважать robots.txt файл, чтобы избежать возможных проблем.

3. Ограничение скорости

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

4. Этические соображения

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


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

Присоединяйтесь к беседе

Ваш электронный адрес не будет опубликован. Обязательные поля помечены * *