В этой статье мы рассмотрим, как можно собрать отзывы клиентов Amazon с помощью Beautiful Soup в Python.

Требуется модуль

  • bs4 Beautiful Soup (bs4) — это библиотека Python для извлечения данных из HTML и XML файлов. Этот модуль не входит в стандартную комплектацию Python. Чтобы установить его, введите в терминале следующую команду.

pip install bs4

  • requests Модуль requests позволяет очень легко отправлять HTTP-запросы версии 1.1. Этот модуль также не входит в стандартную комплектацию Python. Чтобы установить его, введите в терминале следующую команду.

pip install requests

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

Передайте URL-адрес в функцию getdata() (определённую пользователем функцию), которая отправит запрос на URL-адрес и вернёт ответ. Мы используем метод get для получения информации с заданного сервера по заданному URL-адресу.

Синтаксис:

requests.get(url, args)

Синтаксис: 

soup = BeautifulSoup(r.content, ‘html5lib’)

Параметры:

  • r.content : Это необработанный HTML-контент.
  • html.parser: указание HTML-парсера, который мы хотим использовать.

Теперь отфильтруйте нужные данные с помощью soup.Find_all.

Программа:

# import module 
import requests 
from bs4 import BeautifulSoup 

HEADERS = ({'User-Agent': 
			'Mozilla/5.0 (Windows NT 10.0; Win64; x64) \ 
			AppleWebKit/537.36 (KHTML, like Gecko) \ 
			Chrome/90.0.4430.212 Safari/537.36', 
			'Accept-Language': 'en-US, en;q=0.5'}) 

# user define function 
# Scrape the data 
def getdata(url): 
	r = requests.get(url, headers=HEADERS) 
	return r.text 


def html_code(url): 

	# pass the url 
	# into getdata function 
	htmldata = getdata(url) 
	soup = BeautifulSoup(htmldata, 'html.parser') 

	# display html code 
	return (soup) 


url = "https://www.amazon.in/Columbia-Mens-wind-\ 
resistant-Glove/dp/B0772WVHPS/?_encoding=UTF8&pd_rd\ 
_w=d9RS9&pf_rd_p=3d2ae0df-d986-4d1d-8c95-aa25d2ade606&pf\ 
_rd_r=7MP3ZDYBBV88PYJ7KEMJ&pd_rd_r=550bec4d-5268-41d5-\ 
87cb-8af40554a01e&pd_rd_wg=oy8v8&ref_=pd_gw_cr_cartx&th=1" 

soup = html_code(url) 
print(soup) 

Результат:

Примечание: Это всего лишь HTML-код или необработанные данные.

Теперь, когда основная настройка завершена, давайте посмотрим, как можно выполнить парсинг для конкретного запроса.

Очистите имя клиента

Теперь найдите список клиентов с тегом span, где class_ = a-profile-name. Вы можете открыть веб-страницу в браузере и проверить соответствующий элемент, нажав правой кнопкой мыши, как показано на рисунке.

Вы должны передать имя тега и атрибут с соответствующим значением в функцию find_all().

Код:

def cus_data(soup): 
	# find the Html tag 
	# with find() 
	# and convert into string 
	data_str = "" 
	cus_list = [] 

	for item in soup.find_all("span", class_="a-profile-name"): 
		data_str = data_str + item.get_text() 
		cus_list.append(data_str) 
		data_str = "" 
	return cus_list 


cus_res = cus_data(soup) 
print(cus_res) 

Результат:

[‘Amaze’, ‘Robert’, ‘D. Kong’, ‘Alexey’, ‘Charl’, ‘RBostillo’]

Отзыв пользователя Scrape:

Теперь найдите отзыв клиента, используя те же методы, что и выше. Найдите уникальное имя класса с определённым тегом, здесь мы используем тег div.

Код:

def cus_rev(soup): 
	# find the Html tag 
	# with find() 
	# and convert into string 
	data_str = "" 

	for item in soup.find_all("div", class_="a-expander-content \ 
	reviewText review-text-content a-expander-partial-collapse-content"): 
		data_str = data_str + item.get_text() 

	result = data_str.split("\n") 
	return (result) 


rev_data = cus_rev(soup) 
rev_result = [] 
for i in rev_data: 
	if i is "": 
		pass
	else: 
		rev_result.append(i) 
rev_result 

Результат:

Информация о производстве очистки

Здесь мы будем собирать информацию о товаре, такую как название, номер ASIN, вес и размеры. Для этого мы будем использовать тег span с уникальным именем класса.

Код:

def product_info(soup): 

	# find the Html tag 
	# with find() 
	# and convert into string 
	data_str = "" 
	pro_info = [] 

	for item in soup.find_all("ul", class_="a-unordered-list a-nostyle\ 
	a-vertical a-spacing-none detail-bullet-list"): 
		data_str = data_str + item.get_text() 
		pro_info.append(data_str.split("\n")) 
		data_str = "" 
	return pro_info 


pro_result = product_info(soup) 

# Filter the required data 
for item in pro_result: 
	for j in item: 
		if j is "": 
			pass
		else: 
			print(j) 

Результат:

Изображение с обзором скрапинга:

Здесь мы извлечём ссылку на изображение из отзыва о товаре с помощью тех же методов, что и выше. Имя тега и атрибут тега передаются в findAll(), как и выше.

Код:

def rev_img(soup): 

	# find the Html tag 
	# with find() 
	# and convert into string 
	data_str = "" 
	cus_list = [] 
	images = [] 
	for img in soup.findAll('img', class_="cr-lightbox-image-thumbnail"): 
		images.append(img.get('src')) 
	return images 


img_result = rev_img(soup) 
img_result 

Результат:

Сохранение сведений в CSV-файл:

Здесь мы сохраним данные в CSV-файл. Мы преобразуем данные в фрейм данных, а затем экспортируем их в CSV-файл. Давайте посмотрим, как экспортировать фрейм данных Pandas в CSV-файл. Мы будем использовать функцию to_csv() для сохранения фрейма данных в виде CSV-файла.

Синтаксис : to_csv(параметры)
Параметры :

  • path_or_buf : Путь к файлу или объект, если не указан, результат возвращается в виде строки.

Код:

import pandas as pd 

# initialise data of lists. 
data = {'Name': cus_res, 
		'review': rev_result} 

# Create DataFrame 
df = pd.DataFrame(data) 

# Save the output. 
df.to_csv('amazon_review.csv') 

Результат: