❤️本文收录于《从实战学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天
⭐各位的点赞、关注、收藏、评论、订阅就是一条创作的最大动力
为了回馈各位粉丝,礼尚往来,给大家准备了一条多年积累下来的优质资源,包括 学习视频、面试资料、珍藏电子书等
点击下方卡片领取👇👇👇