一、任务的记录与提取

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. Leetcode(19)-删除链表的倒数第N个节点

    给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点. 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点后,链表变为 ...

  2. P2P协议初步

    今天看到一个问题,如何把一个文件快速下发到100w个服务器 如果我们将文件集中式地放在一个服务器或缓存上的话,带宽.连接都会遇到问题. 树状:        1. 每个服务器既具有文件存储能力也应具有 ...

  3. C# Arrays

    Arrays 数组是一系列items 的集合,可以进行各种操作,比如sorting等 定义方式: 数据类型[] 数组名; 使用之前需要实例化,这就是实例化了一个含有2个元素的string 数组 还记得 ...

  4. HBuilderX All In One

    HBuilderX All In One uni-app https://uniapp.dcloud.io/quickstart-hx 目录结构 一个uni-app工程,默认包含如下目录及文件: $ ...

  5. HTML5 动效

    HTML5 动效 motion graphics toolbelt for the web https://github.com/xgqfrms/mojs A collection of loadin ...

  6. Dart Web

    Dart Web Dart for Web https://dart.dev/platforms dart2js xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允 ...

  7. push notifications

    push notifications https://developers.google.com/web/fundamentals/push-notifications/ Push API https ...

  8. 解析js字符串

    myEval export const evalExp = /[!\&\|\+\-\*\%=\/<\>\^\(\)\~\:\?\;]/g; export function myEv ...

  9. Flutter ReorderableListView 可拖拽的列表

    import 'package:flutter/material.dart'; import 'dart:math' as math; void main() => runApp(MyApp() ...

  10. NGK全球行伦敦站,SPC推动全球数字金融创新

    近日,NGK全球巡回路演在英国的首都伦敦盛大落幕,此次路演有幸邀请到了西欧区块链业界弗洛伊德大咖,NGK方面代表鲍利斯以及英国及其组周边国家社群意见代表马丁内斯等人,总计参与人数达到了数十人. 路演一 ...