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

Posted 一条coding

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一起用python写个CSDN热榜通知脚本,不再错过的自己排名变化❤️附源码相关的知识,希望对你有一定的参考价值。

❤️本文收录于《从实战学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天

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

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

点击下方卡片领取👇👇👇

以上是关于一起用python写个CSDN热榜通知脚本,不再错过的自己排名变化❤️附源码的主要内容,如果未能解决你的问题,请参考以下文章

CSDN热榜监控,一发布就被各路“大V”联合封杀

5分钟教会你用Python采集CSDN的热榜

Python爬虫实战:定时爬取微博热榜信息并存入SqlServer,不再错过每条热搜

拒绝某度文库,跟我一起用Python写个下载器

CSDN热榜华为云博客都可用来练习Python scrapy 爬虫

CSDN热榜华为云博客都可用来练习Python scrapy 爬虫