Walmart — крупнейшая розничная корпорация в США, получившая 572,75 миллиарда долларов дохода в 2022 году. С 2,2 миллионами сотрудников это крупнейший частный работодатель и крупнейшая компания в мире по доходам, а также
Вы можете просмотреть информацию о Walmart в Интернете, чтобы отслеживать цены. Кроме того, вы можете проверить, есть ли в наличии определенный продукт, чтобы вы могли обновить свой веб-сайт о наличии на складе.

В этой записи блога мы будем выполнять парсинг Walmart с помощью Python. Мы также изучим:
- Как обойти капчу, чтобы очистить страницу продукта Walmart
- Как извлечь желаемую информацию о продукте из Walmart
- Почему важно извлекать данные из Walmart
Зачем очищать Walmart?
Скрапинг Walmart может помочь вам проанализировать данные о товарах, ценовые тенденции и другую информацию. Вы можете использовать данные для отслеживания цен во времени, чтобы определить рост и падение спроса на продукт.
Вы можете извлечь общедоступные отзывы со страницы продукта Walmart, чтобы определить, какой продукт лучше всего подходит для ваших нужд, и вы также можете использовать эти данные для сентиментальных целей и анализа рынка.
В целом, Walmart — это богатый данными веб-сайт для майнеров данных. Данные могут быть использованы для бесчисленных целей. Но пока давайте сосредоточимся на извлечении информации о продукте из Walmart.
Давайте начнем собирать данные о продуктах Walmart
Давайте начнем с установки библиотек, которые могут нам понадобиться в этом руководстве.
В этом руководстве мы будем использовать две библиотеки: Requests и BeautifulSoup.
Запросы будут использоваться для создания HTTP-соединения с веб-страницей, а BeautifulSoup — для анализа и извлеките нужную информацию из извлеченных данных HTML.
Чтобы установить обе библиотеки, выполните следующие команды в терминале папки вашего проекта:
pip install requests pip install beautifulsoup4
Желательно создать список элементов, которые вы хотите извлечь из целевой веб-страницы. В этом блоге мы сосредоточимся на получении следующих элементов с веб-страницы:
- Название продукта
- Цена
- Рейтинг
- Изображения
- Описание

Для извлечения данных из HTML мы используем библиотеку BeautifulSoup. Но прежде чем мы начнем, нам нужно найти расположение элементов из HTML-кода, который мы хотим получить в нашем ответе.
Вы можете сделать это, проверив целевой элемент в своем браузере, что поможет вам точно определить местоположение. Начнем с определения названия продукта.

Как видите, название товара можно найти под тегом h1 и с атрибутом itemprop.

Цена товара указана под span tag с атрибутом itemprop=“price”.

Рейтинг находится под тегом span с классом rating-number.
Затем мы также можем найти местоположение описания продукта.

Итак, описание товара находится под тегом div с классом dangerous-html.
Точно так же вы можете найти теги для изображений.
Давайте начнем с отправки HTTP-запроса GET на целевом веб-сайте.
import requests from bs4 import BeautifulSoup url= "https://www.walmart.com/ip/Apple-Wireless-Charging-Case-for-AirPods/910249719" resp = requests.get(url).text print(resp)
Запустите этот код в своем терминале, и вы увидите приветствие от механизма защиты от ботов Walmart.

Механизм защиты от ботов Walmart интеллектуален. Он может легко различать запросы от ботов и людей. Чтобы обойти эту CAPTCHA, нам нужно поместить некоторые заголовки в наш запрос GET, чтобы наш бот мог имитировать обычного пользователя.
Если вы хотите подробно узнать о заголовках, вы можете предпочесть это руководство: Скрапинг веб-страниц с помощью Python.
Итак, давайте поместим некоторые заголовки с запросом GET.
import requests
from bs4 import BeautifulSoup
url= "https://www.walmart.com/ip/Apple-Wireless-Charging-Case-for-AirPods/910249719"
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36',
'Accept-Language': 'en-US,en;q=0.9',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
}
resp = requests.get(url).text
print(resp)
Это вернет следующий вывод.

Итак, первый шаг пройден. Далее перейдем к получению нужной информации.
Во-первых, мы создадим объект BeautifulSoup из HTML в resp.text. После этого мы напишем код для разбора каждого элемента из HTML, который мы обсуждали выше.
soup = BeautifulSoup(resp.text,'html.parser')
title = soup.find("h1",{"itemprop":"name"}).text
Мы уже обсуждали расположение этих элементов в предыдущем разделе.
Далее мы получим цену продукта.
soup.find("span",{"itemprop":"price"}).text.replace("Now ","")
Точно так же мы можем получить рейтинг и образцы изображений продукта.
rating = soup.find("span",{"class":"rating-number"}).text.replace("(","").replace(")","")
images = []
for el in soup.select('.tc .relative'):
images.append("https" + el.find("img")['src'])
Наконец, мы извлечем описание продукта. Процесс очистки описания продукта будет отличаться от других, где вам нужно проверить и найти элемент, а затем реализовать код для получения данных.
Когда мы искали расположение элементов, я сказал вам, что описание товара находится под тегом div с классом dangerous-html. Но если вы будете искать этот класс в HTML, возвращаемом Walmart, вы не сможете его найти.
Это связано с тем, что описание продукта на странице продукта Walmart загружается с помощью рендеринга JavaScript. Изначально страница рендерится на сервере с помощью Next JS, а затем код JavaScript выполняется на стороне клиента для рендеринга дополнительных данных.
Вот решение. Walmart возвращает полные данные о товаре в теге скрипта в формате JSON с идентификатором __NEXT_DATA__.

Также содержит описание продукта. Давайте получим доступ к данным JSON через наш парсер.
import json
script_data = soup.find('script', {'id': '__NEXT_DATA__'})
json = json.loads(script_data.text)
Это вернет полные данные JSON. Теперь найдите инициалы описания продукта в возвращенных данных, чтобы выяснить его точное местоположение. Вот как вы можете извлечь его:
product_description = json['props']['pageProps']['initialData']['data']['product']['shortDescription']

Итак, мы закончили с нашими целевыми элементами. Если вам нужна дополнительная информация о продукте, вы можете использовать эти данные JSON для извлечения дополнительных данных.
Полный код:
import requests
from bs4 import BeautifulSoup
import json
url="https://www.walmart.com/ip/Apple-Wireless-Charging-Case-for-AirPods/910249719"
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36',
'Accept-Language': 'en-US,en;q=0.9',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
}
resp = requests.get(url, headers=headers)
print(resp.status_code)
soup = BeautifulSoup(resp.text,'html.parser')
title = soup.find("h1").text
pricing = soup.find("span",{"itemprop":"price"}).text.replace("Now ","")
rating = soup.find("span",{"class":"rating-number"}).text.replace("(","").replace(")","")
images = []
for el in soup.select('.tc .relative'):
images.append("https" + el.find("img")['src'])
script_data = soup.find('script', {'id': '__NEXT_DATA__'})
json = json.loads(script_data.text)
product_description = json['props']['pageProps']['initialData']['data']['product']['shortDescription']
Вы также можете внести изменения в сценарий в соответствии с вашими потребностями.
Парсинг Walmart с помощью Serpdog
Walmart трудно очистить с ограниченными ресурсами. Они могут быстро заблокировать ваш IP-адрес, если вы попытаетесь очистить миллионы страниц с их сервера. Простая передача соответствующих заголовков с запросом не обеспечит долгосрочного решения.
В конечном счете, для парсинга Walmart необходимо использовать большое количество меняющихся IP-адресов. Обслуживание парсера в долгосрочной перспективе требует много времени, поэтому мы предлагаем вам отличное решение для парсинга Walmart: Serpdog's Web Scraping API

Serpdog также предлагает 1000 бесплатных запросов API при регистрации.
После успешной регистрации вы получите API-ключ для доступа к нашим API-сервисам. Вы можете встроить свой API-ключ в приведенный ниже код для извлечения данных из Walmart без использования пула IP-адресов и заголовков.
import requests
from bs4 import BeautifulSoup
import json
url="https://api.serpdog.io/scrape?api_key=APIKEY&url=https://www.walmart.com/ip/Apple-Wireless-Charging-Case-for-AirPods/910249719&render_js=false"
resp = requests.get(url)
print(resp.status_code)
soup = BeautifulSoup(resp.text,'html.parser')
title = soup.find("h1").text
pricing = soup.find("span",{"itemprop":"price"}).text.replace("Now ","")
rating = soup.find("span",{"class":"rating-number"}).text.replace("(","").replace(")","")
images = []
for el in soup.select('.tc .relative'):
images.append("https" + el.find("img")['src'])
script_data = soup.find('script', {'id': '__NEXT_DATA__'})
json = json.loads(script_data.text)
product_description = json['props']['pageProps']['initialData']['data']['product']['shortDescription']
Заключение
В этом руководстве мы научились очищать данные о продуктах Amazon с помощью Python. Пожалуйста, не стесняйтесь пишите мне, если я что-то пропустил.
Если вы считаете, что мы можем выполнить ваши индивидуальные проекты парсинга, пожалуйста, не стесняйтесь обращаться к нам. Подпишись на меня в Твиттере". Спасибо за прочтение!
Дополнительные ресурсы
Я подготовил полный список блогов о парсинге веб-страниц, которые могут помочь вам в вашем путешествии по извлечению данных: