目錄
- 寫在前面
- 1. 抓取網頁
- 2. 花名冊
- 3. 獲取最新一期的青年大學習
- 4. 爬取資訊
- 5. 主程式
寫在前面
其實上海市和安徽省的有點相似,所以可以參考安徽省的腳本進行爬取
1. 抓取網頁
這個平臺的賬號密碼應該是團委那邊才有的,所以班級團支書可以問問團委們,我這個賬號密碼是上海一個高校的團委給的,

登錄進入就可以看到資訊了,這里就不展示了,
因為這個頁面展示的只有已經完成的名單,所以我們把這些資料抓取下來和本班同學的名單對應起來,這樣才知道誰做了,誰沒做,
2. 花名冊
在根目錄下創建一個檔案夾,放置本班的花名冊,注意一定要是全部人的!是目前這個班級的所有人,包括轉專業的!!

這樣我們就可以獲取這個班級所有的名單了
- 獲取班級花名冊的存放路徑
def GetAllClassPath(path):
path_list = []
for root, dirs, files in os.walk(path):
for file in files:
path_list.append(os.path.join(root, file))
return path_list
- 獲取這個路徑下的所有表格的資訊
def GetClassInfo(class_path):
wb = xlrd.open_workbook(class_path) # 打開excel
sh = wb.sheet_by_name('Sheet1') # 按作業簿定位作業表
s = str.split(class_path, "\\")
class_name = s[-1]
listTemp = {}
for i in range(1, sh.nrows):
listTemp[int(sh.row_values(i)[1])] = sh.row_values(i)[2]
return class_name, listTemp
- 獲取學院的id
def GetNid(accessToken): # 獲取這個學院的id
params = (
('accessToken', accessToken),
)
resp = requests.get('https://qcsh.h5yunban.com/youth-learning/cgi-bin/branch-api/info',
headers=headers, params=params)
info_json = resp.json()
return info_json['result']['id']
3. 獲取最新一期的青年大學習
- 把引數傳入其中即可!
就能獲取到最新一期的青年大學習了,
def GetCourse(accessToken): # 獲取是哪一期的青年大學習
params = (
('pageSize', '99'), # 頁面數大小
('pageNum', '1'), # 頁面
('desc', 'startTime'),
('type', '\u7f51\u4e0a\u4e3b\u9898\u56e2\u8bfe'), # 網上主題團課的unicode編碼格式
('accessToken', accessToken), # 身份驗證資訊
)
resp = requests.get('https://qcsh.h5yunban.com/youth-learning/cgi-bin/branch-api/course/list',
headers=headers, params=params)
info_json = resp.json()
return info_json['result']['list'][0]['id']
4. 爬取資訊
這樣就能獲取名單了
def Spider(subOrg, all_name):
finish_number = []
session = requests.Session()
resp = session.post('https://qcsh.h5yunban.com/youth-learning/cgi-bin/login', headers=headers, data=data)
accessToken = resp.json()['result']['accessToken'] # 獲取accessToken身份資訊
nid = GetNid(accessToken) # 獲取id
course = GetCourse(accessToken) # 獲取是哪一期的青年大小學
# subOrg = subOrg.encode('unicode-escape').decode()
params = (
('pageSize', '80'),
('pageNum', '1'),
('desc', 'createTime'),
('nid', nid), # 學校id
('subOrg', subOrg), # 班級id
('course', course), # 哪一期的青年大學習
('accessToken', accessToken),
)
info_rsp = session.get('https://qcsh.h5yunban.com/youth-learning/cgi-bin/branch-api/course/records',
headers=headers, params=params) # 是否完成名單都在這個頁面
info_json = info_rsp.json()
for k in info_json['result']['list']:
finish_number.append(eval(k['cardNo']))
if len(finish_number) == len(list(all_name.keys())):
print("{}人全部完成了".format(len(finish_number)))
else:
for k in finish_number:
try:
if k not in list(all_name.keys()):
print("未完成名單:", all_name[k]) # 這里就能列印出名單了
except Exception as e:
print("學號為{}的人,不在名單中".format(k)) # 做了一個處理
沒做提醒,懶了,需要的可私聊我,我可以在github上面加上這個郵件提醒,也歡迎有能力的同學自行處理,
5. 主程式
def StartSpider(all_class_path):
paths = GetAllClassPath(all_class_path) # 拿到路徑
for path in paths:
sub_org, all_name = GetClassInfo(path)
tmp = str.split(sub_org, '.')
Spider(tmp[0], all_name)
具體完整代碼在github上面,網站多變,建議在github上面點一個star,實時更新,
上海市青年大學習完整代碼
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/341942.html
標籤:其他
上一篇:HTML5在線電影網站設計 黑色的影視傳媒公司網站(6頁) HTML+CSS+JavaScript
下一篇:CGB2109筆記的鏈接大全
