在CHATGPT的帮助下,用python写了一个简单的价格监控程序。
实现了如下功能:
1.获取现在价格
2.当低于某个价格时提醒
3.邮件提醒
代码如下:
import requests
from bs4 import BeautifulSoup
import smtplib
from email.mime.text import MIMEText
from email.header import Header
import time
# 设置自己的邮箱信息
my_email = "xxx@mutou.men"
my_password = "******"
recipient_email = "xxx@xxx.com"
# 商品链接和监控价格列表,target_price后面填写你意向的价格。可以添加多个商品链接。
products = [
{"url": "https://explore.omsystem.com/us/en/e-m10-mark-iii-black-with-14-42mm-r-lens-reconditioned.html", "target_price": 800},
{"url": "https://www.nikonusa.com/en/nikon-products/product/refurbished-mirrorless-cameras/1633b/z-50-refurbished.html", "target_price": 1000}
]
def get_price(url):
# 请求商品链接,获取网页内容
response = requests.get(url)
soup = BeautifulSoup(response.content, "html.parser")
# 查找价格信息并转换为数值类型返回
if "omsystem.com" in url:
price_str = soup.find("span", {"class": "price"}).text.strip().replace("$", "")
elif "nikonusa.com" in url:
price_str = soup.find("span", {"class": "font-open-sans price-now"}).text.strip().replace("$", "")
return float(price_str)
def send_email(subject, message):
# 创建邮箱内容
msg = MIMEText(message, "plain", "utf-8")
msg["Subject"] = Header(subject, "utf-8")
msg["From"] = my_email
msg["To"] = recipient_email
# 使用SMTP协议发送邮件,我这里用的是腾讯企业邮箱。
server = smtplib.SMTP_SSL("smtp.exmail.qq.com", 465)
server.login(my_email, my_password)
server.sendmail(my_email, recipient_email, msg.as_string())
server.quit()
while True:
# 打印日志信息,显示当前时间和开始监控
print("开始监控,当前时间:", time.ctime())
# 检查每个商品的价格是否达到目标价格
reached_products = [] # 保存价格达到目标值的商品
for p in products:
current_price = get_price(p["url"])
if current_price <= p["target_price"]:
# 当价格达到目标价格时保存商品到达标的商品列表
reached_products.append(p)
# 发送邮件提醒
subject = "商品价格到目标值!"
message = "商品 {} 当前价格为 ${},已达到你设置的目标价格 ${}。".format(p["url"], current_price, p["target_price"])
send_email(subject, message)
print("商品 {} 当前价格为 ${}".format(p["url"], current_price))
# 从products列表中删除已经达到目标价格的商品
for p in reached_products:
products.remove(p)
# 如果所有商品的价格都达到目标值,就退出程序
if not products:
print("所有商品的价格都已经达到目标值,结束监控。")
break
# 打印日志信息,显示下一次监控的时间和间隔时间
next_check_time = time.ctime(time.time() + 3600) # 用当前时间加上1小时的秒数计算下一次监控的时间
print("本次监控结束,下一次监控时间:{} (间隔时间1小时)".format(next_check_time))
# 设置间隔时间并进入下一个循环
time.sleep(3600) # 每隔1小时进行一次监控,可以根据需要调整。