Скрапинг данных о товарах играет большую роль в конкурентном анализе, мониторинге цен и исследованиях рынка. Python является мощным инструментом, который позволяет эффективно извлекать информацию со страниц товаров. В этом руководстве мы рассмотрим процесс скрапинга данных с онлайн-магазина, используя библиотеки requests и lxml.
Скрапинг в области электронной торговли включает извлечение таких деталей, как названия, цены и уникального ID товаров из интернет-магазинов. В данном руководстве основное внимание будет уделено техникам и методам, которые можно адаптировать для работы с любыми платформами электронной торговли.
Перед началом процесса скрапинга убедитесь, что у вас установлены необходимые библиотеки Python:
pip install requests
pip install lxml
Далее мы подробно рассмотрим процесс извлечения названий товаров, их характеристик и брендов с конкретных страниц товаров, используя Python.
Чтобы извлечь данные с любого веб-сайта, вам необходимо понять структуру веб-страницы. Откройте страницу веб-сайта и с помощью инструментов разработчика исследуйте элементы, которые вы хотите скрапить, ннапример, название товара, характеристики, бренд и т.д.
Сначала мы будем использовать библиотеку requests для отправки HTTP GET-запросов. Также мы настроим заголовки, чтобы имитировать запросы реального браузера.
import requests
# Список URL-адресов товаров для скрапинга
urls = [
"https://www.costco.com/kirkland-signature-men's-sneaker.product.4000216649.html",
"https://www.costco.com/adidas-ladies'-puremotion-shoe.product.4000177646.html"
]
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',
}
# Перебор каждого URL и отправка GET-запроса
for url in urls:
response = requests.get(url, headers=headers)
if response.status_code == 200:
html_content = response.text
# Дополнительная обработка будет добавлена на следующих шагах
else:
print(f"Failed to retrieve {url}. Status code: {response.status_code}")
Используя библиотеку lxml, мы извлечем необходимые данные из результата парсинга HTML.
from lxml import html
# Список для хранения извлеченных данных
scraped_data = []
# Цикл по каждому URL и отправка GET-запроса
for url in urls:
response = requests.get(url)
if response.status_code == 200:
html_content = response.content
# Парсинг HTML-содержимого с помощью lxml
tree = html.fromstring(html_content)
#Извлечение данных с использованием XPath
product_name = tree.xpath('//h1[@automation-id="productName"]/text()')[0].strip()
product_feature = tree.xpath('//ul[@class="pdp-features"]//li//text()')
product_brand = tree.xpath('//div[@itemprop="brand"]/text()')[0].strip()
# Добавление извлеченных данных в список
scraped_data.append({'Product Name': product_name, 'Product Feature': product_feature, 'Brand': product_brand})
else:
print(f"Failed to retrieve {url}. Status code: {response.status_code}")
# Вывод извлеченных данных
for item in scraped_data:
print(item)
Веб-сайты часто используют анти-бот системы, которые приводят к появлению CAPTCHA или блокировке IP-адресов. Использование прокси и ротация User Agent может помочь избежать обнаружения.
Использование прокси, в примере указаны прокси с авторизацией по IP-адресу:
proxies = {
'http': 'http://your_proxy_ip:your_proxy_port',
'https': 'https://your_proxy_ip:your_proxy_port'
}
response = requests.get(url, proxies=proxies)
Ротация User-Agent:
import random
user_agents = [
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
# Добавьте больше user agents по необходимости
]
headers['user-agent'] = random.choice(user_agents)
response = requests.get(url, headers=headers)
Наконец, мы сохраним извлеченные данные в файл CSV для дальнейшего анализа.
import csv
csv_file = 'costco_products.csv'
fieldnames = ['Product Name', 'Product Feature', 'Brand']
# Запись данных в файл CSV
try:
with open(csv_file, mode='w', newline='', encoding='utf-8') as file:
writer = csv.DictWriter(file, fieldnames=fieldnames)
writer.writeheader()
for item in scraped_data:
writer.writerow(item)
print(f"Data saved to {csv_file}")
except IOError:
print(f"Error occurred while writing data to {csv_file}")
import requests
import urllib3
from lxml import html
import csv
import random
import ssl
ssl._create_default_https_context = ssl._create_stdlib_context
urllib3.disable_warnings()
# Список URL-адресов товаров для скрапинга
urls = [
"Link with http",
"Link with https"
]
# Заголовки
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',
}
# Список user-agent для ротации запросов
user_agents = [
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
# Добавьте больше user agents по необходимости
]
# Список прокси для ротации запросов
proxies = [
{'http': 'http://your_proxy_ip:your_proxy_port', 'https': 'https://your_proxy_ip:your_proxy_port'},
{'http': 'http://your_proxy_ip2:your_proxy_port2', 'https': 'https://your_proxy_ip2:your_proxy_port2'},
# Добавьте больше прокси по необходимости
]
# Список для хранения извлеченных данных
scraped_data = []
# Цикл по каждому URL и отправка GET-запроса
for url in urls:
# Выбор случайного user-agent для заголовков запроса
headers['user-agent'] = random.choice(user_agents)
# Выбор случайного прокси для запроса
proxy = random.choice(proxies)
# Отправка HTTP GET-запроса на URL с заголовками и прокси
response = requests.get(url, headers=headers, proxies=proxy, verify=False)
if response.status_code == 200:
# Сохранение HTML-содержимого из ответа
html_content = response.content
# Парсинг HTML-содержимого с помощью lxml
tree = html.fromstring(html_content)
# Извлечение данных с помощью XPath
product_name = tree.xpath('//h1[@automation-id="productName"]/text()')[0].strip()
product_feature = tree.xpath('//ul[@class="pdp-features"]//li//text()')
product_brand = tree.xpath('//div[@itemprop="brand"]/text()')[0].strip()
# Добавление извлеченных данных в список
scraped_data.append({'Product Name': product_name, 'Product Feature': product_feature, 'Brand': product_brand})
else:
# Вывод сообщения об ошибке, если запрос не удался
print(f"Failed to retrieve {url}. Status code: {response.status_code}")
# Настройка файла CSV
csv_file = 'costco_products.csv'
fieldnames = ['Product Name', 'Product Feature', 'Brand']
# Запись данных в файл CSV
try:
with open(csv_file, mode='w', newline='', encoding='utf-8') as file:
writer = csv.DictWriter(file, fieldnames=fieldnames)
writer.writeheader()
for item in scraped_data:
writer.writerow(item)
print(f"Data saved to {csv_file}")
except IOError:
# Вывод сообщения об ошибке, если при записи в файл произошла ошибка
print(f"Error occurred while writing data to {csv_file}")
Использование Python для скрапинга данных с веб-сайтов электронной торговли, демонстрирует его эффективность в сборе информации о товарах для анализа и стратегического планирования. Благодаря библиотекам, таким как Requests и Lxml, возможно автоматизировать и оптимизировать процессы извлечения данных, обрабатывая HTML-контент и эффективно обходя защиту от ботов.
Мы получили вашу заявку!
Ответ будет отправлен на почту в ближайшее время.
С уважением proxy-seller.ru!
Комментарии: 0