Python爬取熱搜存入數據庫而且還能定時發送郵件!!!

1、前言

微博熱搜榜天天都會更新一些新鮮事,可是本身處於各類緣由,確定不能時刻關注着微博,爲了與時代接軌,接受最新資訊,就尋思着用Python寫個定時爬取微博熱搜的而且發送QQ郵件的程序,這樣天天能夠在不打開微博的狀況下,時刻掌握着微博的最新動態資訊。html

廢話很少說,下面直接上代碼以及詳細思路。
在這裏插入圖片描述mysql

2、代碼及思路

(1)首先確定是對微博熱搜進行爬取,這並不難,是個很是簡單的爬蟲。sql

def getHTML(url):
    
    headers={
        "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36",
    } # 瀏覽器請求頭
    r = requests.get(url, headers = headers) # 向該網頁發起請求
    # 若是返回的響應碼是200 則表示請求成功,不然返回「獲取失敗」
    if r.status_code == 200:
        r.encoding = r.apparent_encoding 
        return r.text
    else:
        return "獲取失敗"

(2)接下來對返回的源碼進行解析,這邊我用的是xpath。數據庫

def parseHTML(html):
    html = etree.HTML(html)
    content = html.xpath('//div[@class="data"]//table//tr[position()>1]/td[@class="td-02"]//a/text()')
    return content

(3)獲取到須要的數據以後,就將它們存入數據庫。第一步就是要鏈接上數據庫,而後建立對應的表格存儲數據。瀏覽器

def toDB(content):

    db = pymysql.connect('localhost', 'root', '密碼', 'lqj', charset="utf8")
    cursor = db.cursor()
    dt = time.strftime("%Y-%m-%d %X")
    sql = '''
      create table if not exists wb_Hotdata(
          日期 datetime, 
          熱搜 varchar(100) primary key )
         
      '''
    cursor.execute(sql)
    for item in content:
        sql1 = "INSERT IGNORE INTO wb_Hotdata(日期,熱搜) VALUES (%s,%s)"
        cursor.execute(sql1,(dt,item))
        db.commit()
    print("數據插入成功")
    cursor.close()
    db.close()

(4)下一步,也是整篇文章的靈魂,就是講熱搜定時發送到本身的郵箱,這樣就能及時獲取最新資訊。網絡

def sendMail(contents):
    mailBox = '發送郵箱'  
    password = '郵箱受權碼'  

    to_mail = '接收郵箱'  # 接收郵箱

    mailhost = 'smtp.qq.com'  # qq郵箱的smtp地址
    qqmail = smtplib.SMTP()  # 建立SMTP對象
    qqmail.connect(mailhost, 25)  
    qqmail.login(from_addr, password)  
    dt = time.strftime("%Y-%m-%d %X")
    data  = ''
    for content in contents:  
        data += '當前時間' + dt + '\n' + '熱搜:' + content + '\n'
        data += '=============================\n' #分割線

    msg = MIMEText(data, 'plain', 'utf-8')
    msg['subject'] = Header("即時微博熱搜", 'utf-8')

    try:
        qqmail.sendmail(mailBox, to_mail, msg.as_string())
        print('發送成功!')
    except:
        print('發送失敗!')
    qqmail.quit()

(5)最後一步,就是要實現定時發送這個功能了,這邊我使用的是schedule模塊。app

def main():
    html = getHTML("https://s.weibo.com/top/summary")
    contents = parseHTML(html)
    toDB(contents)
    sendMail(contents)
  
schedule.every().day.at("10:30").do(main) # 天天早上10:30執行main函數
while True:
    schedule.run_pending()
    time.sleep(1)

效果圖:函數

在這裏插入圖片描述
這樣看起來是否是很簡單明瞭,而且不須要時刻打開微博,本身指定任意時間就能收到一手資訊,與「out了」說拜拜!
學習

在這裏插入圖片描述
在這裏插入圖片描述

3、結語

固然,這只是微博熱搜,若是須要其餘資訊,也能夠獲取其餘平臺的數據,定時發送到郵箱中,或者網站發生變更,也能夠第一時間提醒你,很是的方便!網站

想要獲取更多Python學習資料能夠加QQ:2955637827私聊或加Q羣630390733你們一塊兒來學習討論吧!

本文的文字及圖片來源於網絡,僅供學習、交流使用,不具備任何商業用途,若有問題請及時聯繫咱們以做處理

相關文章
相關標籤/搜索