python3 正方教務系統 爬取數據


  1 import requests
  2 import re
  3 import os
  4 from yzm import YDMHttp
  5 class Edu():
  6     def yzm_csh(self):
  7         # 用戶名
  8         username = ''
  9         # 密碼
 10         password = ''
 11         # 軟件ID,開發者分成必要參數。登錄開發者后台【我的軟件】獲得!
 12         appid = 3912
 13         # 軟件密鑰,開發者分成必要參數。登錄開發者后台【我的軟件】獲得!
 14         appkey = 'e2bafb5103206d8480ddb7ce3af2d082'
 15         # 驗證碼類型,# 例:1004表示4位字母數字,不同類型收費不同。請准確填寫,否則影響識別率。在此查詢所有類型 http://www.yundama.com/price.html
 16         self.codetype = 1004
 17         # 超時時間,秒
 18         self.timeout = 60
 19         # 初始化
 20         self.yundama = YDMHttp(username, password, appid, appkey)
 21         # 登陸雲打碼
 22         uid = self.yundama.login()
 23         print('uid: %s' % uid)
 24         # 查詢余額
 25         balance =  self.yundama.balance()
 26         print('balance: %s' % balance)
 27     def get_cpic_res(self,pic_name):
 28         # 圖片文件
 29         filename = pic_name
 30         # 開始識別,圖片路徑,驗證碼類型ID,超時時間(秒),識別結果
 31         cid, result = self.yundama.decode(filename,self. codetype, self.timeout);
 32         return result
 33     def __init__(self,u,p):
 34         self.yzm_csh()
 35         self.username=u
 36         self.password=p
 37         self.s = requests.session()
 38         self.get_login_page()
 39         self.login()
 40         self.s.headers.update({
 41             'Host': 'jwgl.cauc.edu.cn',
 42             'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:55.0) Gecko/20100101 Firefox/55.0',
 43             'Accept-Language': 'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
 44             'Accept-Encoding': 'gzip, deflate',
 45             'Content-Type': 'application/x-www-form-urlencoded',
 46             'keep-alive': 'keep-alive',
 47             'Upgrade-Insecure-Requests': '1'
 48         })
 49     def get_view(self,r):
 50         return re.findall('__VIEWSTATE" value="(.*?)"',r)[0]
 51     def auth(self):
 52         data={
 53         'curl':'Z2F',
 54         'flags':'0',
 55         'forcedownlevel':'0',
 56         'formdir':'3',
 57         'trusted':'0',
 58         'username':'',
 59         'password':'',
 60         }
 61         url='http://jwgl.cauc.edu.cn/CookieAuth.dll?Logon'
 62         res=self.s.post(url,data=data)
 63     def get_login_page(self,):
 64         #__VIEWSTATE變量
 65         res=self.s.get('http://jwgl.cauc.edu.cn')
 66         self.sbm=re.findall('/\((.*?)\)/',res.url)[0]
 67         self.view=self.get_view(res.text)
 68     def get_check_pic(self):
 69         url = 'http://jwgl.cauc.edu.cn/(' + self.sbm + ')/CheckCode.aspx'  # 驗證碼所在連接
 70         pic = self.s.get(url)
 71         if os.path.exists(r'yanzheng.jpg'):
 72             os.remove(r'yanzheng.jpg')
 73         with open(r'yanzheng.jpg', 'wb')as f:
 74             f.write(pic.content)
 75             f.close()
 76         username = ''
 77         password = ''
 78         #os.startfile(r'yanzheng.jpg')
 79 
 80     def login(self):
 81         while True:
 82             self.get_check_pic()
 83             # ycode = input("輸入彈出的驗證碼: ")
 84             ycode = self.get_cpic_res('yanzheng.jpg')
 85             payload={
 86                      '__VIEWSTATE':self.view,
 87                      'txtUserName':str(self.username),
 88                      'TextBox2':str(self.password),
 89                      'txtSecretCode':ycode,
 90                      'RadioButtonList1':'%D1%A7%C9%FA',
 91                      'Button1':"",
 92                      'lbLanguage':'',
 93                      'hidPdrs':'',
 94                      'hidsc':'',
 95                     }
 96             #更新refer
 97             self.s.headers.update( {'Referer': 'http://jwgl.cauc.edu.cn/(' + self.sbm + ')/Default2.aspx',})
 98             url='http://jwgl.cauc.edu.cn/('+self.sbm+')/Default2.aspx'
 99             r=self.s.post(url,data=payload)
100             #用正則判斷登陸情況
101             pat=r'<title>(.*?)</title>'#獲取標題的正則表達式
102             x=re.findall(pat,r.text)
103             if(x[0]=="歡迎使用正方教務管理系統!請登錄"):print("登陸失敗")
104             else:
105                 print("登陸成功")
106                 #抓一下名字
107                 catch='<span id="xhxm">(.*?)</span></em>'
108                 self.name=re.findall(catch,r.text)[0][:-2]
109                 self.xh=re.findall('xh=(.*?)"',r.text)[0]
110                 break
111     def get_grade_all(self):
112         self.get_grade_page()
113         data = {
114             '__VIEWSTATE': self.VIEW,
115             'Button2': '%D4%DA%D0%A3%D1%A7%CF%B0%B3%C9%BC%A8%B2%E9%D1%AF'
116         }
117         self.s.headers.update({ 'Referer': self.url })
118         r = self.s.post(self.url, data=data)
119         print(r.text)
120     def get_grade_page(self):
121         self.url='http://jwgl.cauc.edu.cn/('+self.sbm+')/xscj_gc.aspx?xh='+ self.xh+'&xm='+'%C1%F5%BA%D3'+'&gnmkdm=N121605'
122         self.s.headers.update({'Referer': 'http://jwgl.cauc.edu.cn/('+ self.sbm+')/xs_main.aspx?xh='+ self.xh} )
123         r= self.s.get(self.url)
124         self.VIEW= self.get_view(r.text)
125 
126 edu=Edu('','')
127 edu.get_grade_all()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM