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

Вы можете просмотреть информацию о Walmart в Интернете, чтобы отслеживать цены. Кроме того, вы можете проверить, есть ли в наличии определенный продукт, чтобы вы могли обновить свой веб-сайт о наличии на складе.

В этой записи блога мы будем выполнять парсинг Walmart с помощью Python. Мы также изучим:

  1. Как обойти капчу, чтобы очистить страницу продукта Walmart
  2. Как извлечь желаемую информацию о продукте из Walmart
  3. Почему важно извлекать данные из Walmart

Зачем очищать Walmart?

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

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

В целом, Walmart — это богатый данными веб-сайт для майнеров данных. Данные могут быть использованы для бесчисленных целей. Но пока давайте сосредоточимся на извлечении информации о продукте из Walmart.

Давайте начнем собирать данные о продуктах Walmart

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

В этом руководстве мы будем использовать две библиотеки: Requests и BeautifulSoup.
Запросы будут использоваться для создания HTTP-соединения с веб-страницей, а BeautifulSoup — для анализа и извлеките нужную информацию из извлеченных данных HTML.

Чтобы установить обе библиотеки, выполните следующие команды в терминале папки вашего проекта:

pip install requests
pip install beautifulsoup4

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

  1. Название продукта
  2. Цена
  3. Рейтинг
  4. Изображения
  5. Описание

Для извлечения данных из 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. Пожалуйста, не стесняйтесь пишите мне, если я что-то пропустил.

Если вы считаете, что мы можем выполнить ваши индивидуальные проекты парсинга, пожалуйста, не стесняйтесь обращаться к нам. Подпишись на меня в Твиттере". Спасибо за прочтение!

Дополнительные ресурсы

Я подготовил полный список блогов о парсинге веб-страниц, которые могут помочь вам в вашем путешествии по извлечению данных:

  1. Веб-скрейпинг Google с помощью Node JS — полное руководство
  2. Веб-парсинг — полное руководство
  3. Парсинг веб-страниц с помощью Python
  4. Веб-парсинг Google Maps
  5. Очистка вакансий LinkedIn
  6. Очистка результатов поиска Google с помощью Python