Скрапінг відгуків на Amazon є цінним інструментом для їх верифікації, аналізу конкурентів і дослідження ринку. У цьому посібнику розглянуто, як ефективно витягувати відгуки про товари, використовуючи Python разом із бібліотеками BeautifulSoup і Requests.
Перед початком процесу скрапінгу переконайтеся, що у вас встановлено необхідні бібліотеки Python:
pip install requests
pip install beautifulsoup4
Ми зосередимося на вилученні відгуків про товари зі сторінки Amazon і покроково розглянемо кожен етап процесу скрапінгу.
Вивчіть HTML-структуру сторінки відгуків, щоб визначити елементи, які необхідно скрапити: нікнейми рецензентів, оцінки та коментарі.
Назва товару та його URL:
Загальна оцінка:
Розділ відгуків:
Ім'я автора:
Оцінка:
Коментар:
Використовуйте бібліотеку Requests для надсилання HTTP GET-запитів на сторінку відгуків. Налаштуйте заголовки, щоб імітувати поведінку реального браузера й уникнути виявлення. Використання проксі та детально налаштованих заголовків необхідне, щоб Amazon не обмежив доступ.
Застосування проксі дає змогу ротувати IP-адреси, що допомагає уникнути блокувань за IP і обмежень на кількість запитів від Amazon. Це особливо важливо для масштабного скрапінгу, щоб підтримувати анонімність і запобігати виявленню.
Додавання різних заголовків, таких як Accept-Encoding, Accept-Language, Referer, Connection і Upgrade-Insecure-Requests, створює видимість реального браузерного запиту, знижуючи ймовірність того, що антиботові фільтри заблокують запити.
import requests
url = "URL-адрес HTTPS"
# Приклад проксі з авторизацією за IP
proxy = {
'http': 'http://your_proxy_ip:your_proxy_port',
'https': 'https://your_proxy_ip:your_proxy_port'
}
headers = {
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
'accept-language': 'en-US,en;q=0.9',
'cache-control': 'no-cache',
'dnt': '1',
'pragma': 'no-cache',
'sec-ch-ua': '"Not/A)Brand";v="99", "Google Chrome";v="91", "Chromium";v="91"',
'sec-ch-ua-mobile': '?0',
'sec-fetch-dest': 'document',
'sec-fetch-mode': 'navigate',
'sec-fetch-site': 'same-origin',
'sec-fetch-user': '?1',
'upgrade-insecure-requests': '1',
'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',
}
# Надсилання HTTP GET-запиту на URL із заголовками та проксі
try:
response = requests.get(url, headers=headers, proxies=proxy, timeout=10)
response.raise_for_status() # Установка исключения при плохом статусе ответа
except requests.exceptions.RequestException as e:
print(f"Error: {e}")
Використовуючи бібліотеку BeautifulSoup, ви можете аналізувати HTML-контент, отриманий у відповідь на ваші запити, для вилучення важливих відомостей про товари. Процес включає парсинг таких даних, як URL сторінки товару, його назва і загальний рейтинг.
from bs4 import BeautifulSoup
soup = BeautifulSoup(response.content, 'html.parser')
# Витяг загальних відомостей про товар
product_url = soup.find('a', {'data-hook': 'product-link'}).get('href', '')
product_title = soup.find('a', {'data-hook': 'product-link'}).get_text(strip=True)
total_rating = soup.find('span', {'data-hook': 'rating-out-of-text'}).get_text(strip=True)
Продовжіть парсинг HTML-вмісту для вилучення нікнеймів рецензентів, оцінок та їхніх коментарів на основі певних виразів XPath.
reviews = []
review_elements = soup.find_all('div', {'data-hook': 'review'})
for review in review_elements:
author_name = review.find('span', class_='a-profile-name').get_text(strip=True)
rating_given = review.find('i', class_='review-rating').get_text(strip=True)
comment = review.find('span', class_='review-text').get_text(strip=True)
reviews.append({
'Product URL': product_url,
'Product Title': product_title,
'Total Rating': total_rating,
'Author': author_name,
'Rating': rating_given,
'Comment': comment,
})
Використовуйте вбудований у Python модуль CSV для збереження витягнутих даних у CSV-файл для подальшого аналізу.
import csv
# Визначення шляху до CSV-файлу
csv_file = 'amazon_reviews.csv'
# Визначення назв полів для CSV
fieldnames = ['Product URL', 'Product Title', 'Total Rating', 'Author', 'Rating', 'Comment']
# Запис даних у CSV-файл
with open(csv_file, mode='w', newline='', encoding='utf-8') as file:
writer = csv.DictWriter(file, fieldnames=fieldnames)
writer.writeheader()
for review in reviews:
writer.writerow(review)
print(f"Data saved to {csv_file}")
Нижче представлено повний код для скрапінгу даних про відгуки на Amazon і збереження їх у файл CSV:
import requests
from bs4 import BeautifulSoup
import csv
import urllib3
urllib3.disable_warnings()
# URL сторінки відгуків товару на Amazon
url = "https://www.amazon.com/Portable-Mechanical-Keyboard-MageGee-Backlit/product-reviews/B098LG3N6R/ref=cm_cr_dp_d_show_all_btm?ie=UTF8&reviewerType=all_reviews"
# Налаштування проксі з авторизацією за IP
path_proxy = 'your_proxy_ip:your_proxy_port'
proxy = {
'http': f'http://{path_proxy}',
'https': f'https://{path_proxy}'
}
# Заголовки для HTTP-запиту
headers = {
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
'accept-language': 'en-US,en;q=0.9',
'cache-control': 'no-cache',
'dnt': '1',
'pragma': 'no-cache',
'sec-ch-ua': '"Not/A)Brand";v="99", "Google Chrome";v="91", "Chromium";v="91"',
'sec-ch-ua-mobile': '?0',
'sec-fetch-dest': 'document',
'sec-fetch-mode': 'navigate',
'sec-fetch-site': 'same-origin',
'sec-fetch-user': '?1',
'upgrade-insecure-requests': '1',
'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',
}
# Надсилання HTTP GET-запиту на URL із заголовками та обробка виключень
try:
response = requests.get(url, headers=headers, timeout=10, proxies=proxy, verify=False)
response.raise_for_status() # Разбор HTML-содержимого с помощью BeautifulSoup
except requests.exceptions.RequestException as e:
print(f"Error: {e}")
# Розбір HTML-вмісту за допомогою BeautifulSoup
soup = BeautifulSoup(response.content, 'html.parser')
# Витяг загальних відомостей про товар
product_url = soup.find('a', {'data-hook': 'product-link'}).get('href', '') # Извлечение URL товара
product_title = soup.find('a', {'data-hook': 'product-link'}).get_text(strip=True) # Извлечение наименования товара
total_rating = soup.find('span', {'data-hook': 'rating-out-of-text'}).get_text(strip=True) # Извлечение общего рейтинга
# Витяг окремих відгуків
reviews = []
review_elements = soup.find_all('div', {'data-hook': 'review'})
for review in review_elements:
author_name = review.find('span', class_='a-profile-name').get_text(strip=True) # Извлечение никнейма автора
rating_given = review.find('i', class_='review-rating').get_text(strip=True) # Извлечение оценки
comment = review.find('span', class_='review-text').get_text(strip=True) # Извлечение текста отзыва
# Збереження кожного відгуку в словнику
reviews.append({
'Product URL': product_url,
'Product Title': product_title,
'Total Rating': total_rating,
'Author': author_name,
'Rating': rating_given,
'Comment': comment,
})
# Визначення шляху до файлу CSV
csv_file = 'amazon_reviews.csv'
# Визначення назв полів для CSV
fieldnames = ['Product URL', 'Product Title', 'Total Rating', 'Author', 'Rating', 'Comment']
# Запис даних у файл CSV
with open(csv_file, mode='w', newline='', encoding='utf-8') as file:
writer = csv.DictWriter(file, fieldnames=fieldnames)
writer.writeheader()
for review in reviews:
writer.writerow(review)
# Виведення повідомлення про підтвердження
print(f"Data saved to {csv_file}")
У висновку зазначимо, що найважливішим етапом у написанні скрипта є вибір надійних проксі-серверів, які забезпечать обхід блокувань і захист від спрацьовування антибот фільтрів. Найоптимальнішим варіантом для скрапінгу вважаються резидентські проксі-сервери, що мають високий траст-фактор і динамічні IP-адреси, а також статичні ISP-проксі, які забезпечують високу швидкість і стабільність роботи.
Мы получили вашу заявку!
Ответ будет отправлен на почту в ближайшее время.
С уважением proxy-seller.com!
Коментарі: 0