Python 每日提醒写博客小程序,使用pywin32、bs4库
用刚学的BeautifulSoup4库,结合pywin32库编写,请确保你已经安装好了相关库
BeautifulSoup官方文档:Beautiful Soup 4.4.0 文档
总共用时:1小时 (代码在最后面)
学习内容:死循环延迟调用方法,使用bs4库检索博客首页文章的日期是否与今天日期匹配,不匹配则说明今天没写文章,调用pywin32库进行弹窗提醒我写博客。
有待改进:其实这样while true,在win的系统下会一直有一个python进程在运行,占进程,而且每次开机都要运行,在Linux下是推荐每次调用python修改下一次crontab,在win下,用系统定时运行就可以了,不需要在py里计时,或者每次运行去修改下一次运行的时间的注册表,这样比较节省内存。(来自同学 Eakal 的提议)
修改参数:
host = "https://www.cnblogs.com/linxiaoxu" # ^ 博客园地址
after_time = 18 # ^ 过了下午六点才生效
count = 3 # ^ 一小时提醒几次

踩过的坑
1、Python 函数内如何修改外部全局变量
2、Python List index()函数
参数:
- x-- 查找的对象。
- start-- 可选,查找的起始位置。
- end-- 可选,查找的结束位置。
list.index(x[, start[, end]])
该方法返回查找对象的索引位置,如果没有找到对象则抛出异常。
3、Python中关于++和—(自增和自减)的理解
首先要知道的是,Python 中是没有 ++ 和 -- 的。那么要实现自增和自减的话,可以使用如下操作:
a = a + 1
或
a += 1
原因分析
我们知道, python中的数字类型是不可变数据。也就是数字类型数据在 内存 中是不会发生改变,当变量值发生改变时,会新申请一块内存赋值为新值,然后将变量指向新的内存地址。 实验如下:
>>> a = 10
>>> id(a)
140530470127960
>>> a += 1
>>> id(a)
140530470129080
可以看到当 a 的值发生改变时,a 指向的内存地址也发生了改变。而在C语言中,a 指向的内存地址并不会发生改变,而是改变内存的内容。
+= 是改变变量,相当于重新生成一个变量,把操作后的结果赋予这个新生成的变量。
++ 是改变了对象本身,而不是变量本身,即改变数据地址所指向的内存中的内容。
既然 Python 中的数字类型是不可变的,那何来的“自增”这么一说呢?
另外:
int 理论上是每次赋值都创建一个新对象的。但是由于使用频繁,为了提升性能避免浪费,所有 python 有个 整数池,默认 [-5, 256] 的数字都属于这个整数池,这些每次赋值的时候,是取得池中的整数对象。但是其他的除外,如下:
>>> a = 5
>>> b = 5
>>> id(a)
140530470128360
>>> id(b)
140530470128360
>>> a is b
True
>>> c = 257
>>> d = 257
>>> id(c)
140530470136432
>>> id(d)
140530470136408
但有时候在 Python 中看到存在 ++i 这种形式,这其实不是自增,只是简单的表示正负数的正号而已。正正得正,负负得正,所以 ++i 和 --i 都是 i 。
4、Python 调用win系统弹框提示
Python 调用win系统弹框提示_byliang502的博客-CSDN博客
win32api.MessageBox (mhammond.github.io)

5、Time时间库
Python基础时间库——time - 苦逼运维 - 博客园 (cnblogs.com)
Python库:time库_mulus的博客-CSDN博客_python time库
6、Win10自动运行Python脚本程序

- 管理->系统工具->任务计划程序->任务计划程序库,右键创建基本任务或者在窗口右侧点击创建基本任务。
进行设置,选择程序,即可
我的代码
# pip install pywin32 -i https://pypi.tuna.tsinghua.edu.cn/simple
import win32api
import win32con
import requests
import time
from bs4 import BeautifulSoup
host = "https://www.cnblogs.com/linxiaoxu" # ^ 博客园地址
after_time = 18 # ^ 过了下午六点才生效
count = 3 # ^ 一小时提醒几次
times = [] # ^ 统计首页日期
_count = 0 # ^ 统计函数运行次数
def FindLatestPost():
global _count
web = requests.get(host)
if web.status_code != 200:
print("网络异常", time.ctime())
return
web = BeautifulSoup(web.text, 'lxml')
dayTitles = web.find_all(class_="dayTitle")
for title in dayTitles:
times.append(title.a.string)
t = time.gmtime()
if t.tm_hour < after_time:
return
# t = time.strftime("%Y年%m月%d日", t) # ^ 月份会多一个 0
t = "{}年{}月{}日".format(t.tm_year, t.tm_mon, t.tm_mday)
# print(times, t)
try:
times.index(t) # ^ 或 if t in times:
except:
win32api.MessageBox(0, "博客还没有写!", "提醒小助手", win32con.MB_ICONWARNING)
finally:
_count += 1
print("FEEDBACK : 执行第", _count, "次", time.ctime())
print("提醒小助手被启用 ", time.ctime())
print("Author: xiaoneng / Blog: cnblogs.com/linxiaoxu")
while True:
time.sleep(3600/count)
FindLatestPost()
# ^ ++_count 不能用
点赞是一种积极的生活态度,喵喵喵!(疯狂暗示)
Python 每日提醒写博客小程序,使用pywin32、bs4库的更多相关文章
- 微信小程序--简约风博客小程序(基于云开发 - 全开源)
微信小程序--简约风博客小程序(基于云开发 - 全开源) 项目启动纯属突发奇想,想看看博客小程序,例如wehalo博客小程序,但是感觉自建平台还要浪费自己的服务器算力,还没有访问量,省省吧. 本着白嫖 ...
- 《REWORK》启示录 招聘笔杆子——程序员为什么值得写博客
Hire Great Writers 仿佛这是写给自己看的,不过这在其中也有着相当有趣的意义 .虽然自己算是一个能写的人,或许这算是一种不算才华的才华,写博文的意义通常不会在于去描述自己怎样,怎样.通 ...
- 象写程序一样写博客:搭建基于github的博客
象写程序一样写博客:搭建基于github的博客 前言 github 真是无所不能.其 Pages 功能 支持上传 html,并且在页面中显示.于是有好事者做了一个基于 github 的博客管理工具 ...
- Python爬取CSDN博客文章
0 url :http://blog.csdn.net/youyou1543724847/article/details/52818339Redis一点基础的东西目录 1.基础底层数据结构 2.win ...
- (转)[BetterExplained]为什么你应该(从现在开始就)写博客
(一)为什么你应该(从现在开始就)写博客 用一句话来说就是,写一个博客有很多好处,却没有任何明显的坏处.(阿灵顿的情况属于例外,而非常态,就像不能拿抽烟活到一百岁的英国老太太的个例来反驳抽烟对健康的极 ...
- [BetterExplained]为什么你应该(从现在开始就)写博客
(一)为什么你应该(从现在开始就)写博客 用一句话来说就是,写一个博客有很多好处,却没有任何明显的坏处.(阿灵顿的情况属于例外,而非常态,就像不能拿抽烟活到一百岁的英国老太太的个例来反驳抽烟对健康的极 ...
- 10 年 bloger 告诉你要不要写博客,又该如何优雅地写博客?
关于作者:程序猿石头(ID: tangleithu),现任阿里巴巴技术专家,清华学渣,前大疆后端 Leader.公众号后台回复关键字 "1024" 获取程序员大厂面试指南. 图:D ...
- 用Jekyll在github上写博客——《搭建一个免费的,无限流量的Blog》的注脚
本来打算买域名,买空间,用wordpress写博客的.后来问了一个师兄,他说他是用github的空间,用Jekyll写博客,说很多人都这么做.于是我就研究了一下. 比较有价值的文章有这么几篇: htt ...
- oracle DBA坚持写博客的7大理由
对于Oracle DBA来说,甚至IT技术人员来说.坚持写博客是个好习惯.以下是我建议大家写博客的七个理由. 帮助整理思路 最近我做出了一个决定,那就是: 我要坚持天天写博客,记录每天所学的重要东西. ...
随机推荐
- Android 12(S) 图形显示系统 - BufferQueue的工作流程(十)
题外话 疫情隔离在家,周末还在努力学习的我 ..... 一.前言 上一篇文章中,有基本讲清楚Producer一端的处理逻辑,最后也留下了一个疑问: Consumer是什么时候来消费数据的?他是自己主 ...
- mybatis——逆向工程中 where (条件1)and (条件2 or 条件3 or 条件4)
where (条件1)and (条件2 or 条件3 or 条件4) = where (条件1 and 条件2)or (条件1 and 条件3) or (条件1 and 条件4) 结果 是这样的 WH ...
- 想让DBA瞬间崩溃,那就让他去做SQL性能优化
摘要:很多大数据计算都是用 SQL 实现的,跑得慢时就要去优化 SQL,但常常碰到让人干瞪眼的情况. 本文分享自华为云社区<做 SQL 性能优化真是让人干瞪眼>,作者: 石臻臻的杂货铺 . ...
- python2,3的区别
python2和python3的区别: 1. python 2x:源代码不规范,源码重复多 python 3x:源码 清晰,简单,优美 2.python 2x:默认编码是ASCII码 编码更改: ...
- 6月12日 python学习总结 框架
1. 登录功能的实现 1. form表单提交数据的注意事项: 1. 是form不是from,必须要有method和action 2. 所有获取用户输入的表单标签要放在form表单里面,表单标签必须要有 ...
- python 发送POST请求
#博客地址:https://blog.csdn.net/qq_36374896 import urllib.request import urllib.parse url = "http:/ ...
- 绕过WAF进行常见Web漏洞利用
前言 本文以最新版安全狗为例,总结一下我个人掌握的一些绕过WAF进行常见WEB漏洞利用的方法. PS:本文仅用于技术研究与讨论,严禁用于任何非法用途,违者后果自负,作者与平台不承担任何责任 PPS:本 ...
- SpringMVC 和SpringBoot中的注解是如何起作用的,如何实现的
SpringMVC源码解读 - HandlerMapping - RequestMappingHandlerMapping初始化 https://www.cnblogs.com/leftthen/ ...
- 如何处理异形屏iphone X?
safe area: 默认放置在安全区域以避免遮挡, 但会压缩 在meta中添加viewport-fit=cover: 告诉浏览器要讲整个页面渲染到浏览器中,不管设备是圆角与否,这个时候会造成页面的元 ...
- Element-UI资源原型库
Element-UI v2.0.0版本 Axure和Sketch库: 链接:https://pan.baidu.com/s/1LdsEh8BKQBjcWBKV5yQilQ 提取码:1xqn