百思买是电子产品和小工具最受欢迎的零售商之一,因此成为价格监测的主要目标。手动检查在线商店是否有降价、促销或折扣既耗时又低效。
百思买价格跟踪器是一个自动化工具,可以扫描产品页面,记录当前价格,并在价格低于设定阈值时提醒您。该过程基于网页抓取,需要谨慎执行以避免被封锁。
本教程将指导您使用Python构建一个强大的自动化价格跟踪器。至关重要的是,我们将演示如何集成Nstproxy住宅代理,以确保您的抓取器能够可靠地访问百思买的美国产品页面,而不会遇到地理限制或IP封禁。
Nstproxy住宅代理的重要角色

与大多数主要电子商务网站一样,**百思买**采用了复杂的反抓取措施。此外,访问产品页面的权限通常根据您的地理位置而受到限制。
**Nstproxy住宅代理**对本项目至关重要,因为它们能够:
- 绕过地理限制: 通过将请求路由到美国的住宅IP,确保您可以访问正确的产品页面,而不受物理位置的限制。
- 防止IP封禁: 使用Nstproxy的轮换住宅IP池分散请求,防止百思买的安全系统标记和封禁单个IP地址。
- 确保高成功率: 住宅IP高度可信,从而减少验证码和封锁页面的出现,保证您的价格检查的高成功率。
操作步骤:使用Python构建价格跟踪器
我们将使用以下Python库:requests(用于发出HTTP请求)、BeautifulSoup(用于解析HTML)、pandas(用于数据处理)和schedule(用于自动化)。
第一步:设置环境
首先,安装必要的库:
pip install requests beautifulsoup4 pandas schedule python-dotenv
接下来,在您的项目目录中创建一个名为.env的文件,以安全存储您的Nstproxy凭据:
# .env文件
PROXY_HOST=gate.nstproxy.io
PROXY_PORT=24125
PROXY_USER=your_nstproxy_username
PROXY_PASS=your_nstproxy_password
第二步:核心抓取函数(get_price)
该函数将处理与百思买的连接,包括使用您的Nstproxy住宅代理并提取价格。
import requests
from bs4 import BeautifulSoup
from dotenv import load_dotenv
import os
# 从.env文件加载环境变量
load_dotenv()
def get_price(url):
# 1. Nstproxy配置
proxy_host = os.getenv("PROXY_HOST")
proxy_port = os.getenv("PROXY_PORT")
proxy_user = os.getenv("PROXY_USER")
proxy_pass = os.getenv("PROXY_PASS")
proxies = {
"http": f"http://{proxy_user}:{proxy_pass}@{proxy_host}:{proxy_port}",
"https": f"http://{proxy_user}:{proxy_pass}@{proxy_host}:{proxy_port}",
}
# 2. 用户代理头(防止机器人检测至关重要)
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36"
}
try:
# 3. 使用Nstproxy发起请求
response = requests.get(url, headers=headers, proxies=proxies, timeout=15)
response.raise_for_status() # 对于错误的状态码(4xx或5xx)引发异常
soup = BeautifulSoup(response.content, 'html.parser')
# 注意:价格的CSS类可能会改变。检查页面以确认。
# 这是百思买用于主要价格显示的常用类。
price_tag = soup.find("div", {"class": "priceView-hero-price priceView-customer-price"})
if price_tag:
price_text = price_tag.find("span").get_text()
# 清理价格字符串(移除货币符号和逗号)
price = float(price_text.replace("$", "").replace(",", ""))
return price
else:
print("错误:未找到价格标签。检查CSS选择器。")
return None
except requests.exceptions.RequestException as e:
print(f"使用Nstproxy请求失败:{e}")
return None
except Exception as e:
print(f"抓取过程中发生错误:{e}")
return None
第三步:数据存储和电子邮件提醒
这些函数处理记录价格数据,并在价格低于目标阈值时发送电子邮件通知。
import pandas as pd
from datetime import datetime
import smtplib
from email.mime.text import MIMEText
def save_to_csv(price, url):
"""将当前价格和时间戳附加到CSV文件中。"""
data = {
'日期': [datetime.now().strftime("%Y-%m-%d %H:%M:%S")],
'价格': [price],
'网址': [url]
}
df = pd.DataFrame(data)
# 使用'a'模式进行追加。仅在文件不存在时创建标题。
file_exists = os.path.isfile('best_buy_prices.csv')
df.to_csv('best_buy_prices.csv', mode='a', header=not file_exists, index=False)
print(f"价格记录: ${price}")
def send_email(price, url, threshold):
"""如果价格低于阈值,发送邮件提醒。"""
if price is not None and price <= threshold:
# 注意:您必须使用Gmail的应用程序密码,而不是您的常规密码。
sender_email = "[email protected]"
recipient_email = "[email protected]"
app_password = "your_app_password" # 从电子邮件提供商的安全设置中获取
try:
server = smtplib.SMTP('smtp.gmail.com', 587)
server.starttls()
server.login(sender_email, app_password)
subject = "价格提醒: Best Buy价格下跌!"
body = f"商品的价格已降至${price}。\n点击此处查看: {url}"
msg = MIMEText(body)
msg['Subject'] = subject
msg['From'] = sender_email
msg['To'] = recipient_email
server.sendmail(sender_email, recipient_email, msg.as_string())
server.quit()
print("邮件提醒成功发送!")
except Exception as e:
print(f"发送邮件失败: {e}")
第四步: 自动化与调度
最后,我们使用schedule库每天在设定时间自动运行价格检查。
import schedule
import time
# 目标产品网址(示例:苹果iPad)
url = "https://www.bestbuy.com/site/apple-10-2-inch-ipad-9th-generation-with-wi-fi-64gb-space-gray/4901809.p?skuId=4901809"
threshold = 299.99 # 设置您期望的价格阈值
def job():
"""运行爬虫、记录和提醒的主要任务。"""
print(f"--- 在 {datetime.now().strftime('%H:%M:%S')} 进行价格检查 ---")
price = get_price(url)
if price is not None:
save_to_csv(price, url)
send_email(price, url, threshold)
print("--- 任务完成 ---")
# 定于在每天的上午9:00运行
schedule.every().day.at("09:00").do(job)
print("价格跟踪器正在运行。按 Ctrl+C 停止。")
while True:
schedule.run_pending()
time.sleep(1)
最后想法
构建自己的价格跟踪器是一个充实的项目,它让您完全掌控自己的数据。然而,跟踪器的可靠性取决于您绕过反机器人措施的能力。通过将Nstproxy住宅代理集成到您的Python脚本中,您可以确保每次价格检查都通过可信的美国IP进行路由,从而确保准确一致的数据收集。
常见问题解答 (Q&A)
问题1:为什么我的爬虫在几次运行后停止工作?
答:这几乎肯定是由于IP封禁。Best Buy的反机器人系统检测到来自同一IP地址的重复请求并将其封锁。解决方案是使用旋转Nstproxy住宅代理池,确保每个请求来自不同的干净IP。
问题2:为什么在Best Buy抓取中需要住宅代理?
答:住宅代理至关重要有两个原因:地理定位和信任。Best Buy的产品页面通常会根据地点显示不同的内容或价格。通过美国Nstproxy住宅IP可以确保您看到正确的数据。此外,住宅IP被高度信任,与数据中心代理相比,更大程度上减少了被阻止的可能性。
问题3:什么是用户代理,为什么它重要?
**答:**用户代理是您的浏览器发送给网站的文本字符串,用于识别自己(例如,浏览器类型、操作系统)。使用真实的、非默认的用户代理(如代码中所示)是让您的爬虫看起来更像真实用户而不易被识别为机器人的基本步骤。
问题4:我可以为这个价格跟踪器使用免费的代理吗?
A: 不。免费代理通常速度慢、不可靠,并且它们的IP地址几乎总是被像Best Buy这样的主要电子商务网站列入黑名单。使用免费代理会导致立即被禁止和浪费时间。要获取可靠的自动化跟踪器,需要像Nstproxy这样的高端服务提供商。
Q5: 我应该多频繁运行价格跟踪器?
A: 通常每天运行跟踪器一到两次就足够捕捉大多数价格变化。过于频繁地运行(例如每分钟一次)会增加你的代理使用量,以及被检测到的风险,即使是使用轮换代理也一样。
