Рубрики
Без рубрики

Как царапать информацию о продукте Amazon с использованием красивого супа

Web Scraping – это технология на основе программирования для извлечения соответствующей информации с веб-сайтов и хранения ее в локальной системе для дальнейшего использования. В

Автор оригинала: Pankaj Kumar.

Web Scraping – это технология на основе программирования для извлечения соответствующей информации с веб-сайтов и хранения ее в локальной системе для дальнейшего использования.

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

В этой статье мы будем соскабливать информацию о продукте от сайтов Amazon. Соответственно, мы возьмем рассмотрение «PlayStation 4» в качестве целевого продукта.

Примечание: Макет и теги сайта могут измениться со временем. Поэтому читатель рекомендуется понять концепцию соскабливания, чтобы самостоятельная реализация не становится проблемой.

Веб-соскобные услуги

Если вы хотите создать сервис, используя веб-соскабливание, вам, возможно, придется пройти через блокировку IP, а также для управления прокси. Приятно знать базовые технологии и процессы, но для массовых соскоб, лучше работать с поставщиками STRAPING API, как Zenscrape Отказ Они даже заботятся о запросах AJAX и JavaScript для динамических страниц. Одно из их популярных предложений является Жилой прокси-сервис Отказ

Некоторые основные требования:

Для того, чтобы сделать суп, нам нужны правильные ингредиенты. Точно так же наш свежий веб-скребок требует определенных компонентов.

  • Python – Простота использования и огромная коллекция библиотек делает Python Numero-Uno для соскобных сайтов. Однако, если у пользователя нет предварительно установленного, обратитесь в здесь Отказ
  • Красивый суп – Один из многих веб-библиотек Scraping для Python. Легкое и чистое использование библиотеки делает его верхним претендентом для веб-соска. После успешной установки Python пользователь может установить красивый суп по:
pip install bs4
  • Основное понимание HTML-тегов – Обратитесь к Это руководство Для получения необходимой информации о тегах HTML.
  • Веб-браузер – Поскольку мы должны выбросить много ненужной информации с веб-сайта, нам нужны определенные идентификаторы и теги для фильтрации. Следовательно, веб-браузер, такой как Google Chrome или Mozilla Firefox, служит цели открытия этих тегов.

Создание пользовательского агента

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

Это Сайт Содержит тонны пользовательских агентов для читателя на выбор. Ниже приведен пример пользовательского агента внутри значения заголовка.

HEADERS = ({'User-Agent':
            'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36',
            'Accept-Language': 'en-US, en;q=0.5'})

Есть дополнительное поле в Заголовки Под названием «Accept-language», который переводит веб-страницу на английский язык, если это необходимо.

Отправка запроса на URL

Его URL доступна веб-страница доступа (равномерный локатор ресурсов). С помощью URL мы отправим запрос на веб-страницу для доступа к его данным.

URL = "https://www.amazon.com/Sony-PlayStation-Pro-1TB-Console-4/dp/B07K14XKZH/"
webpage = requests.get(URL, headers=HEADERS)

Запрашиваемая веб-страница имеет продукт Amazon. Следовательно, наш скрипт Python фокусируется на извлечении деталей продукта, как «название продукта», «текущая цена» и так далее.

Примечание: Запрос на URL отправляется через «Запросы» библиотека. В случае, если пользователь получает ошибку «без модуля по имени запросов», его можно установить «Пип Установка запросов» Отказ

Создание супа информации

веб-страница Переменная содержит ответ, полученный на сайте. Мы передаем содержание ответа и типом анализатора к красивой функции супа.

soup = BeautifulSoup(webpage.content, "lxml")

lxml Это высокоскоростной анализатор, используемый красивым супом, чтобы сломать страницу HTML в сложные объекты Python. Как правило, есть четыре вида полученных объектов Python:

  • Тег – Он соответствует тегам HTML или XML, которые включают имена и атрибуты.
  • Навигалинг – Это соответствует тексту, хранящему в теге.
  • Beautifulsoup – На самом деле весь анамадный документ.
  • Комментарии – Наконец, остальные кусочки HTML-страницы, которая не включена в приведенные выше трех категорий.

Обнаружение точных тегов для добычи объекта

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

Мы открываем веб-страницу в браузере и проверьте соответствующий элемент, нажав Щелкните правой кнопкой мыши.

В результате панель открывается справа от экрана, как показано на следующем рисунке.

Как только мы получим значения тегов, извлечение информации становится куском пирога. Однако мы должны изучать определенные функции, определенные для красивого супа объекта.

Извлечение названия продукта

Используя Найти () Функция, доступная для поиска конкретных тегов с конкретными атрибутами, мы находим объект тега, содержащего заголовок продукта.

# Outer Tag Object
title = soup.find("span", attrs={"id":'productTitle'})

Тогда мы вынимаем навигантный объект

# Inner NavigableString Object
title_value = title.string

И, наконец, мы распределяем дополнительные пробелы и преобразуйте объект в строковое значение.

# Title as a string value
title_string = title_value.strip()

Мы можем взглянуть на типы каждой переменной, используя Тип () функция.

# Printing types of values for efficient understanding
print(type(title))
print(type(title_value))
print(type(title_string))
print()

# Printing Product Title
print("Product Title = ", title_string)

Выход:





Product Title =  Sony PlayStation 4 Pro 1TB Console - Black (PS4 Pro)

Таким же образом нам нужно выяснить значения тегов для других деталей продукта, таких как «цена продукта» и «рейтинги потребителей».

Python Script для извлечения информации о продукте

Следующий сценарий Python отображает следующие данные для продукта:

  • Название продукта
  • Цена товара
  • Рейтинг продукта
  • Количество отзывов клиентов
  • Доступность продукта
from bs4 import BeautifulSoup
import requests

# Function to extract Product Title
def get_title(soup):
	
	try:
		# Outer Tag Object
		title = soup.find("span", attrs={"id":'productTitle'})

		# Inner NavigableString Object
		title_value = title.string

		# Title as a string value
		title_string = title_value.strip()

		# # Printing types of values for efficient understanding
		# print(type(title))
		# print(type(title_value))
		# print(type(title_string))
		# print()

	except AttributeError:
		title_string = ""	

	return title_string

# Function to extract Product Price
def get_price(soup):

	try:
		price = soup.find("span", attrs={'id':'priceblock_ourprice'}).string.strip()

	except AttributeError:
		price = ""	

	return price

# Function to extract Product Rating
def get_rating(soup):

	try:
		rating = soup.find("i", attrs={'class':'a-icon a-icon-star a-star-4-5'}).string.strip()
		
	except AttributeError:
		
		try:
			rating = soup.find("span", attrs={'class':'a-icon-alt'}).string.strip()
		except:
			rating = ""	

	return rating

# Function to extract Number of User Reviews
def get_review_count(soup):
	try:
		review_count = soup.find("span", attrs={'id':'acrCustomerReviewText'}).string.strip()
		
	except AttributeError:
		review_count = ""	

	return review_count

# Function to extract Availability Status
def get_availability(soup):
	try:
		available = soup.find("div", attrs={'id':'availability'})
		available = available.find("span").string.strip()

	except AttributeError:
		available = ""	

	return available	

if __name__ == '__main__':

	# Headers for request
	HEADERS = ({'User-Agent':
	            'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36',
	            'Accept-Language': 'en-US, en;q=0.5'})

	# The webpage URL
	URL = "https://www.amazon.com/Sony-PlayStation-Pro-1TB-Console-4/dp/B07K14XKZH/"

	# HTTP Request
	webpage = requests.get(URL, headers=HEADERS)

	# Soup Object containing all data
	soup = BeautifulSoup(webpage.content, "lxml")

	# Function calls to display all necessary product information
	print("Product Title =", get_title(soup))
	print("Product Price =", get_price(soup))
	print("Product Rating =", get_rating(soup))
	print("Number of Product Reviews =", get_review_count(soup))
	print("Availability =", get_availability(soup))
	print()
	print()


Выход:

Product Title = Sony PlayStation 4 Pro 1TB Console - Black (PS4 Pro)
Product Price = $473.99
Product Rating = 4.7 out of 5 stars
Number of Product Reviews = 1,311 ratings
Availability = In Stock.

Теперь, когда мы знаем, как извлечь информацию из одной веб-страницы Amazon, мы можем применить тот же скрипт для нескольких веб-страниц, просто изменив URL.

Более того, давайте теперь попытаемся получить ссылки от веб-страницы результатов поиска Amazon.

Получение ссылок на веб-страницу результатов поиска Amazon

Ранее мы получили информацию о случайном PlayStation 4. Это была бы находчивая идея извлечения такой информации для нескольких игровых станций для сравнения цен и рейтингов.

Мы можем найти ссылку, заключенную в <\ a> Тег как значение для href атрибут.

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

# Fetch links as List of Tag Objects
links = soup.find_all("a", attrs={'class':'a-link-normal s-no-outline'})

find_all () Функция Возвращает итоговый объект, содержащий несколько объектов тегов. В результате мы выбираем каждый объект тега и выложил ссылку, хранящуюся в виде значения для href атрибут.

# Store the links
links_list = []

# Loop for extracting links from Tag Objects
for link in links:
	links_list.append(link.get('href'))

Мы храним ссылки внутри списка, чтобы мы могли повторить каждую ссылку и извлечь детали продукта.

# Loop for extracting product details from each link 
	for link in links_list:
		
		new_webpage = requests.get("https://www.amazon.com" + link, headers=HEADERS)
		new_soup = BeautifulSoup(new_webpage.content, "lxml")
		
		print("Product Title =", get_title(new_soup))
		print("Product Price =", get_price(new_soup))
		print("Product Rating =", get_rating(new_soup))
		print("Number of Product Reviews =", get_review_count(new_soup))
		print("Availability =", get_availability(new_soup))

Мы повторно используем функции, созданные ранее для извлечения информации о продукте. Несмотря на то, что этот процесс производства нескольких супов делает код медленным, но, в свою очередь, обеспечивает правильное сравнение цен между несколькими моделями и предложениями.

Python Script для извлечения деталей продукта по нескольким веб-страницам

Ниже приведен полный рабочий скрипт Python для листинга нескольких сделок PlayStation.

from bs4 import BeautifulSoup
import requests

# Function to extract Product Title
def get_title(soup):
	
	try:
		# Outer Tag Object
		title = soup.find("span", attrs={"id":'productTitle'})

		# Inner NavigatableString Object
		title_value = title.string

		# Title as a string value
		title_string = title_value.strip()

		# # Printing types of values for efficient understanding
		# print(type(title))
		# print(type(title_value))
		# print(type(title_string))
		# print()

	except AttributeError:
		title_string = ""	

	return title_string

# Function to extract Product Price
def get_price(soup):

	try:
		price = soup.find("span", attrs={'id':'priceblock_ourprice'}).string.strip()

	except AttributeError:

		try:
			# If there is some deal price
			price = soup.find("span", attrs={'id':'priceblock_dealprice'}).string.strip()

		except:		
			price = ""	

	return price

# Function to extract Product Rating
def get_rating(soup):

	try:
		rating = soup.find("i", attrs={'class':'a-icon a-icon-star a-star-4-5'}).string.strip()
		
	except AttributeError:
		
		try:
			rating = soup.find("span", attrs={'class':'a-icon-alt'}).string.strip()
		except:
			rating = ""	

	return rating

# Function to extract Number of User Reviews
def get_review_count(soup):
	try:
		review_count = soup.find("span", attrs={'id':'acrCustomerReviewText'}).string.strip()
		
	except AttributeError:
		review_count = ""	

	return review_count

# Function to extract Availability Status
def get_availability(soup):
	try:
		available = soup.find("div", attrs={'id':'availability'})
		available = available.find("span").string.strip()

	except AttributeError:
		available = "Not Available"	

	return available	


if __name__ == '__main__':

	# Headers for request
	HEADERS = ({'User-Agent':
	            'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36',
	            'Accept-Language': 'en-US'})

	# The webpage URL
	URL = "https://www.amazon.com/s?k=playstation+4&ref=nb_sb_noss_2"
	
	# HTTP Request
	webpage = requests.get(URL, headers=HEADERS)

	# Soup Object containing all data
	soup = BeautifulSoup(webpage.content, "lxml")

	# Fetch links as List of Tag Objects
	links = soup.find_all("a", attrs={'class':'a-link-normal s-no-outline'})

	# Store the links
	links_list = []

	# Loop for extracting links from Tag Objects
	for link in links:
		links_list.append(link.get('href'))


	# Loop for extracting product details from each link 
	for link in links_list:

		new_webpage = requests.get("https://www.amazon.com" + link, headers=HEADERS)

		new_soup = BeautifulSoup(new_webpage.content, "lxml")
		
		# Function calls to display all necessary product information
		print("Product Title =", get_title(new_soup))
		print("Product Price =", get_price(new_soup))
		print("Product Rating =", get_rating(new_soup))
		print("Number of Product Reviews =", get_review_count(new_soup))
		print("Availability =", get_availability(new_soup))
		print()
		print()

Выход:

Product Title = SONY PlayStation 4 Slim 1TB Console, Light & Slim PS4 System, 1TB Hard Drive, All the Greatest Games, TV, Music & More
Product Price = $357.00
Product Rating = 4.4 out of 5 stars
Number of Product Reviews = 32 ratings
Availability = In stock on September 8, 2020.


Product Title = Newest Sony Playstation 4 PS4 1TB HDD Gaming Console Bundle with Three Games: The Last of Us, God of War, Horizon Zero Dawn, Included Dualshock 4 Wireless Controller
Product Price = $469.00
Product Rating = 4.6 out of 5 stars
Number of Product Reviews = 211 ratings
Availability = Only 14 left in stock - order soon.


Product Title = PlayStation 4 Slim 1TB Console - Fortnite Bundle
Product Price = 
Product Rating = 4.8 out of 5 stars
Number of Product Reviews = 2,715 ratings
Availability = Not Available


Product Title = PlayStation 4 Slim 1TB Console - Only On PlayStation Bundle
Product Price = $444.00
Product Rating = 4.7 out of 5 stars
Number of Product Reviews = 5,190 ratings
Availability = Only 1 left in stock - order soon.

Вышеуказанный скрипт Python не ограничен списком PlayStations. Мы можем переключить URL-адрес какой-либо другой ссылке на результат поиска Amazon, как наушники или наушники.

Как уже упоминалось ранее, макет и теги HTML-страницы могут измениться со временем, делая вышеуказанный код, не стоящий в этом отношении. Тем не менее, читатель должен принести домой концепцию веб-соскоб и методов, извлеченных в этой статье.

Заключение

Могут быть различные преимущества веб-соскоба от «сравнения цен на продукцию» для «анализа тенденций потребителей». Поскольку Интернет доступен для всех, и Python – это очень легкий язык, любой может выполнить веб-соскоб, чтобы удовлетворить их потребности.

Мы надеемся, что эта статья была легко понять. Не стесняйтесь комментировать ниже для любых запросов или обратной связи. До тех пор Счастливый соскоб !!! Отказ