如何自动化收集来自像Best Buy和Walmart等主要零售商的本地化促销数据

发布: (2025年12月11日 GMT+8 19:37)
5 min read
原文: Dev.to

Source: Dev.to

在构建数据驱动的应用或用于跟踪促销和折扣的工具时,获取来自 Best Buy、Walmart 等零售商的准确、本地化数据至关重要。直接爬取零售商网站往往因地区差异和 IP 限制而困难重重。下面提供了实用的方法——使用零售商 API、网页爬取、代理服务以及自动化工具——来收集本地化的促销数据。

1. 使用零售商 API 获取结构化数据

Walmart API

Walmart 的开放 API 提供产品、价格和促销数据,并且可以按地点(例如邮编)进行过滤。

import requests

# Walmart API endpoint
api_url = "https://api.walmartlabs.com/v1/items"

params = {
    'apiKey': 'YOUR_API_KEY',
    'zipCode': '94043',          # 示例邮编,用于基于位置的促销
    'categoryId': '3944',        # 示例分类(例如电子产品)
}

response = requests.get(api_url, params=params)
data = response.json()

# Print promotional data
for item in data.get('items', []):
    print(item['name'], item['salePrice'])

Best Buy API

Best Buy 的开发者 API 提供类似功能。虽然它不会直接返回地区促销,但可以通过店铺位置过滤结果,以近似本地化优惠。

2. 使用 Python 进行网页爬取:从 Best Buy 和 Walmart 提取数据

爬取库

Python 的 BeautifulSoupScrapy 等库可以帮助解析 HTML 并提取促销元素。

示例:爬取 Best Buy 的促销页面

import requests
from bs4 import BeautifulSoup

# Best Buy promotional page
url = "https://www.bestbuy.com/site/promo/sale"

response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')

# Locate promotional elements
promos = soup.find_all('div', class_='promo-item')

# Output promo details
for promo in promos:
    title = promo.find('h3').get_text(strip=True)
    price = promo.find('span', class_='promo-price').get_text(strip=True)
    print(f"Promo: {title} | Price: {price}")

这个基础脚本可以进一步扩展,以针对特定地区的促销(例如通过在 URL 中添加邮编或城市名称的查询参数)。

3. 使用代理获取地理定位数据

许多零售商会采用反爬虫措施,如 IP 封禁或限速。使用轮换代理可以模拟来自不同地理位置的请求,绕过这些限制。

使用轮换代理提升爬取效果

Rapidproxy 提供地理定位 IP 轮换,非常适合收集本地化促销数据。

示例:在 requests 中使用 Rapidproxy

import requests

proxies = {
    'http':  'http://user:password@your-rapidproxy-instance.com:port',
    'https': 'http://user:password@your-rapidproxy-instance.com:port',
}

# Example Best Buy promotions page
url = 'https://www.bestbuy.com/site/promo/sale'

response = requests.get(url, proxies=proxies)
print(response.text)

通过轮换代理,你可以从多个地区获取数据,而不会触发封禁或得到不准确的结果。

4. 使用 Selenium 处理动态内容

部分零售商页面通过 JavaScript 加载促销信息,单纯的静态 HTML 解析不足以获取全部内容。Selenium 可以驱动真实浏览器,等待动态内容渲染后再进行提取。

使用 Selenium 进行动态爬取

from selenium import webdriver
from selenium.webdriver.common.by import By

# Initialize WebDriver (ensure the appropriate driver is installed)
driver = webdriver.Chrome(executable_path='/path/to/chromedriver')

# Navigate to Best Buy promotions page
driver.get('https://www.bestbuy.com/site/promo/sale')

# Wait for dynamic content to load
driver.implicitly_wait(5)

# Extract promotional elements
promos = driver.find_elements(By.CLASS_NAME, 'promo-item')

# Output promo details
for promo in promos:
    title = promo.find_element(By.TAG_NAME, 'h3').text
    price = promo.find_element(By.CLASS_NAME, 'promo-price').text
    print(f"Promo: {title} | Price: {price}")

driver.quit()

Selenium 能够与 JavaScript 渲染的元素交互,确保捕获所有促销信息。

结论

将零售商 API、网页爬取、轮换代理和浏览器自动化相结合,能够帮助开发者可靠地从 Walmart、Best Buy 等大型零售商处收集本地化促销数据。无论是构建优惠追踪应用还是进行市场分析,这些技术都能在规模化获取、处理和分析地区促销的同时,降低 IP 封禁等访问难题的风险。

Back to Blog

相关文章

阅读更多 »

第26天提升我的数据科学技能

第26天提升我的 Data Science 技能的封面图片 https://media2.dev.to/dynamic/image/width=1000,height=420,fit=cover,gravity=auto,format=auto/https%3A...