Python爬取URP教务系统课程表并保存到excel Python爬取URP教务系统课程表并保存到excel
爬取URP教务系统课程表最终结果如图所⽰:
接下来开始操作:
⾸先打开教务系统->按F12->点击Network->刷新⼀下界⾯->获取headers 如图所⽰:
headers={
'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-
exchange;v=b3',
'Connection':'Keep-Alive',
'Accept-Language':'zh-CN,zh;q=0.9',
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.87 Safari/537.36',
'Accept-Encoding':'gzip, deflate',
'Upgrade-Insecure-Requests':'1',
'Cookie':'*******',
'X-Requested-With':'XMLHttpRequest',
'Host':'202.207.177.39:8088'
}
接下来抓包Form表单,先输⼊祖传密码获取表单信息:
把Origin和Referer也添加到headers⾥⾯去。
可以看到最后三个分别是账号,密码,验证码(emmm…不过在这⾥真的想吐槽⼀下这URP,,,,账号=zjh(我猜是证件号),密码=mm,验证码,,,哎不说了)
写出from表单:
form ={
'zjh1':'',
'tips':'',
'lx':'',
'evalue':'',
'eflag':'',
'fs':'',
'dzslh':'',
'zjh': username,
'mm': password,
'v_yzm': code
}
此时我们就可以着⼿获取验证码了:
Elements 到验证码的链接:
但是别急,我们在去Response⾥⾯看看:
发现此处并没有验证码图⽚的链接。因为是js动态加载出来的。
所以我们不能⽤常规的获取⽹页源码的⽅式获取到验证码的链接,我在这⾥⽤了⼀种笨办法但也是最简
单的办法:⽤selenium模拟登录去获取⽹页源码:
selenium安装:
pip install selenium
这⾥还需要⽤到ChromeDriver(因为我⽤的Chrome浏览器模拟登录):
打开Chrome浏览器->最右上⾓->帮助->关于Google Chrome->查看当前浏览器版本:
然后去下载对应的版本。(如果没有对应的,相近的也⾏)
此时这⾥的html就是selenium获取到⽹页源码:
from selenium import webdriver
from selenium.webdrivermon.by import By
from selenium.webdrivermon.keys import Keys
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
browser=webdriver.Chrome()
html=browser.page_source
# browser.close()
此时获取到的源码是带验证码链接的
然后⽤正则将验证码链接提取出来和前⾯拼上:
def CheckCode(url):
<(url)
html=browser.page_source
# browser.close()
yzm_src=re.findall('<img id="vchart" height="20" width="80" src="(.*?)">',html)
yzm_url=str(yzm_src)
yzm_url=''.join(yzm_src)
yzm_url='202.207.177.39:8088'+str(yzm_url)
return yzm_url
这样我们就获得了完整的验证码链接(即下⽂的img_url)
接下来就是验证码的识别了:
⾸先
pip install pytesseract
(这⾥不⽤tesseract是因为我⼀直安装不上,百度了好多教程也不⾏,后来搜到python和tesseract不兼容什么的…)
def get_image_text(img_url):
img_quest.Request(url=img_url,headers=headers)
quest.urlopen(img_url).read()
localtime = time.strftime("%Y%m%d%H%M%S",time.localtime())
filename='C:/Code-Py/CAPTCHA/'+localtime+'.jpg'#将验证码图⽚保存到本地
local=open(filename,'wb')
local.write(downloads)
local.close()
# img.show()
response=filename
img=Image.open(response)
selenium获取cookievert('L')
img=img.point(lambda x:255if x>135else0)#灰度处理
text=pytesseract.image_to_string(img)
return(text)
得到结果:
还⾏。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论