爬取微博热搜并发送提醒(邮件和server酱)

写在前面

今天在CSDN看到了一篇爬取微博热搜并发邮件的博客,但是我在将其部署到腾讯云函数时出现了错误,于是使用server酱推送到微信,效果看起来还不错,废话不多说,上代码!

用到的包

# -*- coding: utf-8 -*-
"""
Created on Thu Aug  6 18:09:58 2020

@author: 勇敢自由
"""
#请在cmd下使用pip install requests命令安装依赖
import requests
import re
import datetime
#以下三个包用于发送邮件,非第三方包,无需使用pip安装
#如果不使用邮件提醒,可以注释掉
import smtplib
from email.mime.text import MIMEText
from email.header import Header

全局变量

#定义一个请求头...尊重一下你要爬的网站
headers = {
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.116 Safari/537.36'
        }
#获取日期
date = datetime.datetime.now().strftime('%Y-%m-%d')
#server酱秘钥,请到sc.ftqq.com按提示获取
SCKEY = ''

爬取数据

#爬取微博热搜数据
def Weibo_Spider():
	#初始化contents字符串,用于邮箱提醒
	#contents = '' 
    #初始化contents字符串,并写入日期,用于server酱
    contents = '> 今天是' + date + '\n\n'
    #微博热搜地址
    url = 'https://s.weibo.com/top/summary'
    #使用requests读取目标url
    response = requests.get(url,headers = headers)
    response.encoding = response.apparent_encoding
    #如果返回值不是200,可能你小子的ip被封了....
    if response.status_code == 200:
        res = response.text
		#当然你也可以看看返回的是什么...
		#print(res)
    else:
        print('error')
    #正则匹配我们想要的数据
    pattern_title = re.compile('<a\shref="/weibo?.*?">(.*?)<')
    titles = re.findall(pattern_title,res)
    pattern_href = re.compile('<a\shref="(/weibo?.*?)".*?<')
    hrefs = re.findall(pattern_href,res)
    #尝试捕捉异常
    try:
        #如果titles与href数量不一致,嗯。。。不管它!
        if len(titles) != len(hrefs):
            print('可能有一点小小的error')
        #配置contents字符串
        for i in range(len(titles)):
            title = titles[i]
            href = 'https://s.weibo.com' + hrefs[i]
            #使用邮箱时请取消注释,使用server酱时请注释掉
            #content = title + '\n' + href + '\n\n'
            #server酱支持Markdown格式,使用邮箱时请注释掉
            content = '#####' + title + '\n' + '[点击查看详情](' + href + ')\n\n'
            contents += content
        #返回contents字符串
        return contents
    except:
        pass

发送邮件

#用于发送邮件的函数            
def send_email(contents):
    #配置邮箱host,没有163邮箱的用QQ邮箱也可以
	#mailhost = 'smtp.qq.com'
    mailhost = 'smtp.163.com'
    mail = smtplib.SMTP()
    #通过25端口连接host
    mail.connect(mailhost,25)
    #在这里写入你的邮箱
    sender = ''
    #SMTP/IMAP授权码,去个人邮箱中开启,请勿使用邮箱密码
    password = ''
    #收件人,可以与sender一致,也就是自己给自己发邮件
    receiver = ''
    
    mail.login(sender, password)
    #邮件内容
    news = contents
    message = MIMEText(news,'plain','utf-8')
    #邮件标题
    subject = '今日热搜'
    message['Subject'] = Header(subject,'utf-8')
    #尝试捕捉error
    try:
    	#如果在这里报错就把host换成QQ邮箱
        mail.sendmail(sender,receiver,message.as_string())
        print('邮件发送完毕')
    except Exception as e:
        print('邮件发送失败\n' + e)
    mail.quit()

开始任务

def run():
    print('开始推送')
    #server酱标题,不可缺省
    title = '今日热点已经送达'
    #调用函数获取热搜信息
    content = Weibo_Spider()
    #将数据整理成一个字典
    msg = {
        '标题':title,
        '内容':content
    }
    #server酱推送到微信
    push(SCKEY,msg)
    #发送邮件,部署到腾讯云时尽量不要使用,经常调用失败
    #send_email(content)
    print(date + '任务完成')

发起推送

其中SCKEY需要到方糖获取。

def push(SCKEY,msg):
    if SCKEY.isspace() or len(SCKEY) == 0:
        return
    else:
        api = "https://sctapi.ftqq.com/" + SCKEY + '.send'
        title = msg["标题"]
        content = msg["内容"]
        data = {
            "text":title,
            "desp":content
            }
        requests.post(url = api,data = data)

入口函数

#本地入口函数,如果使用腾讯云请删除或注释掉
if __name__ == '__main__':
    run()
    
#腾讯云入口函数,此时还请不要使用邮件功能
"""def main_handler(event,context):
    run()
    return("Success")"""

定时提醒

1:使用微信扫码登录腾讯云
2:点击新建,输入函数名称,运行环境选择python3.6,创建方式选择空白函数
3:清空index.py原有内容,并贴入本文代码,取消末尾入口函数的注释
4:点击下方保存并测试,如果调用成功,你将在返回结果中看到“success”,并且收到微信提醒
5:在下方高级设置里,将内存修改为64MB,超时时间修改为900,点击完成
6:创建触发器,触发方式选择定时触发,cron表达式参考:

0 0 18 * * * * 

分别代表秒、分、时、日、月、星期、年,参考式代表的是每天下午6点。

注意事项

1:请勿在五分钟内通过server酱推送相同信息,不然无法收到提醒
2:每天调用尽量不要超过500次,被封的话可以捐赠server酱或者重新注册一个github…

结果展示

在这里插入图片描述
在这里插入图片描述

请参考以下内容

知乎:十条简明的Markdown格式
CSDN:爬取微博热搜+定时发送邮件

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值