爬取微博热搜并发送定时邮件


用到的包

#请先在窗口执行import xxx,然后安装缺失的第三方包
import requests
from pyquery import PyQuery as pq
import datetime
import schedule
import time
import smtplib
from email.mime.text import MIMEText
from email.header import Header

日期与请求头

headers = {
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.116 Safari/537.36'
        }
date = datetime.datetime.now().strftime('%Y-%m-%d')

爬取热搜

def Weibo_Spider():
    with open(date + '.txt','wt') as f:
            f.close()
    url = 'https://s.weibo.com/top/summary'
    response = requests.get(url,headers = headers)
    response.encoding = response.apparent_encoding
    if response.status_code == 200:
        res = response.text
    else:
        print('error')

    doc = pq(res)
    td = doc('.td-02 a').items()
    for item in td:
        title = item.text()
        href = 'https://s.weibo.com' + item.attr('href')
        content = title + '\n' + href + '\n\n'
        with open(date + '.txt','a') as f:
            f.write(content)
            f.close()

发送邮件

def send_email():
    mailhost = 'smtp.163.com'
    mail = smtplib.SMTP()
    mail.connect(mailhost,465)
    sender = ''
    password = ''
    receiver = ''
    mail.login(sender, password)
    f = open(date + '.txt','r')
    news = f.read()
    message = MIMEText(news,'plain','utf-8')
    subject = '今日热搜'
    message['Subject'] = Header(subject,'utf-8')
    try:
        mail.sendmail(sender,receiver,message.as_string())
        print('邮件发送完毕')
    except Exception as e:
        print('邮件发送失败\n' + e)
    mail.quit()

控制与定时

def job():
    print('开始发送邮件')
    Weibo_Spider()
    send_email()
    print(date + '任务完成')

if __name__ == '__main__':
    while True:
        schedule.every().day.at("08:00").do(job)
        time.sleep(1)

来自CSDN,搭配腾讯云函数使用更佳