推广 热搜: csgo  vue  angelababy  2023  gps  新车  htc  落地  app  p2p 

Python 3 编写简单爬虫——查询宿舍剩余电量

   2023-07-20 网络整理佚名1640
核心提示:这里应该是需要模拟手机打开这个页面,了解到需要加入请求,于是:2)判断,定时执行上面编写好的查询模块找到一个定时执行的例子由于暂时没有云服务器,也只是大一用过一两次,之后学习中再把脚本放在云服务器上(希望不是很久,毕竟要毕业了,没必要查电了。找到发送邮件的例子,于是拿过来测试:运行2)步骤编写的自动运行代码,去掉判断语句,成功发送邮件手机微信开通了邮件接收,顺利接收到电量数据

(),按照前面的方法,开始请求html:

import re
import requests
def get_html():
    url='http://pay.hsej.net/SignUp/Dormitory/EnergyRoomPay.aspx?data=22c8f65duY3VGh4Rwg8TyxexnQltb8nxxY7iM6W%2fHLZbm3ZwgMc%3d'
    req = request.Request(url)
    r = request.urlopen(req)
    html = r.read()
    html = str(html, encoding='UTF-8')
    print(html)

找到的输出是:

请求异常,请稍后再试 #之后是包含js的空白页面代码

这里应该是需要通过模拟手机来打开这个页面,并且明白需要添加一个请求,所以:

import re
import requests
def get_html():
    url='http://pay.hsej.net/SignUp/Dormitory/EnergyRoomPay.aspx?data=22c8f65duY3VGh4Rwg8TyxexnQltb8nxxY7iM6W%2fHLZbm3ZwgMc%3d'
    pattern = '([\s\S]*?)'
    headers = {
        'Host': 'pay.hsej.net',
        'Connection': 'keep-alive',
        'User-Agent': 'Mozilla/5.0 (Linux; Android 7.1.2;XXXXXXXX',
        #上面一部分代码用XX代替了,如果测试需要可以自行修改
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
        'Referer': 'http://www.hsej.net/app/thirdparty/payorder?needLogin=1&target=http%3A%2F%2Fpay.hsej.net%2FSignUp%2FIndex&c=rRaDxC2Jdtc=&u=1Pj5IWQtkeg=&p=oTU7yIMCKx7mwWtrHagi/A==&ut=1&ct=56&token=QXaY9rWroKIMvazwf1OMAgMPphBvWsr%2Fy7IGAHLJeQgzsH1508Y85dIfbofhiWsyVr0ibHtF5qjk%0AzmHv3WsMBRKIJWJ2ldyCgYXo9iBqve%2F0EJBaOZ%2F7%2Bg%3D%3D',
        'Accept-Encoding': 'gzip, deflate',
        'Accept-Language': 'zh-CN,en-US;q=0.9',
        'cookie': 'ASP.NET_SessionId=dy3zvvtjztapzbybc11rdlbc',
        'X-Requested-With': 'com.zhuochuang.hsej'
    }
    html = requests.get(url,headers = headers).text
    html = re.findall(pattern, html)
    print(html)
get_html()

获取列表类型的数据:

['4.51']

2)判断,定时执行上面写的查询模块

找一个定时执行的例子

添加判断语句

# coding:utf8
# https://blog.csdn.net/t8116189520/article/details/78832548
import datetime
import time
import send_email
def doSth():
    # 把爬虫程序放在这个类里
    send_email.sendEmail() 
    print(u'这个程序要开始疯狂的运转啦')
# 一般网站都是1:00点更新数据,所以每天凌晨一点启动
def main(): # h=1, m=0
    while True:
        # now = datetime.datetime.now()
        # # print(now.hour, now.minute)
        # if now.hour == h and now.minute == m:
        #     break
        # # 每隔60秒检测一次
        time.sleep(30)
        if send_email.power < 2.00:
            print('电量不足')
            doSth()
        else:
            print('电量充足')
main()

3)提醒方式

以下是一些提醒:

 1. 发送短信
 2. 微信公众号提醒
 3. 发送邮件

由于暂时没有云服务器,所以大一的时候只用过一两次,然后学习的时候就把脚本放到了云服务器上(希望不要太久,毕竟要毕业了,所以不用检查电了。不过弟弟妹妹们可以用...)

我找到了一个发送邮件的例子,于是拿来测试一下:

# https://blog.csdn.net/sunhuaqiang1/article/details/70833199
import smtplib
from email.header import Header
from email.mime.text import MIMEText
import hsej_get_power
# 第三方 SMTP 服务
mail_host = "smtp.qq.com"      # SMTP服务器
mail_user = "1006953367@qq.com"                  # 用户名
mail_pass = "XXXXXXXXXX"               # 授权码,非登录密码
sender = '1006953367@qq.com'    # 发件人邮箱(最好写全, 不然会失败)
receivers = 'XXXXXXXX@qq.com'  # 接收邮件,可设置为你的QQ邮箱或者其他邮箱
#复制过来的代码修改了下面这里
power = eval(hsej_get_power.get_html()[0]) # 转换成float类型
content = str(power)
title = '剩余电量'  # 邮件主题
def sendEmail():
    message = MIMEText(content, 'plain', 'utf-8')  # 内容, 格式, 编码
    message['From'] = "{}".format(sender)
    message['To'] = ",".join(receivers)
    message['Subject'] = title
    try:
        smtpObj = smtplib.SMTP_SSL(mail_host, 465)  # 启用SSL发信, 端口一般是465
        smtpObj.login(mail_user, mail_pass)  # 登录验证
        smtpObj.sendmail(sender, receivers, message.as_string())  # 发送
        print("mail has been send successfully.")
    except smtplib.SMTPException as e:
        print(e)
# if __name__ == '__main__':
#     sendEmail()
    # receiver = '***'
    # send_email2(mail_host, mail_user, mail_pass, receiver, title, content)

4)最终测试

运行步骤2)中编写的自动运行代码,去掉判断语句,发送邮件成功

手机微信已开启邮件接收,电池数据已成功接收。

4.51...是否充电,我不开空调...

再次在csdn博客上发表了我不成熟的学习经历。 我知识有限,希望自己能在未来有所作为。

 
反对 0举报 0 收藏 0 打赏 0评论 0
 
更多>同类资讯
推荐图文
推荐资讯
点击排行
Powered By DESTOON