91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python爬蟲中爬取監控教務系統的示例分析

發布時間:2021-06-18 09:30:33 來源:億速云 閱讀:167 作者:小新 欄目:開發技術

這篇文章將為大家詳細講解有關python爬蟲中爬取監控教務系統的示例分析,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

設計思路:

設計思路很簡單,首先對已有的成績進行處理,變為list集合,然后定時爬取教務系統查成績的頁面,對爬取的成績也處理成list集合,如果newList的長度增加了,就找出增加的部分,并通過郵件通知我。

腳本運行效果:

服務器

python爬蟲中爬取監控教務系統的示例分析

發送郵件通知:

python爬蟲中爬取監控教務系統的示例分析

代碼如下:

import datetime
import time
from email.header import Header
import requests
import re
import smtplib
from email.mime.text import MIMEText
from bs4 import BeautifulSoup
def listener():
 #在這里我通過模擬登陸的方式登陸
 #一般來說這里填寫的是username跟password
 #但我們學校后臺將用戶名和密碼進行了加密
 #通過觀察瀏覽器的請求數據跟頁面源碼猜出學校后臺的加密方式
 data={
 #出于學校安全考慮,這里就不給出加密方式了
 'encoded':'xxxxxxxxxxxxxxxxxxx'
 }
 session = requests.Session()
 session.post('http://jwc.sgu.edu.cn/jsxsd/xk/LoginToXk',data=data)
 #請求2019-2020-1學期的所有成績
 r_data = {
 'kksj': '2019-2020-1',
 'kcxz': '',
 'kcmc': '',
 'xsfs': 'all'
 }
 r = session.post('http://jwc.sgu.edu.cn/jsxsd/kscj/cjcx_list', data=r_data)
 #對爬回來數據進行封裝
 soup = BeautifulSoup(r.text, 'html.parser')
 #返回已有的成績列表
 oldList = toList(soup)
 max = len(oldList)
 #這里用死循環定時爬取成績頁面分析是否分布新成績
 while (True):
 #post跟get方式不能亂用,不然數據會出錯
 r = session.post('http://jwc.sgu.edu.cn/jsxsd/kscj/cjcx_list',data=r_data)
 soup = BeautifulSoup(r.text, 'lxml')
 #print(soup.prettify())
 length = len(soup.find_all(string=re.compile('2019-2020-1')))-1
 print("course_length: ",length)
 if (r.status_code == 200 and length != 0):
  if (length > max):
  #查詢新出的成績列表
  newlist = toList(soup)
  #獲取兩個列表不同之處,不同的就是新成績
  diflist = compareTwoList(oldList, newlist)
  oldList=newlist
  if diflist=='':
   send("unkowned Error","unkowned Error")
  else:
   #有新成績了,發送郵件通知我
   send('you have new course sorce!!', diflist)
  max = length
  print('last running time was:',datetime.datetime.now())
  #定時作用,500s查一次
  time.sleep(500)
 else:
  # 發送郵件斷開連接了 print("had disconnected...")
  send("your server is disconnected!!!","your server is disconnected!!!")
  break
def send(title,msg):
 mail_host = 'smtp.qq.com'
 # 你的qq郵箱名,沒有.com
 mail_user = '你的qq郵箱名,沒有.com'
 # 密碼(部分郵箱為授權碼)
 mail_pass = '授權碼'
 # 郵件發送方郵箱地址
 sender = '發送方郵箱地址'
 # 郵件接受方郵箱地址,注意需要[]包裹,這意味著你可以寫多個郵件地址群發
 receivers = ['yoletpig@qq.com']
 # 設置email信息
 # 郵件內容設置
 message = MIMEText(msg, 'plain', 'utf-8')
 # 郵件主題
 message['Subject'] = Header(title,'utf-8')
 # 發送方信息
 message['From'] = sender
 # 接受方信息
 message['To'] = receivers[0]
 # 登錄并發送郵件
 try:
 # smtpObj = smtplib.SMTP()
 # # 連接到服務器
 # smtpObj.connect(mail_host, 25)
 smtpObj = smtplib.SMTP_SSL(mail_host)
 # 登錄到服務器
 smtpObj.login(mail_user, mail_pass)
 # 發送
 smtpObj.sendmail(
  sender,receivers,message.as_string())
 # 退出
 smtpObj.quit()
 print('success')
 except smtplib.SMTPException as e:
 print('error', e) # 打印錯誤
def toList(soup):
 flag = True
 list = []
 strs = ''
 #對tr標簽下的td進行遍歷并取值
 for tr in soup.find_all('tr'):
 if flag:
  flag = False;
  continue
 i = 1
 for td in tr.stripped_strings:
  if (i == 1 or i == 2):
  i += 1
  continue
  strs += "_" + td
  i += 1
 list.append(strs)
 strs = ''
 return list
def compareTwoList(oldList,newList):
 diflist=''
 for sub in newList:
 #判斷是否唯一
 if(oldList.count(sub)==0):
  diflist = sub
  break
 return diflist
if __name__ == '__main__':
 listener()

關于“python爬蟲中爬取監控教務系統的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

崇仁县| 满城县| 揭东县| 凤冈县| 顺平县| 吴旗县| 崇左市| 博爱县| 巧家县| 彰武县| 宽甸| 理塘县| 晋州市| 工布江达县| 佛山市| SHOW| 新河县| 新泰市| 兴山县| 洛扎县| 滦南县| 威宁| 阿拉尔市| 宜兰市| 象山县| 福安市| 丹阳市| 罗山县| 五莲县| 三门县| 稷山县| 昌宁县| 九江市| 新巴尔虎右旗| 宝丰县| 淮北市| 大庆市| 新宾| 上林县| 阿图什市| 开阳县|