监控网站价格可以通过编写一个Python脚本来实现,该脚本使用`requests`库来发送HTTP请求,并使用`BeautifulSoup`库来解析HTML内容。以下是一个简单的示例,展示了如何监控一个网站上的商品价格,并在价格低于预期时发送邮件通知。
示例代码
```python
import requests
from bs4 import BeautifulSoup
import smtplib
from email.mime.text import MIMEText
from email.header import Header
import time
class PriceMonitor:
def __init__(self, target_price):
self.target_price = target_price
self.headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
}
def get_price(self, url):
try:
response = requests.get(url, headers=self.headers)
soup = BeautifulSoup(response.text, 'html.parser')
这里的选择器需要根据具体网站调整
price = soup.select_one('.price-now').text
return float(price.replace('¥', '').strip())
except Exception as e:
print(f"Error fetching price: {e}")
return None
def send_email(self, price):
sender_email = "your_email@example.com"
receiver_email = "receiver_email@example.com"
password = "your_email_password"
message = MIMEText(f"Price Alert: The price has dropped to {price}¥")
message['From'] = Header(sender_email, 'utf-8')
message['To'] = Header(receiver_email, 'utf-8')
message['Subject'] = Header("Price Drop Alert", 'utf-8')
try:
with smtplib.SMTP('smtp.example.com', 587) as server:
server.starttls()
server.login(sender_email, password)
server.sendmail(sender_email, receiver_email, message.as_string())
print("Email sent successfully")
except Exception as e:
print(f"Error sending email: {e}")
def monitor(self, url, interval):
while True:
current_price = self.get_price(url)
if current_price is not None and current_price < self.target_price:
self.send_email(current_price)
time.sleep(interval)
if __name__ == "__main__":
target_price = 1000 设定目标价格
monitor_url = "https://example.com/product" 设定监控的网站URL
interval = 3600 设定监控间隔时间(秒)
price_monitor = PriceMonitor(target_price)
price_monitor.monitor(monitor_url, interval)
```
代码说明
初始化
`PriceMonitor`类接受一个目标价格`target_price`作为参数。
`headers`包含用于HTTP请求的用户代理信息。
获取价格
`get_price`方法接受一个URL作为参数,发送HTTP请求并解析HTML内容,提取价格信息。
使用`BeautifulSoup`的`select_one`方法选择价格元素,并将其转换为浮点数。
发送邮件
`send_email`方法接受当前价格和发件人、收件人邮箱地址以及邮箱密码作为参数。
使用`smtplib`库发送邮件通知。
监控
`monitor`方法接受监控的URL和间隔时间作为参数,定期检查价格并发送邮件通知。
注意事项
选择器:在`get_price`方法中,选择器(如`.price-now`)需要根据具体网站的结构进行调整。
邮件服务:确保邮件服务(如SMTP服务器)配置正确,并且发送邮件时不会触发垃圾邮件过滤。
异常处理:在实际应用中,建议添加更多的异常处理逻辑,以应对网络问题或HTML结构变化。
通过这种方式,你可以编写一个简单的Python脚本来监控网站上的商品价格,并在价格低于预期时发送邮件通知。根据具体需求,你可以进一步扩展和优化这个脚本,例如添加更多的监控条件、使用长效IP、存储历史数据等。