通过python实现官网监控、音乐播放、邮件提醒的简易程序

前言

本弟弟是一个大二计算机专业学生,因为准备考研而起了买个iPad pro的念头,怎奈家境贫寒(那你能帮帮我吗?)只能起了买官翻的念头。但是官翻更新没有规律,经常手动刷新容易错过,因此受到吧里老哥的启发,用python写了一个监控官网的小程序,成功帮群里的几位老哥抢到翻新,证明了这个程序的效果。

1.尝试前

第一,需要注意的是,由于本弟弟不会封装,因此尝试前请务必安装python3的环境,不可以因为没装环境运行不了留言或者私信骂我啥b!
博主环境:macOS+pycharm+python3.7.4
代码上import的包都可以用pip工具安装~
第二,由于程序写的很简单,有的时候可能会根据不同地区不同家庭的网络状况而造成更新不及时的问题,博主也是失败了三次才成功抢到~不可以因为通知晚了没抢到留言或者私信骂我啥b!
第三、博主分享这个程序,是希望能够激发各位懂行的老哥的兴趣,并探讨和交流,觉得有效果的可以捐赠我鼓励我!

2.开始!

一、发邮件函数

如果你没有办法一直蹲在电脑前,就需要用到发邮件来通知你官网的更新。以QQ邮箱为例,这需要邮箱打开SMTP服务,具体可以进行百度,打开后获取授权码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
def send_mail(title, article, receiver):
host = 'smtp.qq.com' # 这是QQ邮箱SMTP服务器的host,其他邮箱有不同可具体查询
user = 'XXXXXXXXX@qq.com'#这是邮箱号
password = 'XXXXXXXXXXXXXX'#这是授权码,注意不是邮箱的密码或者QQ的密码!
sender = user
coding = 'utf8'
message = MIMEText(article, 'plain', coding)
message['From'] = Header(sender, coding)
message['To'] = Header(receiver, coding)
message['subject'] = Header(title, coding)

try:
mail_client = smtplib.SMTP_SSL(host, 465)#部分邮箱信道不同,又有可能没有开启SSL服务,具体查询
mail_client.connect(host)
mail_client.login(user, password)
mail_client.sendmail(sender, receiver, message.as_string())
mail_client.close()
print('邮件已成功发送给:' + receiver)
except:
print('发送失败!')

二、循环爬取网页信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
while True:
print("Get Work!")
localtime = time.asctime(time.localtime(time.time())) # 报时,免得程序卡住不知道~
print(localtime)
url = 'https://www.apple.com.cn/shop/refurbished/ipad' # 这个是iPad翻新页面
headers = {'User-Agent': 'Mozilla/5.0 3578.98 Safari/537.36'} # 添加headers防止官网认为是爬虫而屏蔽访问
req = urllib.request.Request(url, headers=headers)
try:
rsp = urllib.request.urlopen(req)
except:
continue
html = rsp.read().decode('utf-8', 'ignore')
# print(html)

html = BeautifulSoup(html, 'html.parser')
for link in html.find_all('a'):
info_link = link.get('href')
info_text = link.get_text(strip=True)
# print(info_text)
# print(info_link + '\n')
if info_text == "翻新 11 英寸 iPad Pro 无线局域网机型 64GB - 银色":
print('Got 翻新 11 英寸 iPad Pro 无线局域网机型 64GB - 银色!')
# playsound('BGM.mp3')
print("https://www.apple.com.cn" + info_link)
send_mail(info_text, "https://www.apple.com.cn" + info_link, 'XXXXXXXXX@qq.com')
print('Done!')
time.sleep(3) # 数字决定几秒爬取一次

理论上说,这个小程序可以通知官翻网站上任何产品,比如说要买Mac,可以将url修改成Mac页面。
博主拿“翻新 11 英寸 iPad Pro 无线局域网机型 64GB - 银色”为例,需要注意的是,程序的原理是爬取网页的信息,并进行查找和比对,因此想要的这个商品的名字要与官网产品的名字完全相同(包括空格)!
如果你觉得邮件通知还是比较慢,并且可以在电脑前等待,你可以将

#playsound(‘BGM.mp3’)前的#号和空格去掉,那么程序在爬取到对应信息后会以播放音乐的形式通知你!(缺点是音乐不播放完不会执行下一步~)
BGM博主不会提供,可以自行下载一个自己喜欢的音乐,放在python程序的根目录即可~
三、完整代码分享
分享代码之前,相信大家也已经看出来了,实际上能够正确运行这个程序并不容易,对于程序的种种限制也一定会深感麻烦,博主也对并非这个专业的吧友们的烦恼感到理解,希望有大神能够将程序封装成易使用的图形化界面造福吧友~
如果有老哥因为我分享的程序而成功抢到心仪的产品,也希望能够打赏我,鼓励我,并且分享这篇博客给大家让更多的人看到!


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import urllib.request
import smtplib
import time
from playsound import playsound
from email.header import Header
from email.mime.text import MIMEText
from bs4 import BeautifulSoup
def send_mail(title, article, receiver):
host = 'smtp.qq.com' # 这是QQ邮箱SMTP服务器的host,其他邮箱有不同可具体查询
user = 'XXXXXXXXX@qq.com'#这是邮箱号
password = 'XXXXXXXXXXXXXX'#这是授权码,注意不是邮箱的密码或者QQ的密码!
sender = user
coding = 'utf8'
message = MIMEText(article, 'plain', coding)
message['From'] = Header(sender, coding)
message['To'] = Header(receiver, coding)
message['subject'] = Header(title, coding)

try:
mail_client = smtplib.SMTP_SSL(host, 465)#部分邮箱信道不同,又有可能没有开启SSL服务,具体查询
mail_client.connect(host)
mail_client.login(user, password)
mail_client.sendmail(sender, receiver, message.as_string())
mail_client.close()
print('邮件已成功发送给:' + receiver)
except:
print('发送失败!')
while True:
print("Get Work!")
localtime = time.asctime(time.localtime(time.time())) # 报时,免得程序卡住不知道~
print(localtime)
url = 'https://www.apple.com.cn/shop/refurbished/ipad' # 这个是iPad翻新页面
headers = {'User-Agent': 'Mozilla/5.0 3578.98 Safari/537.36'} # 添加headers防止官网认为是爬虫而屏蔽访问
req = urllib.request.Request(url, headers=headers)
try:
rsp = urllib.request.urlopen(req)
except:
continue
html = rsp.read().decode('utf-8', 'ignore')
# print(html)

html = BeautifulSoup(html, 'html.parser')
for link in html.find_all('a'):
info_link = link.get('href')
info_text = link.get_text(strip=True)
# print(info_text)
# print(info_link + '\n')
if info_text == "翻新 11 英寸 iPad Pro 无线局域网机型 64GB - 银色":
print('Got 翻新 11 英寸 iPad Pro 无线局域网机型 64GB - 银色!')
# playsound('BGM.mp3')
print("https://www.apple.com.cn" + info_link)
send_mail(info_text, "https://www.apple.com.cn" + info_link, 'XXXXXXXXX@qq.com')
print('Done!')
time.sleep(3) # 数字决定几秒爬取一次

未经允许不得转载!