Як виконати вебскрапінг Amazon за допомогою Python
У цій статті я покажу, як вебскрапити Amazon використовуючи Python. Ми розглянемо два методи: традиційний спосіб із CSS-селекторами та XPath, а також більш просунутий підхід із використанням Bright Data для керування проксі. Наприкінці ви знатимете, як успішно вебскрапити Amazon, навіть попри наявні механізми захисту.
Навіщо виконувати вебскрапінг Amazon?
Перш ніж занурюватися в деталі, важливо зрозуміти, чому вебскрапінг Amazon є цінним. Amazon - найбільший онлайн-ритейлер, що пропонує мільйони товарів. Вебскрапінг Amazon може дати:
- Price Tracking: Компанії можуть відстежувати ціни на товари конкурентів і відповідно коригувати власні ціни.
- Product Research: Продавці можуть відстежувати товарні тренди та коригувати свій асортимент залежно від того, що добре продається.
- Market Research: Аналітики можуть витягувати відгуки клієнтів, відомості про товари та рейтинги, щоб отримати уявлення про те, що покупці думають про певні товари.
- Data Aggregation: Дослідники та розробники можуть збирати дані про різні категорії товарів для аналізу або порівняння.
Передумови для вебскрапінгу
Перед початком переконайтеся, що у вас є такі передумови:
Python: Ми будемо використовувати Python для написання вебскрапінг скрипти. Python є кращим вибором завдяки своїй простоті та потужним бібліотекам. Встановіть Python 3.9 або новішої версії from the official Python website.
Libraries: Ми використаємо такі бібліотеки, як requests, BeautifulSoup, а також pandas для вебскрапінгу та оброблення даних. Їх можна встановити за допомогою pip:
pip install requests beautifulsoup4 pandas
Bright Data: Bright Data це проксі-мережа, яка допоможе нам обійти обмеження на кшталт блокування IP. З Bright Data ви можете спрямовувати свої запити через різні IP-адреси, щоб Amazon не виявляв численні запити з одного джерела.
Покроковий посібник із вебскрапінгу Amazon
Ми розіб’ємо процес вебскрапінгу на зрозумілі етапи. Спочатку витягнемо дані про товари за допомогою традиційних технік вебскрапінгу, а потім використаємо Bright Data, щоб обійти антискрапінгові механізми Amazon.
Крок 1: Налаштування середовища
Почніть із імпортування необхідних бібліотек:
import requests
from bs4 import BeautifulSoup
import pandas as pd
Якщо ви ще цього не зробили, вам також потрібно встановити requests і beautifulsoup4 за допомогою pip.
pip install requests beautifulsoup4
Крок 2: Надсилання запиту до Amazon
Щоб отримати дані з Amazon, спочатку потрібно надіслати HTTP-запит до сторінки пошуку Amazon. Наприклад, візьмімо для вебскрапінгу пошуковий запит на кшталт «laptop».
url = "https://www.amazon.com/s?k=laptop"
headers = {
"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 = []
for product in products:
name = product.find('span', {'class': 'a-text-normal'})
price = product.find('span', {'class': 'a-price-whole'})
if name and price:
product_names.append(name.text)
prices.append(price.text)
# Save to CSV
data = {'Назва товару': product_names, 'Price': 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, і ви можете збільшувати номер сторінки, щоб отримувати дані з наступних сторінок.
Get Data Journal’s stories in your inbox
Щоб це врахувати, можна змінити 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:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import 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
for product in products:
name = product.find_element(By.CLASS_NAME, 'a-text-normal')
print(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, щоб розв’язувати їх програмно.
Conclusion
Вебскрапінг Amazon за допомогою Python може бути цінним інструментом для збирання даних, чи то ви відстежуєте ціни на товари, досліджуєте відгуки клієнтів, чи проводите ринковий аналіз. Хоча Amazon має різні заходи захисту від вебскрапінгу, використання таких технік, як ротація IP-адрес із Bright Data, обробка динамічного контенту за допомогою Selenium і забезпечення чіткої структури ваших запитів, може допомогти вам ефективно виконувати вебскрапінг Amazon.
Дотримуючись кроків, описаних у цьому посібнику, ви зможете побудувати надійну систему вебскрапінгу, яка збирає цінні дані з Amazon, допомагаючи автоматизувати дослідження, створювати інструменти порівняння цін або відстежувати активність конкурентів.

