您好,登錄后才能下訂單哦!
小編給大家分享一下如何使用python實現定時報天氣,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
這里就不爬取股票的信息,我來爬一個天氣預報的信息,然后實現每天定時發送。打開下面的鏈接就能跳轉到中國氣象網
http://www.weather.com.cnnn/
點擊溫度那個位置就可以進入下面的圖
我們可以看到7天的天氣和8-15天的天氣,再往后對我們來說就沒必要了。我們查看七日的天氣預報,直接爬11日的天氣,鼠標右鍵->檢查->Network->刷新網頁->查看列表第一個,再點擊preview
可以看到數據在HTML里面,然后回到element
可以發現,溫度數據放在<p class="tem">
之下。“多云”所在的位置是<p title="晴" class="wea">晴</p>
。
import requests headers = { 'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.87 Safari/537.36'} # 封裝headers #這里對應的是我選的城市,可以換自己所在城市 url = 'http://www.weather.com.cn/weather/101010100.shtml' # 把URL鏈接賦值到變量url上 res = requests.get(url, headers=headers) # 發送requests請求,并把響應的內容賦值到變量res中。 print(res.text) # 打印出res對象的網頁源代碼 print(res.status_code) # 檢查響應狀態是否正常
看結果可以看到是響應是正常的,但是出現了亂碼。但是莫慌。加上一句res.encoding='utf-8'
就行了。
接下來就可以寫完整的爬取信息的代碼了
import requests from bs4 import BeautifulSoup headers={'user-agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.87 Safari/537.36'} #封裝headers url='http://www.weather.com.cn/weather/101010100.shtml' #把URL鏈接賦值到變量url上 res=requests.get(url,headers=headers) #發送requests請求,并把響應的內容賦值到變量res中 res.encoding='utf-8' bsdata=BeautifulSoup(res.text,'html.parser') #使用bs模塊解析獲取到的數據 data_temperature= bsdata.find(class_='tem') #使用find()取出天氣的溫度數據 data_weather= bsdata.find(class_='wea') #使用find()取出天氣的文字描述 print(data_temperature.text) #取出變量data_temperature中的字符串內容,并打印 print(data_weather.text) #取出變量data_weather中的字符串內容,并打印
可以成功的得到需要的數據。
其實最難的不是爬蟲,爬這種信息新手應該都會,接下里才是重頭戲。
如果我們想要實現發送郵件,這里以qq郵件為例要經過以下的步驟:
連接郵件服務器
使用郵箱賬號密碼登錄
填寫收件人,主題,正文等
發送郵件
所以連接服務器要用到用到smtplib庫,填寫主題和撰寫正文,需要用到email庫(python真的是yyds)
SMTP代表簡單郵件傳輸協議,相當于一種計算機之間發郵件的約定
smtplib是不需要安裝的,smtplib是python的一個內置庫,有興趣的小伙伴可以看看官方文檔
看下面的代碼
import smtplib mailhost='smtp.qq.com' #把qq郵箱的服務器地址賦值到變量mailhost上,地址需要是字符串的格式。 qqmail = smtplib.SMTP() #實例化一個smtplib模塊里的SMTP類的對象,這樣就可以SMTP對象的方法和屬性了 qqmail.connect(mailhost,25) #連接服務器,第一個參數是服務器地址,第二個參數是SMTP端口號
**mailhost=‘smtp.qq.com'**這句是qq郵箱的服務器地址,這個是可以查得到的
用SMTP對象的connect()方法連接服務器,第一個參數是獲取到的服務器地址,第二個參數是SMTP端口號——25。端口號的選擇不是唯一的,但是25是一個最簡單、最基礎的端口號,所以我們填25。
此密碼非彼密碼,這個密碼需要我們去到這里獲取:https://mail.qq.com/,登錄你的郵箱。然后點擊位于頂部的【設置】按鈕,選擇【賬戶設置】。
下拉到這個位置
點擊開啟第一個,然后得到授權碼,如果以前獲取過但是忘了,就需要發送短信重新獲取,這個碼一定不要外漏!!!
import smtplib mailhost='smtp.qq.com' #把qq郵箱的服務器地址賦值到變量mailhost上 qqmail = smtplib.SMTP() #實例化一個smtplib模塊里的SMTP類的對象,這樣就可以SMTP對象的方法和屬性了 qqmail.connect(mailhost,25) #連接服務器,第一個參數是服務器地址,第二個參數是SMTP端口號。 sender = input('請輸入你的郵箱:') #獲取郵箱賬號 password = input('請輸入你的密碼:') #獲取郵箱密碼 qqmail.login(sender,password) #登錄郵箱,第一個參數為郵箱賬號,第二個參數為郵箱密碼 receiver=input('請輸入收件人的郵箱:') #獲取收件人的郵箱
所填密碼就是剛才獲取的授權碼
在這里就需要用到email庫。
from email.mime.text import MIMEText from email.header import Header content=input('請輸入郵件正文:') #輸入你的郵件正文 message = MIMEText(content, 'plain', 'utf-8') #實例化一個MIMEText郵件對象,該對象需要寫進三個參數,分別是郵件正文,文本格式和編碼 subject = input('請輸入你的郵件主題:') #用input()獲取郵件主題 message['Subject'] = Header(subject, 'utf-8')
我們還需要引入了email庫中的MIMEText模塊和Header模塊
最后一行代碼:在等號的右邊,是實例化了一個Header郵件頭對象,該對象需要寫入兩個參數,分別是郵件主題和編碼,然后賦值給等號左邊的變量message[‘Subject'],message[‘Subject']就代表著根據MIMEText類里面的Subject的屬性名取到該屬性
代碼有注釋還不明白的話可以去看看文檔,
將前面的代碼整合以下
from email.mime.text import MIMEText from email.header import Header #引入Header和MIMEText模塊 content=input('請輸入郵件正文:') #輸入你的郵件正文 message = MIMEText(content, 'plain', 'utf-8') #實例化一個MIMEText郵件對象,該對象需要寫進三個參數,分別是郵件正文,文本格式和編碼 subject = input('請輸入你的郵件主題:') #用input()獲取郵件主題 message['Subject'] = Header(subject, 'utf-8') qqmail.sendmail(sender, receiver, message.as_string()) qqmail.quit() #退出郵箱
sendmail() 發送郵件,括號里面有三個參數,第1個是發件人的郵箱地址,第2個是收件人的郵箱地址,第3個是正文,但必須是字符串格式,所以用as_string()函數轉換了一下。
但是我們希望發送成功后能顯示“郵件發送成功”,失敗的時候能提示我們“郵件發送失敗”,可以使用try語句來實現。
try: qqmail.sendmail(sender, receiver, message.as_string()) print ('郵件發送成功') except: print ('郵件發送失敗') qqmail.quit()
關于時間,其實Python有兩個內置的標準庫——time和datetime,但是我們不用,誒,就是玩,我們可以用第三方庫schedule其實是有原因的:對于我們需要的定時功能,time和datetime當然能實現,但操作邏輯會相對復雜;而schedule就是可以直接解決定時功能,代碼比較簡單,這是我們選擇schedule的原因。
官方文檔鏈接:https://pypi.org/project/schedule/
根據文檔我們做一個每3秒運行一次的程序
import schedule import time #引入schedule和time模塊 def job(): print("Working in progress...") #定義一個叫job的函數,函數的功能是打印'I'm working...' schedule.every(3).seconds.do(job) while True: schedule.run_pending() time.sleep(1)
也可以設置在某個時間發送,用法很多,這里就不展開。最后把這些代碼全部合并整合一下,下面看效果
這里我定的下午三點四十六,然后發送成功,我打開我的郵箱確實能收到
這個功能我放在服務器上用了很久了,爬一些平時自己必看的信息,然后發送,減少了自己被其他東西吸引注意力的幾率。
以上是“如何使用python實現定時報天氣”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。