爬蟲——圖書館搶座

python爬蟲 -----圖書館搶座

本人也是一位考研學子 奈何圖書館座位總搶不到 就利用學過的技術作了一個圖書館搶座系統。
主要原理是利用提交post表單的形式進行搶座。
python

驗證碼識別

整個爬蟲最難的可能就是驗證碼了,小編天然也走過不少歪路,有用過pytesseract識別,這pytesseract是真的垃圾,正確率不可直視 後來採用騰訊的一個接口進行測試 接口測試天然是可行的 奈何也得花個7-8秒 還不如手搶 在一次偶然的機會 經過文獻、百度終於找到了大哥muggle_ocr 這個大哥但是拯救我於水火之中啊 0.3秒識別 廢話很少說了代碼粘上cookie

#file_name是驗證碼圖片路徑	
		with open(file_name, "rb") as f:
            captcha_bytes = f.read()
        text = sdk.predict(image_bytes=captcha_bytes)

分析登陸請求信息

實質仍是以post的形式提交表單。經過fiddler抓包獲得,提交的信息和請求頭以下:
請求頭信息
在這裏插入圖片描述

session

用戶登陸獲取請求信息尤爲是cookie

登陸有一個重點就是利用session域保存一整個會話,爲方便以後的獲取驗證碼,以及搶座作準備。而後進行簡單登陸吧代碼以下:多線程

def login(self,username,password,quyu1,js3,zuoweihao):
        ses = requests.session()
        url='http://172.16.47.84/Login.aspx'
        date={
            '__VIEWSTATE': '/wEPDwUJODE2Mzg3MTk0ZGTiyMF48vnOd3k6J7zu3Z26Lhf+t0nElGTEKl9fwh3L8g==',
            '__EVENTVALIDATION': '/wEWBAKm8rLABwLs0bLrBgLs0fbZDAKM54rGBkCiS2WHGa6+EL0Kh6yO5Ah09T75GOA5NPCLw47Aiepp',
            'TextBox1': username,
            'TextBox2': password,
            'Button1': '登陸',
        }
        str = ''
        ses.post(url,headers=headers01,data=date)
        return str

經過cookie獲取驗證碼

根據登陸獲取的session域進行獲取驗證碼,保存在相應的路徑,代碼以下:併發

def yanzhengmaimage(self,ses):
        str1 = ses.get("http://172.16.47.84/VerifyCode.aspx?", headers=headers01)
        imagename=ses.__str__()[-19:-1]
        with open('code02'+imagename+'.jpg', 'wb') as img:
            img.write(str1.content)

分析搶座請求信息

在這裏插入圖片描述
主要如下面代碼爲主
python爬蟲

利用保存的cookie會話發送post 以及get請求

def tomorrow(self,ses,quyu1='3',js3='207',zuoweihao='001'):
        #quyu1 表明區域 1東區 2中區 3 西區
        #js3 表明教室 正常三位數字
        #zhuoweihao 表明座位號 3位數字
        str=quyu1+js3+zuoweihao
        url = 'http://172.16.47.84/Verify.aspx?seatid='+str
        date = {
            '__VIEWSTATE': '/wEPDwUKMTcwNzM5ODc3NGRkFTNhg2TJCMmXjk16k+jkM2+o35s9J3SOm+JNsHJEwo4=',
            '__EVENTVALIDATION': '/wEWAwL5+IeIAgLs0Yq1BQKM54rGBlbX/7GsfmI6ZGnyG3S+AAk6bsW9xrBTrDecfP4rhl+R',
            'TextBox3': '',
            'Button1': '提      交',
        }
        # self.base6434(ses)
        hi = ses.get(url, headers=headers01)
        date['TextBox3'] = self.base6434(ses)
        resp = ses.post(url, headers=headers02, data=date)
        soup = BeautifulSoup(resp.text, 'lxml')
        Soup = soup.find_all('script')[0]
        print(Soup)
        print(zuoweihao)
        ses.close()
        return Soup.text

搶座成功結果圖

在這裏插入圖片描述
先寫到這裏 再更新 小編累了
post

利用多線程併發給多個帳號進行同步搶座

併發搶座成功截圖

相關文章
相關標籤/搜索