日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python爬去学校_python爬取学校教务系统

發布時間:2025/5/22 python 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python爬去学校_python爬取学校教务系统 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

寫這個爬蟲的緣由

以前用java寫過一個爬取學校的教務系統的爬蟲 https://blog.csdn.net/ygdxt/article/details/81158321,最近癡迷Python爬蟲,了解到許多強大的庫,想再一次用學校的教務系統做下測試。

這一次我首先想到的是新的教務系統,這個難度更大,因為有了驗證碼識別反爬,由于我是用的tessocr庫識別驗證碼,(具體配置過程可以參考我之前的博客python填坑之路:tesserocr配置)

用Requests.get方法把驗證碼下載下來識別之后,同時因為我爬取網頁是用的selenium做的模擬網頁動作,這里就有一個同步性的問題,不能保證selenium請求網頁上的驗證碼和requests請求的驗證碼是同一個,相當于selenium、requests分別請求了一次登陸網頁,兩個網頁上的驗證碼顯然是不同的。所以

怎么保證請求登錄界面得到的網頁上的驗證碼

和我們請求驗證碼服務器返回的驗證碼是同一個驗證碼是同一個是一個很迷人的問題,

我開始還以為可以從網頁源代碼上直接定位到這個驗證碼,結果顯示這個驗證碼在登錄界面的

的存在形式不是一個..png/jpg,而是通過src=“驗證碼服務器”來實現異步加載

同時,由于tessocr識別驗證碼的成功率可能只有50%,要提高驗證率可能還要對接云打碼,果斷放棄了爬取新教務系統的想法,還是爬取原來的沒有驗證碼的舊教務系統,

其實新舊教務系統最大的區別就是登陸界面不一樣,登陸之后都一樣,貌似用了重定向

ps:如果你對這個問題有什么好的解決辦法,請不吝賜教

運行結果預覽

20181128201749396.png

編碼過程

詳細的代碼解釋就看注釋吧,有什么問題歡迎交流

執行爬蟲的主程序csu.py,里面有許多測試用的注釋代碼,就不刪了

from selenium import webdriver

from selenium.webdriver.common.by import By

from selenium.common.exceptions import TimeoutException

from selenium.webdriver.support.ui import WebDriverWait

from selenium.webdriver.support import expected_conditions as EC

from selenium.webdriver.support.select import Select

from config import *

import time

broswer = webdriver.Chrome()

wait = WebDriverWait(broswer, 10)

def search():

try:

broswer.get("http://csujwc.its.csu.edu.cn/jsxsd/kscj/yscjcx_list")

account = wait.until(

EC.presence_of_element_located((By.CSS_SELECTOR, "#userAccount"))

)

password = wait.until(

EC.presence_of_element_located((By.CSS_SELECTOR, "#userPassword"))

)

submit = wait.until(

EC.element_to_be_clickable((By.CSS_SELECTOR, "#btnSubmit"))

)

except TimeoutException:

return search()

#登錄

account.send_keys(ACCOUNT)

password.send_keys(PASSWORD)

submit.click()

#進入我的成績界面

my_score = wait.until(

EC.presence_of_element_located((By.CSS_SELECTOR,"body > div.wap > a:nth-child(3) > div"))

)

my_score.click()

#成績和平均分

# my_rank = wait.until(

# EC.presence_of_element_located((By.CSS_SELECTOR, "#LeftMenu1_divChildMenu > ul > li:nth-child(4) > a"))

# )

# my_rank.click()

#

# rank = wait.until(

# EC.presence_of_element_located((By.CSS_SELECTOR, "#dataList > tbody > tr:nth-child(2) > td:nth-child(3)"))

# )

# #http://www.w3school.com.cn/cssref/selector_nth-child.asp nth-child(n)的用法

# average_score = wait.until(

# EC.presence_of_element_located((By.CSS_SELECTOR, "#dataList > tbody > tr:nth-child(2) > td:nth-child(4)"))

# )

#

# print('您的平均成績是:'+average_score.text+"\n排名:"+rank.text)

#逐次展示 我的成績八個子項

# css_selector = "#LeftMenu1_divChildMenu > ul > li:nth-child({0}) > a"

# for i in range(8):

# # 將滾動條移動到頁面的頂部

# js = "var q=document.documentElement.scrollTop=0"

# broswer.execute_script(js)

# time.sleep(2)

#

# aviable_score = wait.until(

# EC.presence_of_element_located((By.CSS_SELECTOR, css_selector.format(str(i+1))))

# )

# aviable_score.click()

#

#

# #將滾動條移動到頁面的底部

# for j in range(8):

# js="var q=document.documentElement.scrollTop="+str(j*200)

# broswer.execute_script(js)

# time.sleep(1)

#處理select https://www.cnblogs.com/imyalost/p/7846653.html

yxcj = wait.until(

EC.element_to_be_clickable((By.CSS_SELECTOR, "#LeftMenu1_divChildMenu > ul > li:nth-child(1) > a"))

)

select_score_element = broswer.find_element_by_css_selector("#xnxq01id")

select_score = Select(select_score_element)

#得到下拉列表的所有子項

select_score_items = broswer.find_elements_by_css_selector("#xnxq01id option")

select_score_items_text = []

for item in select_score_items:

select_score_items_text.append(item.text)

#print(item.text)

scores_dic = {}

for i in range(len(select_score.options)):

#不加這兩行會報錯,原因: https://blog.csdn.net/ulebo/article/details/52128033

print("*****************************************************"+select_score_items_text[i]+

"*****************************************************")

select_score_element = broswer.find_element_by_css_selector("#xnxq01id")

select_score = Select(select_score_element)

select_score.select_by_index(i)

time.sleep(1)

score_table = broswer.find_element_by_css_selector("#dataList")

data = score_table.text.replace("+","")

data = data.split("\n")

datalist = []

for line in data:

datalist.append(line.split())

scores_dic[select_score_items_text[i]] = datalist

return scores_dic[select_score_items_text[0]]

def main():

search()

if __name__ =="__main__":

main()

ui.py程序的gui,直接運行這個就好,它會調用csu.py

#coding=utf-8

import wx

import wx.grid

import csu

class UI(wx.Frame):

def __init__(self):

wx.Frame.__init__(self,parent=None,title="成績查詢",size=(1050,560))

grid = wx.grid.Grid(self,pos=(10,0),size=(1050,500))

grid.CreateGrid(100,9)

for i in range(100):

for j in range(9):

grid.SetCellAlignment(i,j,wx.ALIGN_CENTER,wx.ALIGN_CENTER)

grid.SetColLabelValue(0, "序號") #第一列標簽

grid.SetColLabelValue(1, "初修學期")

grid.SetColLabelValue(2, "獲得學期")

grid.SetColLabelValue(3, "課程")

grid.SetColLabelValue(4, "成績") # 第一列標簽

grid.SetColLabelValue(5, "學分")

grid.SetColLabelValue(6, "課程屬性")

grid.SetColLabelValue(7, "課程性質")

grid.SetColLabelValue(8, "獲得方式") # 第一列標簽

grid.SetColSize(0,50)

grid.SetColSize(1,100)

grid.SetColSize(2,100)

grid.SetColSize(3,350)

grid.SetColSize(4,50)

grid.SetColSize(5,50)

grid.SetColSize(6,50)

grid.SetColSize(7,100)

grid.SetColSize(8,100)

grid.SetCellTextColour("NAVY")

data = csu.search()

data.remove(data[0])

print(data)

for i,item1 in enumerate(data):

for j,item2 in enumerate(item1):

grid.SetCellValue(i,j,data[i][j])

pass

app = wx.App()

frame = UI()

frame.Show()

app.MainLoop()

想要運行代碼,具體的配置過程請參考readme

總結

以上是生活随笔為你收集整理的python爬去学校_python爬取学校教务系统的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产18av| 一本毛片 | 欧美射图 | 18p在线观看 | 欧美大尺度床戏做爰 | 蜜桃av色偷偷av老熟女 | 高潮无码精品色欲av午夜福利 | 第一章豪妇荡乳黄淑珍 | 欧美三级网 | 久久精品一区二区三区黑人印度 | 娇小萝被两个黑人用半米长 | 九色视频网 | 日本国产一区二区三区 | 亚洲精品久久久久久久久 | 老头糟蹋新婚少妇系列小说 | 欧美一区二区三区公司 | 日日夜夜综合网 | av自拍偷拍 | 国内免费精品视频 | 非洲黑妞xxxxhd精品 | 精品乱人伦一区二区三区 | 日韩av三级在线观看 | 最近免费中文字幕 | 91啪在线观看 | 污污视频在线免费观看 | 在线成人欧美 | 三级a毛片| 色婷婷av一区二区三区gif | 97在线免费视频观看 | 国产99精品 | 五月婷婷丁香六月 | 免费人成网| 一本大道久久a久久精二百 琪琪色在线视频 | 一眉道姑 电影 | 亚洲成人一级片 | 无码国精品一区二区免费蜜桃 | 一区二区视频在线看 | 久久久国产亚洲 | 香蕉久久一区二区三区 | 日本午夜一级 | 蜜臀久久99精品久久久无需会员 | 99日韩精品 | 一本加勒比北条麻妃 | 亚洲一区二区动漫 | 精品xxx | 麻豆短视频在线观看 | 在线观看污视频网站 | 日本熟妇色xxxxx日本免费看 | 在线精品观看 | 国产原创91| 91精品国产99久久久久久 | av网站在线免费 | 天堂av中文在线观看 | 男女一进一出视频 | 亚洲av无码精品一区二区 | 亚洲一级大片 | 国产精品野外户外 | 人人看人人看 | 免费国产精品视频 | 免费福利视频在线观看 | 小镇姑娘1979版 | 国语播放老妇呻吟对白 | 韩国三级hd两男一女 | 日皮视频网站 | 人人爽夜夜爽 | 国产高清色 | 黄色av电影在线观看 | www.69视频 | 一个人看的www日本高清视频 | 久久私人影院 | 国产日韩欧美视频在线 | av一本二本 | 刘亦菲一区二区三区免费看 | 亚洲色图欧美激情 | a√天堂资源 | 中文字幕亚洲专区 | 性欧美xxxx | 超碰在线图片 | av老司机福利 | 午夜视频免费 | 鲁一鲁在线 | 国产又爽又色 | 日韩av高清无码 | 狠狠干夜夜爽 | 免费操人视频 | 国产精品一区二区三区久久久 | 美女隐私直播 | 美女伦理水蜜桃4 | 国产日韩欧美精品一区 | 成人午夜淫片免费观看 | 狠狠干伊人 | 色八区 | 波多野结衣在线免费观看视频 | 成人av电影免费观看 | 亚洲宅男天堂 | 欧美亚洲韩国 | 亚洲免费专区 | 亚一区| 成人拍拍拍 |