最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python爬蟲爬取監(jiān)控教務(wù)系統(tǒng)的思路詳解

 更新時間:2020年01月08日 09:19:02   作者:yoletPig  
這篇文章主要介紹了python爬蟲監(jiān)控教務(wù)系統(tǒng),主要實現(xiàn)思路是對已有的成績進行處理,變?yōu)閘ist集合,本文通過實例代碼給大家介紹的非常詳細,需要的朋友可以參考下

這幾天考了大大小小幾門課,教務(wù)系統(tǒng)又沒有成績通知功能,為了急切想知道自己掛了多少門,于是我寫下這個腳本。

設(shè)計思路:

設(shè)計思路很簡單,首先對已有的成績進行處理,變?yōu)閘ist集合,然后定時爬取教務(wù)系統(tǒng)查成績的頁面,對爬取的成績也處理成list集合,如果newList的長度增加了,就找出增加的部分,并通過郵件通知我。

腳本運行效果:

服務(wù)器:

在這里插入圖片描述

發(fā)送郵件通知:

在這里插入圖片描述

代碼如下:

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
 #但我們學校后臺將用戶名和密碼進行了加密
 #通過觀察瀏覽器的請求數(shù)據(jù)跟頁面源碼猜出學校后臺的加密方式
 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)
 #對爬回來數(shù)據(jù)進行封裝
 soup = BeautifulSoup(r.text, 'html.parser')
 #返回已有的成績列表
 oldList = toList(soup)
 max = len(oldList)
 #這里用死循環(huán)定時爬取成績頁面分析是否分布新成績
 while (True):
 #post跟get方式不能亂用,不然數(shù)據(jù)會出錯
 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:
   #有新成績了,發(fā)送郵件通知我
   send('you have new course sorce!!', diflist)
  max = length
  print('last running time was:',datetime.datetime.now())
  #定時作用,500s查一次
  time.sleep(500)
 else:
  # 發(fā)送郵件斷開連接了 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'
 # 密碼(部分郵箱為授權(quán)碼)
 mail_pass = '授權(quán)碼'
 # 郵件發(fā)送方郵箱地址
 sender = '發(fā)送方郵箱地址'
 # 郵件接受方郵箱地址,注意需要[]包裹,這意味著你可以寫多個郵件地址群發(fā)
 receivers = ['yoletpig@qq.com']
 # 設(shè)置email信息
 # 郵件內(nèi)容設(shè)置
 message = MIMEText(msg, 'plain', 'utf-8')
 # 郵件主題
 message['Subject'] = Header(title,'utf-8')
 # 發(fā)送方信息
 message['From'] = sender
 # 接受方信息
 message['To'] = receivers[0]
 # 登錄并發(fā)送郵件
 try:
 # smtpObj = smtplib.SMTP()
 # # 連接到服務(wù)器
 # smtpObj.connect(mail_host, 25)
 smtpObj = smtplib.SMTP_SSL(mail_host)
 # 登錄到服務(wù)器
 smtpObj.login(mail_user, mail_pass)
 # 發(fā)送
 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()

這個腳本不出意外的話要運行到我所有成績出來為止,但我電腦肯定不會這么多天不關(guān)機呀,于是我就將這個腳本放到服務(wù)器上運行,如何在ubuntu下運行python文件,大家可以看一下我的另一篇文章:
yoletPig的博客:Ubuntu下運行python文件

總結(jié)

以上所述是小編給大家介紹的python爬蟲爬取監(jiān)控教務(wù)系統(tǒng)的思路詳解,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!

相關(guān)文章

  • Python可變參數(shù)函數(shù)用法實例

    Python可變參數(shù)函數(shù)用法實例

    這篇文章主要介紹了Python可變參數(shù)函數(shù)用法,實例分析了Python可變參數(shù)函數(shù)的定義與使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • 用python實現(xiàn)學生信息管理系統(tǒng)

    用python實現(xiàn)學生信息管理系統(tǒng)

    這篇文章主要為大家詳細介紹了用python實現(xiàn)學生信息管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • python 內(nèi)置庫wsgiref的使用(WSGI基礎(chǔ)入門)

    python 內(nèi)置庫wsgiref的使用(WSGI基礎(chǔ)入門)

    WSGI(web服務(wù)器網(wǎng)關(guān)接口)主要規(guī)定了服務(wù)器端和應用程序之間的接口,即規(guī)定了請求的URL到后臺處理函數(shù)之間的映射該如何實現(xiàn)。wsgiref是一個幫助開發(fā)者開發(fā)測試的Python內(nèi)置庫,程序員可以通過這個庫了解WSGI的基本運行原理,但是不能把它用在生產(chǎn)環(huán)境上。
    2021-06-06
  • Python實現(xiàn)自動識別并批量轉(zhuǎn)換文本文件編碼

    Python實現(xiàn)自動識別并批量轉(zhuǎn)換文本文件編碼

    這篇文章主要為大家詳細介紹了如何利用Python實現(xiàn)自動識別并批量轉(zhuǎn)換文本文件編碼的功能,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2023-03-03
  • 解決pytorch 數(shù)據(jù)類型報錯的問題

    解決pytorch 數(shù)據(jù)類型報錯的問題

    這篇文章主要介紹了解決pytorch 數(shù)據(jù)類型報錯的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • pycharm如何設(shè)置自動生成作者信息

    pycharm如何設(shè)置自動生成作者信息

    這篇文章主要介紹了pycharm如何設(shè)置自動生成作者信息,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Tensorflow: 從checkpoint文件中讀取tensor方式

    Tensorflow: 從checkpoint文件中讀取tensor方式

    今天小編就為大家分享一篇Tensorflow: 從checkpoint文件中讀取tensor方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • python如何以表格形式打印輸出的方法示例

    python如何以表格形式打印輸出的方法示例

    這篇文章主要介紹了python如何以表格形式打印輸出的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-06-06
  • Python中numpy數(shù)組的維度增減方法詳解

    Python中numpy數(shù)組的維度增減方法詳解

    這篇文章主要介紹了Python中numpy數(shù)組的維度增減方法詳解,在操作數(shù)組情況下,需要按照某個軸將不同數(shù)組的維度對齊,這時候需要為數(shù)組添加維度(特別是將二維數(shù)組變成高維張量的情況下),numpy提供了expand_dims()函數(shù)來為數(shù)組增加維度,需要的朋友可以參考下
    2023-09-09
  • 我們?yōu)槭裁匆獪p少Python中循環(huán)的使用

    我們?yōu)槭裁匆獪p少Python中循環(huán)的使用

    這篇文章主要介紹了我們?yōu)槭裁匆獪p少Python中循環(huán)的使用,我將闡述 Python 提供的一些簡單但是非常有用的結(jié)構(gòu),一些小技巧以及一些我在數(shù)據(jù)科學工作中遇到的案例。我將討論 Python 中的 for 循環(huán),以及如何盡量避免使用它們,需要的朋友可以參考下
    2019-07-07

最新評論

巴林左旗| 四子王旗| 宁夏| 株洲市| 江孜县| 临夏县| 太和县| 泰宁县| 河曲县| 荥经县| 株洲县| 抚州市| 福建省| 东光县| 应城市| 溧阳市| 新乐市| 天镇县| 屯留县| 英德市| 神池县| 墨江| 青铜峡市| 安国市| 阿拉尔市| 广宗县| 芒康县| 盐源县| 扶风县| 湖南省| 宣化县| 息烽县| 东丰县| 鹿泉市| 丰顺县| 长子县| 汉寿县| 新宾| 临清市| 政和县| 武威市|