??歡迎訂閱《從實戰學python》專欄,用python實作爬蟲、辦公自動化、資料可視化、人工智能等各個方向的實戰案例,有趣又有用!??無所遁形
更多精品專欄簡介點這里
讓子彈飛一會
前言
近日,csdn的熱榜可以說是”烏煙瘴氣“,培訓機構,公眾號引流,打擦邊球,層出不窮,作為熱榜的密切關注者,決不能讓這片熱土毀于一旦,正義可以會遲到,但絕不會缺席,連夜寫了這個熱榜監控的程式,功能如下:
- 爬取熱榜文章
- 分析其文章內容,一旦發現微信引流
- 通過郵件通知我
- 每小時執行一次
話不多說,快來看如何實作吧!
爬取文章
這一步還是比較簡單的,發送請求就好了,
將鏈接在瀏覽器打開,得到如下json串,將作者,文章標題,文章鏈接決議出來,
{
"code": 200,
"message": "success",
"data": [
{
"hotRankScore": "91055.0",
"pcHotRankScore": "9.1w",
"loginUserIsFollow": false,
"nickName": "退休的龍叔",
"avatarUrl": "https://profile.csdnimg.cn/9/0/1/3_zhiguigu",
"userName": "zhiguigu",
"articleTitle": "Pycharm常用的小技巧匯總,Python新手上路必備,快上車!",
"articleDetailUrl": "https://blog.csdn.net/zhiguigu/article/details/119449173",
"commentCount": "68",
"favorCount": "528",
"viewCount": "5745",
"hotComment": null
},
...
]
}
代碼:
for i in range(2):
res = requests.get(f"https://blog.csdn.net/phoenix/web/blog/hotRank?page={i}&pageSize=50",headers=headers).json()
if res["code"] == 200:
data = res["data"]
for d in data:
nickName = d["nickName"]
articleTitle = d["articleTitle"]
articleDetailUrl = d["articleDetailUrl"]
print(articleDetailUrl)
決議文章
上一步我們拿到了文章的url,現在就要逐一訪問文章,決議其內容,老規矩,還是xpath決議,
因為鏈接都存在于標簽,所以拿到所有的href就可以了,
代碼:
request = requests.get(articleDetailUrl, headers=headers)
time.sleep(1)
html = request.text
# print(html)
content = etree.HTML(html)
# 使用xpath匹配閱讀量
a_href = content.xpath('//*[@id="content_views"]//a/@href')
檢測引流鏈接
這里我們用正則運算式匹配微信引流連接,將檢測到含有引流鏈接的文章資訊寫入檔案,
代碼:
for value in a_href:
r = re.compile(r'http[s]?://mp.weixin.qq.com/', )
match = r.findall(str(value))
if (len(match) > 0):
if (is_out):
f.write(str(id) + '\t' + nickName + '\t' + articleTitle + '\t' + articleDetailUrl + '\n')
f.write("微信引流鏈接如下:" + '\n')
is_out = False
f.write(value + '\n')
print(value)
發送郵件
所有文章都檢測完后,將檔案里的內容通過郵件發送給我,
具體參考這篇:【python實戰】不玩微博,一封郵件就能知道實時熱榜,天秀吃瓜
代碼:
def send_mail():
message = ""
with open("result.txt", 'r', encoding='utf-8') as f:
lines = f.readlines()
for i in lines:
message = message + i
mail_host = 'smtp.qq.com'
mail_user = ''
mail_pass = ''
# 發送方,可以自己給自己發
sender = '@qq.com'
# 郵件接受方郵箱地址,可多寫
receivers = ['@qq.com']
# 郵件內容設定,將第一個引數修改成你要發送的內容即可
message = MIMEText(message, 'plain', 'utf-8')
# 郵件主題
message['Subject'] = 'CSDN熱榜監控'
# 發送方資訊
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) # 列印錯誤
定時執行
為了實時的查看熱榜,需要將腳本放到服務器,每小時定時執行一次,
命令
crontab -e
0 * * * * python /hot_monitor.py
關于0 * * * *這幾個引數的作用,請自行百度,
關于云服務器,可以參考一條這篇文章《阿里云服務器購買及SSH免密登錄》進行購買和配置,
🌈尋寶
?今天是堅持刷題更文的第25/100天
?各位的點贊、關注、收藏、評論、訂閱就是一條創作的最大動力
為了回饋各位粉絲,禮尚往來,給大家準備了一條多年積累下來的優質資源,包括 學習視頻、面試資料、珍藏電子書等
大家可以評論留言或者私信我領取

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/293616.html
標籤:python
