当前位置:首页 » 《随便一记》 » 正文

一起用python写个CSDN热榜通知脚本,不再错过的自己排名变化❤️附源码_一条coding

3 人参与  2021年11月29日 07:03  分类 : 《随便一记》  评论

点击全文阅读


❤️本文收录于《从实战学python》专栏,用python实现爬虫、办公自动化、数据可视化、人工智能等各个方向的实战案例,有趣又有用!❤️


⭐点击此处跳到末尾获取源码及粉丝福利


生活有望穿秋水的期待,也会有意想不到的惊喜。

前言

哈喽,大家好,我是一条

在C站写作半年有余,每次发完文章都忍不住去看看上没上热榜,排第几名

官方的热榜消息只有在进入50名时通知一次,而且还会有延时

导致经常把时间花在看自己排名上,如果排名靠后,每次打开网页还要往下翻好久

后来还了解到原来C站大火的红心❤️其实只是博主想快速定位到自己的热榜位置做的标识

为了解决这个问题,一条用python写了一个脚本

功能如下:

  • 每小时爬取一次热榜
  • 如果发现自己在榜,记录排名,标题等信息
  • 邮件发送上述信息通知自己

这样无论何时何地都能知道自己的热榜排名,还节省了大量时间。

今天就带大家一起写一下这个脚本

效果展示

爬取热榜

CSDN的热榜无登录验证,所以带上header发送请求即可。

解析返回的json串,即可得到标题,排名,热度等信息

此处较为简单,爬虫基本操作,请看代码

import requests

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'
}

for i in range(2):
    res = requests.get("https://blog.csdn.net/phoenix/web/blog/hotRank?page={}&pageSize=50".format(i),headers=headers).json()
    if res["code"] == 200:
        data = res["data"]
        for d in data:
            userName=d["userName"]
            if(userName=="your csdn_id"):
                hotRankScore=d["hotRankScore"]
                nickName = d["nickName"]
                articleTitle = d["articleTitle"]
                articleDetailUrl = d["articleDetailUrl"]
                viewCount=d["viewCount"]
                commentCount=d["commentCount"]
                favorCount=d["favorCount"]

需要把if(userName=="your csdn_id"):改成自己的id。

搜索排名

由于没有直接返回排名,且分成了两页去查

这里自己计算一下排名

sorted=data.index(d)+1+i*50

发送邮件

发送邮件之前需要设置一下邮箱,具体教程可以参考这篇文章:不玩微博,一封邮件就能知道实时热榜,天秀吃瓜

文中使用qq邮箱教学。

import smtplib
from email.mime.text import MIMEText

def send_mail(message,sorted):
    mail_host = 'smtp.qq.com'
    mail_user = '2865866423'
    mail_pass = 'vkpurabwifwwdhfd'

    # 发送方,可以自己给自己发
    sender = '2865866423@qq.com'
    # 邮件接受方邮箱地址,可多写
    receivers = ['2865866423@qq.com']

    # 邮件内容设置,将第一个参数修改成你要发送的内容即可
    message = MIMEText(message, 'plain', 'utf-8')
    # 邮件主题
    message['Subject'] = 'CSDN热榜通知-{}'.format(sorted)
    # 发送方信息
    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('邮件发送成功')
    except smtplib.SMTPException as e:
        print('邮件发送失败', e)  # 打印错误

这是一段通用代码,可复用。

邮件内容

这一步就是构建邮件内容,可以自定义,也可以就用我的。

发送邮件的同时也将内容写入日志文件

time=time.strftime("%m-%d %H:%M", time.localtime())
                message="当前时间:{}\n" \
                        "尊敬的{}:\n" \
                        "恭喜您创作的《{}》已进入全站综合热榜!\n" \
                        "排名:{} \n" \
                        "热度:{} \n" \
                        "浏览量:{} \n" \
                        "评论数:{} \n" \
                        "收藏数:{} \n" \
                        "文章链接:{} \n".format(time,nickName,articleTitle,sorted,hotRankScore,viewCount,commentCount,favorCount,articleDetailUrl)
                with open("log.txt","a+",encoding='utf-8') as f:
                    f.write(message+"\n")
                send_mail(message,sorted)

对于未上榜及程序出现问题,也邮件通知

    else:
        send_mail("查询失败,程序出现故障,请及时检修!")
if(message==""):
    print("抱歉,您未上榜!")
    with open("log.txt","a+",encoding='utf-8') as f:
        f.write("抱歉,您未上榜!")
    send_mail("抱歉,您未上榜!","0")

完整源码

点击文末卡片,关注后回复「CSDN」获取

如卡片在审核中,请私信博主。

🌈寻宝

⭐今天是坚持刷题更文的第63/100天

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

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

在这里插入图片描述

点击下方卡片领取👇👇👇


点击全文阅读


本文链接:http://m.zhangshiyu.com/post/31367.html

排名  邮件  自己的  
<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1