当前位置 博文首页 > 一条IT:【python实战】不玩微博,一封邮件就能知道实时热榜,天

    一条IT:【python实战】不玩微博,一封邮件就能知道实时热榜,天

    作者:[db:作者] 时间:2021-08-03 12:43

    ??欢迎订阅《从实战学python》专栏,用python实现办公自动化、数据可视化、人工智能等各个方向的实战案例,有趣又有用!??

    更多精品专栏简介点这里

    有的人金玉其表败絮其中,有的人却若彩虹般绚烂,怦然心动

    前言

    哈喽,大家好,我是一条。

    在生活中我是一个不太喜欢逛娱乐平台的人,抖音、快手、微博我手机里都没装,甚至微信朋友圈都不看,但是自从开始写博客,有些热度不得不蹭。

    所以就有了这样一个需求,能不能让微博主动把热榜推给我呢?肯定是不行,微博又不是我家开的,怎么办呢?

    人生苦短,我用python。方案如下:

    • 每隔一小时爬取一次微博热榜
    • 将热榜内容通过邮件推送给我

    话不多说,开干

    爬取热榜

    微博的热榜并没有登录验证,操作起来比较简单,一个请求过去,然后解析html就行了。

    以前我们都是用xpath解析,今天带大家体验一下BeautifulSoup

    url

    热榜url:http://s.weibo.com/top/summary

    请求参数:

    data = {
        'cate': 'realtimehot'
    }
    
    

    请求headers

    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
    }
    

    解析网页

    mac快捷键alt+command+i打开开发者工具

    image-20210802202211916

    定位到热榜所在的<div>里,发现热度和热榜内容都位于<a>标签。一条热榜是一个<tr>

    分析完这些,我们就可以解析网页了。

    code

    def get_content():
        try:
            res = requests.get('http://s.weibo.com/top/summary?', params=data, headers=headers)
            if res.status_code == 200:
                html = res.text
                soup = BeautifulSoup(html, 'lxml')
                tr = soup.find(id='pl_top_realtimehot').find_all('tr', class_="")
                hotSearch = ""
                for i, item in enumerate(tr):
                    if i > 0:
                        title = item.find('a').get_text()
                        url = "https://s.weibo.com" + item.find('a').attrs['href']
                        hot = item.find('span').get_text()
                        id = item.find('td', class_="td-01 ranktop").get_text()
                        hotSearch += id + '\t' + title + "\t" + hot + "\t" + url + "\n"
                print(hotSearch)
                return hotSearch
        except:
            print("访问失败")
    

    看一下控制台输出:

    image-20210802205314582

    包含 排名、内容、热度、url,下面只需要将这些内容发送到邮箱就可以了。

    发邮件

    学会用python发邮件可以帮助我们完成许多意想不到的操作,大家要认真看哦!

    邮箱配置

    首先需要配置我们的邮箱,开启smtp协议,smtp是一种提供可靠且有效的电子邮件传输的一种邮件服务,主要用于系统之间的邮件信息传递,并提供有关来信的通知。

    本文以qq邮箱为例进行配置,步骤如下;

    • 登录邮箱,进入设置
    • 点击开启smtp
    • 按照提示发送信息到指定号码
    • 完成后点击我已发送
    • 将key记录下来,后面要用

    image-20210801144213272

    发送邮件

    具体邮件的发送我们通过smtplib这个库来实现

    安装

    pip install smtplib
    

    配置邮箱信息:

     	mail_host = 'smtp.qq.com'
        mail_user = '2865866423'
        #将pass替换成刚刚保存的key
        mail_pass = 'your pass'
    

    提示

    qq邮箱支持自己给自己发邮件

    邮件内容

    # 邮件内容设置,将第一个参数修改成你要发送的内容即可
    message = MIMEText(message, 'plain', 'utf-8')
    # 邮件主题
    message['Subject'] = '微博热搜'
    # 发送方信息
    message['From'] = sender
    # 接受方信息
    message['To'] = receivers[0]
    

    设置好这些,只需要登录邮箱服务器发送就好了

    完整代码

    def send_mail(message):
        mail_host = 'smtp.qq.com'
        mail_user = ''
        mail_pass = ''
    
        # 发送方,可以自己给自己发
        sender = '@qq.com'
        # 邮件接受方邮箱地址,可多写
        receivers = ['@qq.com']
    
        # 邮件内容设置,将第一个参数修改成你要发送的内容即可
        message = MIMEText(message, 'plain', 'utf-8')
        # 邮件主题
        message['Subject'] = '微博热搜'
        # 发送方信息
        message['From'] = sender
        # 接受方信息
        message['To'] = receivers[0]
        
        try:
            smtpObj = smtplib.SMTP_SSL(mail_host)
            # 登录到服务器
            smtpObj.login(mail_user, mail_pass)
            # 发送
            smtpObj.sendmail(
                sender, receivers, message.as_string())
            # 退出
            smtpObj.quit()
            print('success')
        except smtplib.SMTPException as e:
            print('error', e)  # 打印错误
    

    测试一下

    已经收到了主题为「微博热搜」的邮件

    image-20210801143938144

    定时执行

    为了实时的查看热榜,需要将脚本放到服务器,每小时定时执行一次。

    命令

    crontab -e
    0 * * * * python /hot_monitor.py
    

    关于0 * * * *这几个参数的作用,请自行百度。

    关于云服务器,可以参考一条这篇文章《阿里云服务器购买及SSH免密登录》进行购买和配置。

    🌈寻宝

    ?今天是坚持刷题更文的第20/100天

    ?各位的点赞、关注、收藏、评论、订阅就是一条创作的最大动力

    为了回馈各位粉丝,礼尚往来,给大家准备了一条多年积累下来的优质资源,包括 学习视频、面试资料、珍藏电子书等

    大家可以评论留言或者私信我领取

    在这里插入图片描述

    cs
    下一篇:没有了