??歡迎訂閱《從實戰學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打開開發者工具

定位到熱榜所在的<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("訪問失敗")
看一下控制臺輸出:

包含 排名、內容、熱度、url,下面只需要將這些內容發送到郵箱就可以了,
發郵件
學會用python發郵件可以幫助我們完成許多意想不到的操作,大家要認真看哦!
郵箱配置
首先需要配置我們的郵箱,開啟smtp協議,smtp是一種提供可靠且有效的電子郵件傳輸的一種郵件服務,主要用于系統之間的郵件資訊傳遞,并提供有關來信的通知,
本文以qq郵箱為例進行配置,步驟如下;
- 登錄郵箱,進入設定
- 點擊開啟
smtp - 按照提示發送資訊到指定號碼
- 完成后點擊我已發送
- 將key記錄下來,后面要用

發送郵件
具體郵件的發送我們通過
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) # 列印錯誤
測驗一下
已經收到了主題為「微博熱搜」的郵件

定時執行
為了實時的查看熱榜,需要將腳本放到服務器,每小時定時執行一次,
命令
crontab -e
0 * * * * python /hot_monitor.py
關于0 * * * *這幾個引數的作用,請自行百度,
關于云服務器,可以參考一條這篇文章《阿里云服務器購買及SSH免密登錄》進行購買和配置,
🌈尋寶
?今天是堅持刷題更文的第20/100天
?各位的點贊、關注、收藏、評論、訂閱就是一條創作的最大動力
為了回饋各位粉絲,禮尚往來,給大家準備了一條多年積累下來的優質資源,包括 學習視頻、面試資料、珍藏電子書等
大家可以評論留言或者私信我領取

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