一、任务的记录与提取

1.1 制作每日任务

  为了便于爬取,推荐使用网页版的在线记事本,现在这种工具很多,我选择“石墨文档”进行操作演示。记录内容的 格式可以根据自己的需求和爬虫自行确定,例如我在11月20日之前记录了一份以下样式的任务清单:
  01月08日 6:30 起床
  01月08日 8:00 上班
  01月08日 11:30 吃饭
  01月08日 4:30 下班
  01月08日 18:00 学习python

1.2 爬取任务信息

.  模拟登陆使用爬虫来实现待办事项的提取,发现在线记事本是需要登录的,这里用selenuim进行模拟登陆
然后从代办事项的文档中获取之前编辑好的代办事项(注意编辑待办事项的格式方便爬取)

二、信息推送给微信

2.1 获取server酱SCKEY

  说到推送信息到微信,不得不介绍一个很方便的工具——server酱。说的简单一点,server酱就是一款能向目标微信账号发送信息的工具,她最大的有点就是功能简单、使用方便、轻量,使用server酱只需下面几个步骤:
  登入: 用GitHub账号登入网站,获得自己的SCKEY。
  绑定: 通过微信扫码关注完成绑定。
  发消息: 往 http://sc.ftqq.com/SCKEY.send 发GET请求,就可以在微信里收到消息。
  另外,server酱还提供了网页版的在线发送工具,可以进行体验和测试。值得一提的是,server酱的初始目的是通过手机监测服务器报警和日志,因此为避免程序出错,限制了每人每天发 送上限500条,相同内容5分钟内不能重复发送,不同内容一分钟只能发送30条。对于本系统来说,这个数据上限 绝对绰绰有余了。

2.2 定时任务与检测

  现在我们需要设置一个定时任务,这里使用APScheduler来实现。APScheduler是基于Quartz的一个python定时任务框架,提供了若干种类的调度器,由于我们的定时任务进在当前进程中执行,所以选择BlockingScheduler调度器,然后通过add_job来动态增加待执行的任务。
关于APScheduler,其实并不需要了解太多,因为它的基本用法非常简单
现在还有一个问题,就是要保证我们的程序始终处于正常运行的状态,上面说过,server酱通过向目标URL发送get请求的方式推送信息,而这个get请求是有返回值的,其格式为“{'errno': 0, 'errmsg': 'success', 'dataset': 'done'}”,其中若errno为0则表示发送成功,否则会在errmsg中给出错误信息。基于此,我们可以依托logging模块记录程序每天的运行状态

具体代码如下:

import requests
import logging
from selenium import webdriver
from lxml import etree
from selenium.webdriver.common.action_chains import ActionChains
from apscheduler.schedulers.blocking import BlockingScheduler class Memorandum():
# 第一步获取石墨文档代办事项的文档
def get_docs(self):
user = '******' #这里是石墨文档的账号
pwd = '******' #这里是石墨文档的密码
browser = webdriver.Chrome()
browser.implicitly_wait(4) #隐试延迟4秒,是全局作用只需写一次
browser.get("https://shimo.im/login") # 清空输入框的内容然后输入自己的账号密码
browser.find_element_by_xpath('//*[@id="root"]/div/div[1]/div[1]/div/div/div[2]/div[1]/div[1]/div/input').clear()
browser.find_element_by_xpath('//*[@id="root"]/div/div[1]/div[1]/div/div/div[2]/div[1]/div[1]/div/input').send_keys(user)
browser.find_element_by_xpath('//*[@id="root"]/div/div[1]/div[1]/div/div/div[2]/div[1]/div[2]/div/input').clear()
browser.find_element_by_xpath('//*[@id="root"]/div/div[1]/div[1]/div/div/div[2]/div[1]/div[2]/div/input').send_keys(pwd)
browser.find_element_by_xpath('//*[@id="root"]/div/div[1]/div[1]/div/div/div[2]/div[1]/button').click()
# 点击我的桌面
a = browser.find_element_by_xpath('//*[@id="root"]/div/div[2]/div[1]/div[1]/a[2]')
ActionChains(browser).double_click(a).perform()
# 点击待办事项
b = browser.find_element_by_xpath('/html/body/div[1]/div/div[2]/div[2]/div/div[1]/div[2]/div[2]/div[1]/div/div/div/div[2]/div/div/a/div[1]')
ActionChains(browser).double_click(b).perform()
html = etree.HTML(browser.page_source)
content = html.xpath('//div[@class="ql-editor"]/p/span/text()')
browser.close()
return content def judge_date(self,content):
# 获取当天的时间 格式为 (02月08日)
today = datetime.date.today().strftime("%m-%d").replace("-","月")+"日"
print(today)
today_task = []
for i in content:
# print(i.split(" ")[0])
if i.split()[0]== today:
today_task.append(''.join(i.split()[1:]))
print(today_task)
return today,' \n'.join(today_task) def send_mssg(self,today,messg):
api = "https://sc.ftqq.com/SCU38773T7f2756aae48b772e8366c458fa535ff15c301c5bf3189.send"
title = today +"代办事项"
content = messg
data = {
"text": title,
"desp": content
}
req = requests.post(api, data=data) logging.basicConfig(filename='log.log', format='%(asctime)s:%(message)s', level=logging.INFO)
if req.json()['errno'] == 0:
logging.info('发送成功')
else:
logging.warning('发送失败 %s' % req.json()['errmsg'])
# 定时任务
def timing_task(self):
content = self.get_docs()
today , messg = self.judge_date(content)
scheduler = BlockingScheduler()
scheduler.add_job(func=self.send_mssg,args=(today,messg,),trigger='cron', day_of_week='0-6', hour=16, minute=25, end_date='2019-10-02')
scheduler.start() if __name__=="__main__":
m = Memorandum()
m.timing_task()
# c = m.get_docs()
# print(c)
# m.judge_date(c)

下面是效果图:

python爬虫加定时任务,制作微信提醒备忘录的更多相关文章

  1. Python爬虫之模拟登录微信wechat

    不知何时,微信已经成为我们不可缺少的一部分了,我们的社交圈.关注的新闻或是公众号.还有个人信息或是隐私都被绑定在了一起.既然它这么重要,如果我们可以利用爬虫模拟登录,是不是就意味着我们可以获取这些信息 ...

  2. 从Python爬虫到SAE云和微信公众号:二、新浪SAE上搭建微信服务

    目的:用PHP在SAE上搭建一个微信公众号的服务器. 1.申请一个SAE云账号 SAE申请地址:http://sae.sina.com.cn/  可以使用微博账号登陆,SAE是新浪的云服务,时间也比较 ...

  3. Python爬虫学习笔记之微信宫格验证码的识别(存在问题)

    本节我们将介绍新浪微博宫格验证码的识别.微博宫格验证码是一种新型交互式验证码,每个宫格之间会有一条 指示连线,指示了应该的滑动轨迹.我们要按照滑动轨迹依次从起始宫格滑动到终止宫格,才可以完成验证,如 ...

  4. Spider-Python实战之通过Python爬虫爬取图片制作Win7跑车主题

    1. 前期准备 1.1 开发工具 Python 3.6 Pycharm Pro 2017.3.2 Text文本 1.2 Python库 requests re urllib 如果没有这些Python库 ...

  5. 零基础写python爬虫之使用Scrapy框架编写爬虫

    网络爬虫,是在网上进行数据抓取的程序,使用它能够抓取特定网页的HTML数据.虽然我们利用一些库开发一个爬虫程序,但是使用框架可以大大提高效率,缩短开发时间.Scrapy是一个使用Python编写的,轻 ...

  6. python爬虫24 | 搞事情了,用 Appium 爬取你的微信朋友圈。

    昨天小帅b看到一些事情不顺眼 有人偷换概念 忍不住就写了一篇反讽 996 的 看不下去了,我支持996,年轻人就该996! 没想到有些人看不懂 这就算了 还来骂我 早些时候关注我的小伙伴应该知道我第一 ...

  7. Python爬虫实例:爬取B站《工作细胞》短评——异步加载信息的爬取

    很多网页的信息都是通过异步加载的,本文就举例讨论下此类网页的抓取. <工作细胞>最近比较火,bilibili 上目前的短评已经有17000多条. 先看分析下页面 右边 li 标签中的就是短 ...

  8. Python爬虫开源项目代码,爬取微信、淘宝、豆瓣、知乎、新浪微博、QQ、去哪网等 代码整理

    作者:SFLYQ 今天为大家整理了32个Python爬虫项目.整理的原因是,爬虫入门简单快速,也非常适合新入门的小伙伴培养信心.所有链接指向GitHub,祝大家玩的愉快 1.WechatSogou [ ...

  9. 23个Python爬虫开源项目代码,包含微信、淘宝、豆瓣、知乎、微博等

    今天为大家整理了23个Python爬虫项目.整理的原因是,爬虫入门简单快速,也非常适合新入门的小伙伴培养信心,所有链接指向GitHub,微信不能直接打开,老规矩,可以用电脑打开. 关注公众号「Pyth ...

随机推荐

  1. L3-015. 球队“食物链”【DFS + 剪枝】

    L3-015. 球队"食物链" 时间限制 1000 ms 内存限制 262144 kB 代码长度限制 8000 B 判题程序 Standard 作者 李文新(北京大学) 某国的足球 ...

  2. 前端接收后端文件流导出excel文档遇到的问题

    先上代码: Vue.prototype.download = function(oUrl, filename) { this.axios .get(oUrl, { responseType: 'arr ...

  3. MathJax TeX & LaTeX

    MathJax TeX & LaTeX mathcal https://leetcode-cn.com/problems/binary-search/solution/er-fen-cha-z ...

  4. set CSS style in js solutions All In One

    set CSS style in js solutions All In One css in js set each style property separately See the Pen se ...

  5. Web Components All In One

    Web Components All In One Web Components https://www.webcomponents.org/ HTML Template Custom Element ...

  6. 算法的时间复杂度 & 性能对比

    算法的时间复杂度 & 性能对比 累加算法性能对比 // js 累加算法性能对比测试 const n = 10**6; (() => { console.time(`for`); let ...

  7. Google Meet & gmail & video conference

    Google Meet & gmail & video conference Conv-2019 & live stream Google Meet https://meet. ...

  8. 初学c++,vc++6.0必备!

    文章首发 | 公众号:lunvey 作为一个纯粹的萌新,工作需要,刚接触到c++. 按照以往的经验,配置一个开发环境是首要的,其次便是边学边敲. c++入门书籍寻找了一堆,发现了一个共同点,在Wind ...

  9. js中国标准时间转换成datetime格式

    var format = function (time, format) { var t = new Date(time); var tf = function (i) { return (i < ...

  10. EF多个表映射

    public class Media // One entity table { public int Id { get; set; } public string Name { get; set; ...