爬虫類--csdnメッセージを取り出し、メールボックスで通知します(python 3)


前に多くの学生が私にメッセージを送って、関連する問題を聞いて、私はすぐに解答に返事することができませんでした.
主な原因は仕事が忙しくて、ブログは毎日ログインしてメッセージを見ていません.ニュースを開けて、いくつかの同級生のニュースを見て、仕方なくもう何日も経った.
そこでここに小さなスクリプトを書いて、毎日ブログのメッセージ通知を登って、新しいメッセージがあれば、個人のメールボックスに送って注意します.
コードは次のとおりです.
#Version: python3
#Author:   
#-*- coding: utf-8 -*-

import urllib
import http.cookiejar
from bs4 import BeautifulSoup
from email.header import Header
from email.mime.text import MIMEText
from email.utils import parseaddr, formataddr
import smtplib

#  csnd      
def run_spider():
    cookie = http.cookiejar.CookieJar()
    handler = urllib.request.HTTPCookieProcessor(cookie)
    opener = urllib.request.build_opener(handler)
    loginurl = "https://passport.csdn.net/account/login?from=http://my.csdn.net/my/mycsdn"

    #     :  lt exection
    response = opener.open(loginurl)
    soup = BeautifulSoup(response.read(), "lxml")
    for input in  soup.form.find_all("input"):
        if input.get("name") == "lt":
            lt = input.get("value")
        if input.get("name") == "execution":
            execution = input.get("value")
    #post  
    values = {
            "username":"*******@qq.com", #    
            "password":"******", #    
            "lt":lt,
            "execution":execution,
            "_eventId":"submit"
        }
    postdata = urllib.parse.urlencode(values).encode(encoding='UTF8')

    headers = {
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
    'Accept-Language': 'zh-CN,zh;q=0.9',
    'Connection': 'keep-alive',
    'Content-Type': 'application/x-www-form-urlencoded',
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36'
    }

    request = urllib.request.Request(loginurl, postdata, headers)
    result=opener.open(request)

    # #            
    url = "http://msg.csdn.net/"
    result_response = opener.open(url)
    result_soup = BeautifulSoup(result_response.read(), "html.parser")
    result_unread_count=result_soup.find_all('b')
    result_unread_count_text = result_unread_count[0].text
    return result_unread_count_text

#          
def send_email(result_unread_count_text):
    def _format_addr(s):
        name, addr = parseaddr(s)
        return formataddr((Header(name, 'utf-8').encode(), addr))

    from_addr = '*******@sina.com' #      
    password = '******' #      
    to_addr = '[email protected]' #      (pd:      ,          )
    smtp_server = 'smtp.sina.com'

    msg = MIMEText('   '+'result_unread_count_text'+'     ', 'plain', 'utf-8') #  
    msg['From'] = _format_addr('   ' % from_addr) #   
    msg['To'] = _format_addr('   ' % to_addr) #   
    msg['Subject'] = Header('       ……', 'utf-8').encode() #  

    server = smtplib.SMTP(smtp_server, 25)
    server.set_debuglevel(1)
    server.login(from_addr, password)
    server.sendmail(from_addr, [to_addr], msg.as_string())
    server.quit()
    print('     :" %s "   %s,   '%(str(result_unread_count_text),to_addr))

if __name__ == '__main__':
    result_unread_count_text=run_spider()
    if result_unread_count_text!='':
        send_email(result_unread_count_text)
    else:
        print("       !")