如何从零开始创建沃尔玛价格跟踪器?

创建沃尔玛价格跟踪器

如果您经常在沃尔玛购物,您可能会想知道某件商品何时会打折或有特价。每天手动检查价格可能会很麻烦,但如果利用一些技术来创建一个沃尔玛价格跟踪器,您就可以自动监控价格变化,并在价格下降时收到通知。

本指南将一步步指导您创建自己的沃尔玛价格跟踪器--从数据采集和存储到价格监控和自动提醒。即使您是编程新手,也能轻松上手!

沃尔玛价格跟踪器能做什么?

假设您打算从沃尔玛购买一台新电视机,但不确定现在是否是最佳购买时机。每天手动查看价格非常耗时。这时,价格跟踪工具就派上用场了。

  • 全天候自动监控产品价格。

  • 记录历史价格趋势。

  • 当价格下降时,立即通过电子邮件或短信通知您。

开始追踪所需的物品

在开始之前,请确保准备好以下工具:

  1. Python (建议使用 3.8 或更高版本) - 用于编写和运行脚本

  2. 代码编辑器 (VS Code 或 PyCharm) - 让编码更简单、更高效

  3. 沃尔玛开发者账户 (可选)--使用官方应用程序接口更稳定

  4. 代理 IP (可选)--有助于避免在频繁请求时被阻止

安装所需的 Python 库

打开终端或命令提示符,运行以下命令

pip install requests beautifulsoup4 selenium pandas schedule smtplib

如果您计划使用浏览器自动化,还需要安装 ChromeDrivergeckodriver取决于您的浏览器。

如何获取沃尔玛产品价格

方法 1: 沃尔玛官方 API(推荐使用)

沃尔玛提供开发人员应用程序接口,让您可以直接获取产品数据。

第 1 步:获取 API 密钥

访问沃尔玛开发人员门户网站。

使用官方 api 构建沃尔玛价格跟踪器

创建账户并申请 API 密钥(审批可能需要一些时间)。

步骤 2:使用 Python 获取价格

进口请求

api_key = "your_scraperapi_key" PRODUCT_URL = "" # 替换为您的产品 URL
PRODUCT_URL = "https://www.walmart.com/ip/123456789" # 替换为您的产品 URL

def get_price():  
    response = requests.get(
        f "http://api.scraperapi.com?api_key={API_KEY}&url={PRODUCT_URL}"
    )  
    # 从 HTML 中提取价格(简化示例)
    返回 "29.99" # 替换为实际解析逻辑

price = get_price()
print(f "Current price: ${price}") 

虽然这种方式合法,而且不太可能被屏蔽,但它需要 API 访问权限,而且可能有速率限制。

方法 2:使用网络爬虫抓取(替代方法)

如果不想使用应用程序接口,可以使用以下工具 美丽汤 直接从产品页面获取价格。

示例:使用 Selenium 自动提取产品页面的价格

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

# 设置无头浏览器(运行时不打开窗口)
options = Options()
options.add_argument("--headless")
驱动程序 = webdriver.Chrome(options=options)

product_url = "https://www.walmart.com/ip/123456789" # 替换为产品 URL
driver.get(product_url)

# 查找价格元素(可能需要调整 XPath)
price_element = driver.find_element("xpath", '//span[@itemprop="price"]')
price = price_element.text
print(f "Current price: {price}")

driver.quit() # 关闭浏览器

沃尔玛有反窃听保护措施,频繁请求可能会导致您的 IP 被屏蔽。这样,添加 time.sleep(5) 为确保可靠性,建议使用轮换代理 IP。

沃尔玛刮擦检测旁路 [可选]

单个 IP 地址的建议请求频率为 每分钟不超过 1 次 而不会触发反僵尸保护。因此,在频繁访问和搜索沃尔玛网页时,使用提供以下功能的代理服务器 清除IP 定期更改 UA 对于避免被标记和 IP 禁止至关重要。以下是管理和优化沃尔玛价格跟踪器设置的方法。

(1) 代理池管理

由于您的 IP 地址可能会因为过多的搜刮请求而被暂时屏蔽,从而导致 403 Forbidden 错误,而且沃尔玛的产品价格可能会因地区而异,例如,美国和加拿大用户可能会看到同一商品的不同价格,因此需要一个拥有数百万 IP 的庞大代理池来进行轮换。

OkeyProxy 令人印象深刻的网络 拥有 1.5 亿多个真实 IP,覆盖 200 多个国家/地区。支持所有设备和用例,包括自动 IP 轮换,用于搜刮和跟踪数据。该代理服务的价格极具竞争力,是住宅代理搜刮器的首选。它提供 $3/GB 代理试用版,让每个用户都能体验代理搜刮的可靠性、速度和多功能性。

# 代理池 - 替换为您自己的代理 IP
PROXY_POOL = [
    "http://45.123.123.123:8080",
    "http://67.234.234.234:8888",
    "http://89.111.222.333:3128"
]

# 从代理池中随机选择并验证一个代理
def rotate_proxy():
    while True:
        proxy = random.choice(PROXY_POOL)
        if check_proxy(proxy):
            返回代理
        else:
            print(f "Proxy {proxy} is not available, trying another...")
            PROXY_POOL.remove(proxy)
    raise Exception("池中已无有效代理")。

# 通过测试请求检查代理是否正常工作
def check_proxy(proxy):
    try:
        test_url = "https://httpbin.org/ip"
        response = requests.get(test_url, proxies={"http": proxy}, timeout=5)
        return response.status_code == 200
    例外:
        return False

(2) 反僵尸策略

随机化请求头

为避免被检测为僵尸,请在每次请求时轮换您的 User-Agent:

from fake_useragent import UserAgent

ua = UserAgent()
headers = {"User-Agent": ua.random}

在请求之间添加随机延迟

在请求之间引入延迟有助于模仿人类行为:

导入时间
导入随机

time.sleep(random.uniform(3, 10)) # 在下一次请求前等待 3-10 秒

这些策略有助于降低被拦截的风险,并随着时间的推移提高刮板的可靠性。

保存沃尔玛商品价格历史记录

获取价格后,重要的是将其存储起来,这样您就可以跟踪一段时间内的历史趋势。

方法 1:在 SQLite 数据库中存储数据

导入 sqlite3
从 datetime 导入 datetime

# 创建或连接数据库
conn = sqlite3.connect("walmart_prices.db")
cursor = conn.cursor()

# 创建一个不存在的表
cursor.execute('''
    CREATE TABLE IF NOT EXISTS prices (
        product_id TEXT、
        价格 REAL、
        日期文本
    )
''')

# 插入新的价格数据
cursor.execute("INSERT INTO prices VALUES (?, ?, ?)"、
               (product_id, price, datetime.now())
conn.commit()
conn.close()

搜索沃尔玛网站后将数据存储在本地 SQLite 数据库中,该数据库轻量级,可自动创建文件,无需安装其他软件。

方法 2:在 CSV 文件中存储数据(更简单)

import pandas as pd
从 datetime 导入 datetime

data = {
    "product_id":[product_id]、
    价格[价格]、
    "日期": [date[datetime.now()]。
}

df = pd.DataFrame(data)
df.to_csv("prices.csv", mode="a", header=False) # 追加模式

这两种方法都很有效--使用数据库进行更高级的查询,或使用 CSV 进行简单查询。

沃尔玛价格跟踪每日提醒

1.按特定路线查询沃尔玛价格

使用 时间表 库,每天在特定时间自动运行价格检查脚本:

导入时间表
导入时间

def check_price():
    # 在此处输入刮擦和价格检查代码
    print("Checking price...")

# 每天上午 9:00 运行任务
schedule.every().day.at("09:00").do(check_price)

while True:
    schedule.run_pending()
    time.sleep(60) # 每分钟检查一次计划任务

2.降价时发送电子邮件通知

导入 smtplib
从 email.mime.text 导入 MIMEText

def send_email(price):
    发送方 = "[email protected]"
    接收者 = "[email protected]"
    password = "your_email_password_or_app_password"

    msg = MIMEText(f "The product price has dropped! Latest price: ${price}")
    msg["Subject"] = "沃尔玛价格警报"
    msg["From"] = 发件人
    msg["To"] = 接收者

    使用 smtplib.SMTP("smtp.gmail.com", 587) 作为服务器:
        server.starttls()
        server.login(sender, password)
        server.sendmail(sender, receiver, msg.as_string())

然后,在您的 check_price() 函数,当价格低于目标值时触发警报:

if price = 100: # 设置所需的价格阈值
    send_email(price)

沃尔玛价格跟踪器部署到云端

如果您希望沃尔玛价格跟踪器持续运行或在预定时间运行,可以使用以下选项之一将脚本部署到云中:

  • GitHub 操作 - 免费,非常适合每天运行一次脚本

  • 云服务器 (AWS、Azure 等) - 实时监控的理想选择

  • PythonAnywhere - 适合初学者,但免费版本有一些限制

下面是一个在沃尔玛价格跟踪后将刮擦工具上传到 Github 的例子,这是比较常见的。

在 GitHub 中安排沃尔玛价格跟踪器

首先,创建一个 GitHub 存储库.

然后添加 .github/workflows/tracker.yml:

名称: 沃尔玛价格跟踪器

上:
  时间表:
    - cron: "0 14 * * *" # 2 PM UTC(根据您所在的时区进行调整)

jobs:
  run-tracker:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name:运行跟踪器
        运行: python tracker.py

跟踪沃尔玛商品价格的附加功能

1.监控和抓取多个沃尔玛 Itens 的数据

您可以将多个产品存储在一个列表中并循环查看,从而轻松跟踪多个产品:

product_list = [
    {"id":"123456789", "name":"无线耳塞","阈值":50},
    {"id":"987654321", "名称":"智能手表","阈值": 200}200}
]

def monitor_multiple_products():
    for PRODUCT_LIST 中的产品
        price = get_price(product["id"])
        if price = product["threshold"]:
            send_email(f"{product['name']} just dropped to ${price}!")

这样,你就能为你正在关注的每件商品收到单独的警报,在大型促销活动期间超级方便!

2.从保存的跟踪数据中直观了解价格趋势

想分析价格随时间的变化?如果您将价格数据存储在 CSV 或 SQLite 数据库中,只需使用 大熊猫matplotlib:

import pandas as pd
import matplotlib.pyplot as plt
导入 sqlite3

def plot_price_history():
    # 从 SQLite 数据库加载数据(或使用 pd.read_csv 加载 CSV 文件)
    conn = sqlite3.connect('walmart_prices.db')
    df = pd.read_sql_query("SELECT * FROM prices", conn)
    conn.close()

    # 将日期列转换为日期时间格式
    df['date'] = pd.to_datetime(df['date'])

    # 可选:过滤特定产品
    product_id = "123456789"
    product_df = df[df['product_id'] == product_id]

    # 绘图
    plt.figure(figsize=(10, 5))
    plt.plot(product_df['date'], product_df['price'], marker='o', linestyle='-')
    plt.title(f "Product {product_id} 的价格趋势")
    plt.xlabel("Date")
    plt.ylabel("Price (USD)")
    plt.grid(True)
    plt.xticks(rotation=45)
    plt.tight_layout()
    plt.savefig("price_history.png")
    plt.show()

您可以安排该功能每周运行一次,并自动将图表发送到您的收件箱!

3.建立沃尔玛价格跟踪器的网络控制面板

您可以使用以下方法创建一个简单的沃尔玛价格跟踪面板 烧瓶流光溢彩 在网络界面显示产品价格和趋势。

例如,Flask 提供 HTML 模板,您可以在其中显示当前价格、历史趋势(图片或图表)等。下面是一个基本示例,供您参考:

from flask import Flask, render_template
将 pandas 导入 pd
导入 sqlite3

app = Flask(__name__)

@app.route("/")
def index():
    conn = sqlite3.connect("walmart_prices.db")
    df = pd.read_sql_query("SELECT * FROM prices", conn)
    conn.close()

    latest_prices = df.sort_values("date").groupby("product_id").last().reset_index()
    return render_template("index.html", data=latest_prices.to_dict(orient="records"))

然后,创建一个简单的 HTML 模板(templates/index.html)来显示产品价格。

flask walmart 价格跟踪 HTML 模板

常见问题(FAQ)

问题 1: 为什么我的刮擦器会被阻止?

您在短时间内发送了太多请求。使用 精英代理 轮换 IP 地址,并在每次请求之间添加随机延迟,以避免达到速率限制:

time.sleep(random.randint(2, 5)) # 下次请求前等待 2-5 秒

问题 2: 如何查找产品 ID?

转到沃尔玛产品页面 - URL 中 /ip/ 后面的数字就是产品 ID。例如

https://www.walmart.com/ip/123456789 → 产品编号为 123456789

问题 3:我可以同时跟踪多个产品吗?

可以!只需创建一个产品 ID 列表并在其中循环即可:

product_list = ["123", "456", "789"]

for product_id in product_list:
    price = get_price(product_id)
    save_price(product_id, price)

您还可以扩展此功能,在每种产品降价时为其发送单独的警报。

总结

就是这样!您现在拥有了一个全自动的沃尔玛价格跟踪器,它可以全天候监控价格,并在价格下跌时立即通知您。

如果您大规模部署了 walmart.com 价格跟踪器,请务必遵守沃尔玛的 robots.txt 指南 (在此查看规则)和 轮换代理 IP 因此。

有了您定制的沃尔玛价格跟踪器,您可以在睡觉时查看价格,再也不会错过任何优惠!

了解更多

顶级 Socks5/Http(s) 代理服务

  • 可扩展计划:静态/轮流居住代理
  • 无缝集成:Win/iOS/Android/Linux
  • 安全性高:是反检测浏览器、仿真器、刮擦器等的理想之选。
  • 性能可靠:快速传输和低延迟
免费试用箭头-右
全天候定制服务
150 M+ IP 地址
城市/缔约国目标定位
应用程序接口支持