session教務資料

2022-08-29 09:36:11 字數 2280 閱讀 9471

在selenium模擬測試教務資料這篇文章中,我說過,嘗試了很長時間,一直不能通過python網路模組模擬獲取教務資訊,在那時候我就知道是因為cookie機制的不熟悉,因為在requests使用了cookie之後可以訪問需要cookie的第乙個介面,但之後需要相同cookie的頁面全都無法訪問。見獵心起,我用了大名鼎鼎的selenium模擬瀏覽器登入,並成功獲取了想要的資訊。

這幾天,查閱文件時候,偶然發現了requests模組的session物件,會話物件可以跨請求保持某些引數。它也會在同乙個session例項發出的所有請求之間保持cookies。這正是我需要的!

s = requests.session()

s.get('')

r = s.get("")

print(r.text)

# '}'

在不同的請求裡,可以發現cookie沒有變化,這就是跨請求保持引數。

s = requests.session()

s.auth = ('user', 'pass')

s.headers.update()

# both 'x-test' and 'x-test2' are sent

s.get('', headers=)

會話也可用來為請求方法提供預設資料。這是通過為會話物件的屬性提供資料來實現的,任何你傳遞給請求方法的字典都會與已設定會話層資料合併。方法層的引數覆蓋會話的引數。

有時你會想省略字典引數中一些會話層的鍵。要做到這一點,你只需簡單地在方法層引數中將那個鍵的值設定為 none ,那個鍵就會被自動省略掉。

任何時候呼叫requests.*()你都在做兩件主要的事情。其一,你在構建乙個 request 物件, 該物件將被傳送到某個伺服器請求或查詢一些資源。其二,一旦 requests 得到乙個從 伺服器返回的響應就會產生乙個 response 物件。該響應物件包含伺服器返回的所有資訊, 也包含你原來建立的 request 物件。如下是乙個簡單的請求,從wikipedia的伺服器得到 一些非常重要的資訊:

r = requests.get('')

如果想訪問伺服器返回給我們的響應頭部資訊,可以這樣做:

r.headers

然而,如果想得到傳送到伺服器的請求的頭部,我們可以簡單地訪問該請求,然後是該請求的頭部:

r.request.headers

有了上面的內容,我們可以很輕鬆的通過會話物件(requests.session())保持cookie,進而訪問我需要的教務資訊。

# -*- coding: utf-8 -*-

import requests

import time

from lxml import etree

times=time.time()

#新建乙個會話物件

myrequests=requests.session()

#設定重複的request header

headers =

#在這裡增添不同的請求引數

request1 = myrequests.post(posturl, postdata, headers=)

geturl='*******************'

request3=myrequests.get(geturl,headers=)

request3.encoding='gb2312'

#網頁資訊處理、排版

dom=etree.html(request3.text)

names=dom.xpath('/html/body/table/tr/td[3]/text()')

socres=dom.xpath('/html/body/table/tr/td[5]/text()')

rates=dom.xpath('/html/body/table/tr/td[7]/text()')

assert(len(names) == len(socres)==len(rates))

results=zip(names,socres,rates)

for item in results:

print(item[0],item[1].strip(),item[2])

print(time.time()-times)

上面就是煩擾我很長時間的問題,通過會話物件session可以很容易的管理跨請求的一些引數。通過時間對比,網路順暢情況下,程式跑一遍可以達到數百毫秒,而使用selenium最快的偽瀏覽器模擬,也需要3s以上。

教務系統 資料庫查詢

在教務系統中,由於我負責的是基礎資訊模組,要為其他模組提供很多資訊.這樣就需要寫很多dal層的方法.我們都是用儲存過程實現的.其中裡面新增,修改,刪除方法沒有什麼好說的.重要的就是一些查詢方法,用到了一些高階的查詢.這裡總結一些資料庫查詢方法.一 特殊關鍵字的查詢 1 in not in 關鍵字in...

教務系統 資料庫查詢

在教務系統中,由於我負責的是基礎資訊模組,要為其他模組提供很多資訊.這樣就需要寫很多dal層的方法.我們都是用儲存過程實現的.其中裡面新增,修改,刪除方法沒有什麼好說的.重要的就是一些查詢方法,用到了一些高階的查詢.這裡總結一些資料庫查詢方法.一 特殊關鍵字的查詢 1 in not in 關鍵字in...

教務系統初期

從15號正式開學到現在一直在進行教務系統的開發,剛剛拿到學校使用的正方系統後台的時候,從了解需求,畫介面開始,到現在的資料庫設計。這次寫教務系統是由學宇師姐帶領著嚴格按照軟體工程的流程來進行開發的,首先是了解需求,了解需求大概用了兩天左右,進行了介面的大概設計,第一次寫介面沒有用到什麼東西,只是乙個...