背景
因最近公司新项目需要用到python,学习之余突发奇想写一个脚本:自动校验双色球号码是否中奖,如果中奖给自己发邮件通知,非常适合长期购买固定彩票号码的同学,说干就干
准备
先去官网下载一个windows的python按照包,下载地址:https://www.python.org/downloads/windows/,下载下来正常安装就行,记得勾选下添加环境变量选项,省得自己手动配置;接下来还需要一个IDE:PyCharm,下载地址: https://www.jetbrains.com/pycharm/download/
分析
要校验是否中奖就必须的先知道开奖号码,如何知道,当然是去彩票网爬咯;爬到中奖号码之后和自己预先配置号的购买号码进行对比,根据中奖规则,计算是否中奖,中的几等奖;然后就是发邮件告诉自己中奖了,需要用到python的SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议;分析下来很简单嘛,实际写起来…更简单,这就是python…库的牛逼之处
配置邮箱
我这里用的qq邮箱,需要去如下图地方开启服务,并生成授权码,生成的授权码下面代码会用到
问题
其中爬虫需要用到的库beautifulsoup4没有,需要安装,安装命令:pip3 install beautifulsoup4,提示pip不是最新的,更新pip:python -m pip install --upgrade pip,然后再pip3 install beautifulsoup4
主体代码
下面直接上代码auto_judge_lottery.py
# -*- coding: utf-8 -*-
import urllib.error
import urllib.request
import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr
from bs4 import BeautifulSoup
import re
# 你购买的号码,蓝球放最后
buyNumber = [
[2, 4, 12, 22, 29, 31, 1],
[2, 4, 12, 22, 29, 31, 2],
]
my_sender = '********@qq.com' # 发件人邮箱账号
my_pass = '********' # 发件人邮箱密码,就是上图配置的授权码
my_user = '********@qq.com' # 收件人邮箱账号,可以自己发给自己
base_url = "https://kaijiang.500.com/shtml/ssq/" # 彩票网,用来爬取中奖号码
def ask_url(url):
"""
得到指定一个URL的网页内容
:param str url: url地址
:return:
"""
head = {
# 模拟浏览器头部信息
"User-Agent": "Mozilla / 5.0(Windows NT 10.0; Win64; x64) AppleWebKit / 537.36(KHTML, like Gecko) Chrome / 80.0.3987.122 Safari / 537.36"
}
request = urllib.request.Request(url, headers=head)
html = ""
try:
response = urllib.request.urlopen(request)
html = response.read().decode("utf-8", errors='ignore')
except urllib.error.URLError as e:
if hasattr(e, "code"):
print(e.code)
if hasattr(e, "reason"):
print(e.reason)
return html
def get_win_number(url):
"""
爬取指定url网页获取开奖号码
:param str url: url地址
:return:
"""
html = ask_url(url)
soup = BeautifulSoup(html, "html.parser")
find_red_ball = re.compile(r'<li class="ball_red">(.*?)</li>', re.S) # 用来获取红球的正则
find_blue_ball = re.compile(r'<li class="ball_blue">(.*?)</li>', re.S) # 用来获取蓝球的正则
item = soup.find_all('div', class_="ball_box01")[0