爬虫類--csdnメッセージを取り出し、メールボックスで通知します(python 3)
7138 ワード
前に多くの学生が私にメッセージを送って、関連する問題を聞いて、私はすぐに解答に返事することができませんでした.
主な原因は仕事が忙しくて、ブログは毎日ログインしてメッセージを見ていません.ニュースを開けて、いくつかの同級生のニュースを見て、仕方なくもう何日も経った.
そこでここに小さなスクリプトを書いて、毎日ブログのメッセージ通知を登って、新しいメッセージがあれば、個人のメールボックスに送って注意します.
コードは次のとおりです.
主な原因は仕事が忙しくて、ブログは毎日ログインしてメッセージを見ていません.ニュースを開けて、いくつかの同級生のニュースを見て、仕方なくもう何日も経った.
そこでここに小さなスクリプトを書いて、毎日ブログのメッセージ通知を登って、新しいメッセージがあれば、個人のメールボックスに送って注意します.
コードは次のとおりです.
#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(" !")