Скрапинг отзывов на 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.ru!
Комментарии: 0