Loading

DATA

python实战应用之查询宿舍电费并推送
代码如下:import requests import re import smtplib import time...
扫描右侧二维码阅读全文
12
2021/07

python实战应用之查询宿舍电费并推送

代码如下:

import requests
import re
import smtplib
import time

def askurl(data):
    url = "http://yktwx.henau.edu.cn/wechat/basicQuery/queryElecRoomInfo.html?v=0.38317538989514754"

    head = {#这三个headers是必要的!!!!!
         "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 14_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.7(0x18000731) NetType/WIFI Language/zh_CN"
        ,"Cookie": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
        "Content-Type": "application/x-www-form-urlencoded"
    }
    session = requests.Session()#保持会话
    lanting_response = session.post(url, headers=head, data=data)#以post方式请求
    html = lanting_response.text
    a = re.compile(r'房间当前剩余电量(.*)度')
    # print(session.cookies)
    finda = re.findall(a, html)[0]
    # print("该房间剩余电量%s" % finda)
    return finda



def main():
    lt = "表单1"         #可定义多个表单查询多个宿舍
    qm = "表单2"            #这里以两个宿舍为例
    lt_email = "xxxxxxxxxx@qq.com"#第一个宿舍的邮箱
    qm_email = "xxxxxxxxxx@qq.com"#第二个宿舍的邮箱
    while 1:                    #第一个死循环
        finda = askurl(lt)#传入表单数据
        findb = askurl(qm)
        if float(finda) <=3  or float(findb) <= 3:#宿舍电量低于3°的时候发送邮箱提醒
#具体判断是哪一个宿舍电量不足进而提醒 
            if float(finda) <= 3:
                email(lt_email)
                # print('\r'+finda,end='',flush=True)    #输出刷新
                value = 1
                break                #避免重复发送邮件
            if  float(findb) <= 3:
                email(qm_email)
                # print('\r'+findb,end='',flush=True)
                value = 2
                break
       time.sleep(1800)#半小时查询一次

        # else:
        #     print("电量充足")
    # print('\n',value)
#根据value值判断具体是哪个宿舍电量需要缴费
    if value == 1:
        while 1:
            finda = askurl(lt)
            print('\r' + "等待xxx缴费中", end="", flush=True)
            if float(finda) > 3:
                print("缴费成功")
                break
            time.sleep(1800) 
    else:
        while 1:
            findb = askurl(qm)
            print('\r' + "等待xxx缴费中", end="", flush=True)
            if float(findb) >3:
                print("缴费成功")
                break
            time.sleep(1800)

    return 0

def email(addressee):
    HOST = "smtp.qq.com"  # 填写邮件服务器
    SUBJECT = "停电警告!"  # 邮件的标题
    TO = addressee  # 收件人
    FROM = "xxxxxxxx@qq.com"  # 发件人
    TEXT = "宿舍电量不足,请及时缴费"  # 文件内容
    BODY = "\r\n".join((  # 邮件的构成(仅限python3可用)
        "From: %s" % FROM,
        "TO: %s" % TO,
        "Subject: %s" % SUBJECT,
        "",
        TEXT
    ))

    server = smtplib.SMTP_SSL('smtp.qq.com', 465)  # 创建一个smtp()对象
    server.connect(HOST, "465")  # 连接远程主机smtp主机的方法
    EMAIL_USE_TLS = True
    server.login("xxxxxxx@qq.com", "xxxxxxx")  # 远程smtp主机方法。引号中是帐号和授权码
    server.sendmail(FROM, [TO], BODY)  # 邮件发送
    server.quit()  # 断开smtp服务器
    print("Mail sent successfully")
    return 1

if __name__ == "__main__": #程序的入口
    while 1:
        main()
    # print("读取完毕")

参考文章:
Python中requests库POST应用总结
python实现原地刷新方式输出-可用于百分比进度显示输出
python中requests模拟登录的三种方式(携带cookie/session进行请求网站)
小白学爬虫(三)-- requests库之Cookie

最后修改:2021 年 07 月 12 日 09 : 13 PM
如果觉得我的文章对你有用,请随意赞赏

4 条评论

  1. lin

    1111

  2. 如梦令

    我怎么才能访问微信里面的链接啊,我·用你这个请求头,不行啊(╯‵□′)╯︵┴─┴,求助

    1. lin
      @如梦令

      把整个请求头都加上,cookie要最新获取的

      1. 如梦令
        @lin

        收到

发表评论