使用Python做定时任务及时了解互联网动态


Posted in Python onMay 15, 2019

前言

本人因为比较喜欢看漫画和动漫, 所以总会遇到一些问题, 因为订阅的漫画或者动漫太多, 总会忘记自己看到那一章节或者不知道什么时候更新. 故会有这么一个需求, 想记录自己想看的漫画或动画并在其更新的时候第一时间知道,

当然, 你可以拓展到任何你想关注的, 都可以通过邮件及时推送.

思路

使用Python做定时任务及时了解互联网动态

使用Python做定时任务及时了解互联网动态

目录

使用Python做定时任务及时了解互联网动态

运行环境

  • Python3.6
  • 第三方库
fake-useragent==0.1.11
pyquery==1.4.0
requests==2.21.0
pip3 install -r requirements.txt -i http://pypi.douban.com/simple

实现

获取全部代码, 请移步:Github

git clone https://github.com/Amd794/Checkupdate.git

邮件发送

需要用到smtplib发送邮件和email构造邮件.

SMTP是发送邮件的协议,Python内置对SMTP的支持,可以发送纯文本邮件、HTML邮件以及带附件的邮件。

下面来构造一封完整的邮件, 首先导入需要用到的方法或类:

from email import encoders
from email.header import Header
from email.mime.text import MIMEText
from email.utils import parseaddr, formataddr
import smtplib

然后, 我们先构造好头部,  工欲善其事,必先利其器

# 发送人
from_name = 'Amd794'
# 发送人邮箱
from_addr = '2952277346@qq.com'
# 发送人密码
password = '你的密码'
# 收件人
to_name = 'Your'
# 收件人邮箱
to_addr = '2952277346@qq.com'
# 邮箱服务
smtp_server = 'smtp.qq.com'

这里用到QQ的SMTP服务, 你也可以换成你喜欢的, 比如163, Google 等, 自选

但是你必须开启邮箱的SMTP服务, 下面来介绍下QQ邮箱打开服务的方法

你需要登录你的qq邮箱账号,  https://mail.qq.com/

使用Python做定时任务及时了解互联网动态

登录后, 点击设置

使用Python做定时任务及时了解互联网动态 

然后点击账户

使用Python做定时任务及时了解互联网动态 

滑动滚轮, 找到如下所示, 我是已经开了, 你只需要点击开启, 然后按说明一步一步就行

使用Python做定时任务及时了解互联网动态 

然后再点击生成授权码, 将得到的密码, 填到上面的password 字段

使用Python做定时任务及时了解互联网动态 使用Python做定时任务及时了解互联网动态

这样, 头部就构造好了

然后, 构造发送体

def _contact(self, msg, from_addr, to_addr, title):
  msg['From'] = self._format_addr('%s <%s>' % (from_name, from_addr))
  msg['To'] = self._format_addr('%s <%s>' % (to_name, to_addr))
  msg['Subject'] = Header(title, 'utf-8').encode()
msg = MIMEText(content, 'plain', 'utf-8')
_contact(msg, from_addr, to_addr, title)

发送邮件

server = smtplib.SMTP(smtp_server, 25)
server.set_debuglevel(1)
server.login(from_addr, password)
server.sendmail(from_addr, [to_addr], msg.as_string())
server.quit()

发送成功

使用Python做定时任务及时了解互联网动态

更新检测

思路是通过, 获取云端数据 然后 通过与本地缓存 对比, 得到更新情况

构造本地数据, 自定义自己想要订阅的漫画, 格式 平台-名称-链接

# 支持平台 漫画台, 土豪漫画, 腾讯漫画,腾讯视频 对应 Manhuatai Tohomh123 TencentComic TencentVedio
ComecDict = {
  'Manhuatai-武动乾坤': 'https://www.manhuatai.com/wudongqiankun',
  'Manhuatai-斗破苍穹': 'https://www.manhuatai.com/doupocangqiong',
  'Tohomh123-妖神记': 'https://www.tohomh123.com/yaoshenji/',
  'Manhuatai-大主宰': 'https://www.manhuatai.com/dazhuzai',
  'TencentComic-海贼王': 'https://ac.qq.com/Comic/comicInfo/id/505430',
  'Tohomh123-全职法师': 'https://www.tohomh123.com/quanzhifashi/',
  'Tohomh123-永恒至尊': 'https://www.tohomh123.com/yonghengzhizun/',
  'TencentVedio-万界神主': 'https://v.qq.com/x/cover/y0jueuihog64xhb/j0030ajsgq9.html',
  'TencentVedio-斗罗大陆': 'https://v.qq.com/x/cover/m441e3rjq9kwpsc/r0030jqn37g.html',
  'TencentVedio-狐妖小红娘': 'https://v.qq.com/x/cover/0sdnyl7h86atoyt.html',
  'TencentVedio-万界仙踪 第2季' : 'https://v.qq.com/x/cover/7s65u4bg66so7e6/y0030u40wuu.html',
  'TencentVedio-天行九歌' : 'https://v.qq.com/x/cover/rm3tmmat4li8uul/w0030phkr6h.html',
}

最后检测实现, 部分代码:

def main():
  # 支持的平台
  paltfromList = {
    'Manhuatai': Manhuatai, # 漫画台
    'TencentComic': TencentComic, # 腾讯动漫平台
    'Tohomh123': Tohomh123, # 土豪漫画平台
    'TencentVedio': TencentVedio, # 腾讯视频
  }
  with open('datas.json', encoding='utf-8') as fr: # 读取本地漫画状态
    datas = json.load(fr)
  for key, value in ComecDict.items():
    try:
      paltfrom, key = key.split('-')
      obj = paltfromList.get(paltfrom)().run(value) # 获取漫画最新更新状态
      if obj:
        content, url = obj
        new_data = content # 最新章节数据
        old_data = datas.get(key, None) # 本地章节数据
        if old_data != new_data: # 判断是否有更新
          datas[key] = content # 更新本地章节
          with open('template.html', encoding='utf-8') as f:
            tx = f.read().format(url=url, new_data=new_data, old_data=old_data) # 构造邮件内容
          SendEmail(content=tx, title='{key} 更新通知'.format(key=key),
               emtype='htmlcontent').sendEmail() # 发送邮件, 推送更新
          with open('datas.json', 'w', encoding='utf-8') as fw: # 存储更新后的状态
            json.dump(datas, fw, ensure_ascii=False, indent=4, separators=(', ', ': '))
        else:
          print('\033[22;35;m {} \033[m 暂无更新, 当前章节: \033[22;35;m {} \033[m'.format(key, old_data))
    except TypeError:
      print('检测{key}失败, 该平台没有{key}, 或者平台配置有误'.format(key=key))
    except Exception:
      SendEmail(content=traceback.format_exc(),
           title='获取 {key} 时脚本异常通知'.format(key=key)).sendEmail() # 发送邮件, 脚本异常

最终效果

使用Python做定时任务及时了解互联网动态

使用Python做定时任务及时了解互联网动态

总结

以上所述是小编给大家介绍的使用Python做定时任务及时了解互联网动态,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
python爬取NUS-WIDE数据库图片
Oct 05 Python
python+selenium打印当前页面的titl和url方法
Jun 22 Python
pytorch 调整某一维度数据顺序的方法
Dec 08 Python
python用opencv批量截取图像指定区域的方法
Jan 24 Python
Python一个简单的通信程序(客户端 服务器)
Mar 06 Python
Python Django框架实现应用添加logging日志操作示例
May 17 Python
Python3批量生成带logo的二维码方法
Jun 24 Python
详解python和matlab的优势与区别
Jun 28 Python
Python判断字符串是否xx开始或结尾的示例
Aug 08 Python
python 画出使用分类器得到的决策边界
Aug 21 Python
python线性插值解析
Jul 05 Python
Python用access判断文件是否被占用的实例方法
Dec 17 Python
Python使用统计函数绘制简单图形实例代码
May 15 #Python
详解Python3 对象组合zip()和回退方式*zip
May 15 #Python
python语言元素知识点详解
May 15 #Python
django admin后台添加导出excel功能示例代码
May 15 #Python
Python中单线程、多线程和多进程的效率对比实验实例
May 14 #Python
Dlib+OpenCV深度学习人脸识别的方法示例
May 14 #Python
Python发展简史 Python来历
May 14 #Python
You might like
PHP 判断常量,变量和函数是否存在
2009/04/26 PHP
解决更换PHP5.4以上版本后Dedecms后台登录空白问题的方法
2015/10/23 PHP
window.open的功能全解析
2006/10/10 Javascript
JQuery与iframe交互实现代码
2009/12/24 Javascript
Dom在ajax技术中的作用说明
2010/10/25 Javascript
javascript window.open打开新窗口后无法再次打开该窗口问题的解决方法
2014/04/12 Javascript
简述AngularJS的控制器的使用
2015/06/16 Javascript
Bootstrap精简教程
2015/11/27 Javascript
jQuery Dialog 取消右上角删除按钮事件
2016/09/07 Javascript
AngularJS过滤器filter用法实例分析
2016/11/04 Javascript
BootStrap 模态框实现刷新网页并关闭功能
2017/01/04 Javascript
django使用channels2.x实现实时通讯
2018/11/28 Javascript
Vue加载json文件的方法简单示例
2019/01/28 Javascript
vue动态添加路由addRoutes之不能将动态路由存入缓存的解决
2019/02/19 Javascript
vue实现搜索过滤效果
2019/05/28 Javascript
微信小程序实现图片选择并预览功能
2019/07/25 Javascript
解决vue项目input输入框双向绑定数据不实时生效问题
2020/08/05 Javascript
将Python的Django框架与认证系统整合的方法
2015/07/24 Python
Python安装第三方库及常见问题处理方法汇总
2016/09/13 Python
使用Python对Access读写操作
2017/03/30 Python
Django与JS交互的示例代码
2017/08/23 Python
解决pip install的时候报错timed out的问题
2018/06/12 Python
python实现银行管理系统
2019/10/25 Python
tensorflow获取预训练模型某层参数并赋值到当前网络指定层方式
2020/01/24 Python
Linux安装Python3如何和系统自带的Python2并存
2020/07/23 Python
django下创建多个app并设置urls方法
2020/08/02 Python
Python 利用argparse模块实现脚本命令行参数解析
2020/12/28 Python
解决pycharm修改代码后第一次运行不生效的问题
2021/02/06 Python
西班牙伏林航空公司:Vueling
2016/08/05 全球购物
香港万宁官方海外旗舰店:香港健与美连锁店
2018/09/27 全球购物
为什么group by 和order by会使查询变慢
2014/05/16 面试题
语文教学随笔感言
2014/02/18 职场文书
《三袋麦子》教学反思
2014/03/02 职场文书
田径运动会通讯稿
2014/09/13 职场文书
小学生2015教师节演讲稿
2015/03/19 职场文书
投标售后服务承诺书
2015/04/29 职场文书